From eebe3c44a39e01cf1cea176759b0c9c9a0bf753d Mon Sep 17 00:00:00 2001 From: Tranqlmao <110073921+Tranqlmao@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:12:06 -0400 Subject: [PATCH 1/3] Strings Fix +Some block/item id parity --- .../Common/Media/MediaWindows64.arc | Bin 28538089 -> 28538642 bytes Minecraft.Client/Windows64Media/strings.h | 8 +++++++- Minecraft.World/Item.cpp | 4 ++-- Minecraft.World/Item.h | 4 ++-- Minecraft.World/Tile.cpp | 8 ++++---- Minecraft.World/Tile.h | 4 ++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index cb4386cba2f7b81ebdd700cdd02f07a04ce38187..b5600b143a48832a52c14f35412ff42d9c2023fa 100644 GIT binary patch delta 4648 zcmb`~d0bTG9>?)#9+wbBK-pv#&M+W@Ebc2RnHnOHAZTiC2ROjUFoUz;l1iy1xn%k) zvog(A7b2H#c5SmXyH?K#z3ytTORs>36bS&1`_P%Ufb32*!(e3?rIrYX$GU^lBhL#GE z{|7nr(KJ;bET>PU8Tv%Ib2F{dn`E2$v>k^lgXyq7t~Mu5=KR~eGmTa{$)a38z4e+ovLrdf3NTM?G<8z?#6(BGv6EbVc-rC=D#AakMF&mFp_^` zWW0@>h9KEkOmhrInK+Bq;xOYg+GQ}w%|FpmgGqleQHYV#L};FBbF_S+P5l;Am@&Ga z-6}-iXGEBPJaDt7jUQm-=^G<~Ej1mjqA5nB>^Otw;Sjo)o-mqZm`1PR5H9J2v5PVM zDIo@q7U6lC+l|liHs@^r_RfqxL*b@axj2u~OeXopUdl7Y$;)lXfs;K)(Ng?v#zNYP zL*+F3(4&a<}r0JG+@{1!>X^EE+ zLusYO5|oW^S)bD)j%HdqQ=_G$Tu?`!TdYAl&*OZP(EH9S3BmI8QA$m)NK+;i;4ra~ zY7!FUBa>-ef>j<0qWuZUGB}eiCL|0VeoTmr71-JJ=WO{k__bEU!{}}v^uLo|UoNA9 zM1yQ9CTF4|P569J-G(yC%s6 z-KnChRlYuxR^#L!R@&9oIBd`uJYAHC^e;Cqo1f4B2$#Khz6_&?x_LP8hA(ehNRdhL z^2`Amm}HTOCunMtNlq`O1xW_^_!(M zlXN!O(CS6qb_(uhlv%4NxtmF@{Ft)4#mi$Osj8c$*0f)UtY7eUv1XxW*GfDs|BKQ! zlT9ay$zfGi9QcY8SKP7~mD&-fI7z zw_llr|KT3`%c%bmcl7Os(fuOwrfUQ5U`N#j>X~Mio32t(TD<(~0L@M_MjDR$R&1B$ zQmZR$CGN?(o#Qss7EHk5V46wVR?zvh1nKF#C?b7HM7jq2HL_c5CrWY7}`Sz z2!W0e3SkfqouD&BKqN##G{is`hy^_uzz8OY0|m?w4;Dy(MCb}hV1;Dp1}TsVX~56j z9eO}d=mou@5A=n8&>sfCKo|rWFc^lwP{@Q^VHn&7!(jxBgxettMnN`=h8)O+Jh%hK zKt2?}SSW-d7zg9wPM81_VG`U0lVJ)>g=sJyR49fLC`(;`a6&cA z1Q)o$174_sSuh*sz+AW+=D~be0JU%r+zSg~5iExL;C@&Fb?^Wzg=MfDR=|U>5*~t8 zuo?&+hDTrxJPK>!F?bxFfOYUBtcMNo6l{d2;Td=qo`dJ%1=s|eVGC@9dUz2U;3e1w z+hGUngqPuO@CxjLSK;rl8(xFg;SG2b-hw^wHoOCSVIRB;`{6zK2OQWHk^a7Mt6Y}- zXz%0iSLjlgtULZbe6VZX@ejivs13_^+1ypC%jVFO!V3JVD~iXeE=?)bO7Odw$5x{$ zZjTd#o(k2Yl&B7+SX0WJUPq~7b0}jAf{)<{d;*`sQ8)(2;WIb^C*gDW0=|S(@D+Rw|AKGeTlfyXhttpm zXW%US0O#O5{0JA|BK!nD!!PhFT!P==GW-sIz`x-NT!m}!=d$`@-Adp{PAg7pP8&{J z&MllEPCHI8r#+_wCxp|H6UqtWgmXG^I&&g8k(?+_G$)4Bg%iusa||3K$Ha-_C>%2< zo@3!8a1uFPIY}HVCz;cYlfp^mq;b+Y-8nrtJvqHNy*Yh2eL4L&{W$|T137~@8JxkK zA)KL{OwO&GVVv7I!#N{3BRRKovN)qS*__dw98NALk8=lS3@4vcz!}Ra

qnamI7* zfhVv+AE$1=Lo`wx)^j#+p5koeJk5EA^DO5% n&hwlXIGZ?|Ia@eeIrW?uISrhbINLbeIXiT3)fey74e9hBx9n(i delta 4091 zcmZA2d0Y9NeH!8)n4LJ)Lvbv zL%RHrNCM?&S5Dl;C&CZm0MgJ|Min` zLflOfzL^e-YsURq=RR5|#BjyK3HQyMSFXpzAmQge!*d_!%NjA0^>AjWjT~xk`FS!; zQ){GY5Us^fR7d;NTDk2r`c|z~U2PJg&lur5&|MvJsI5S?EYe(rhC zhc#~AikYnsXFRvmc(OO;X*9BJ8qL7qvyRqlw6a|)9pIsXzSo3le5VSL++X+)v^t&m zE_*pD-M4o!;}H34mGU_=#cQ?lz&aYJ)yW%Y$c}?g=x8ziRy2aDG1$7$F|A%sY)Myn zI8A=Kkj}+Bg-94Ie6uWeN10`k#eLmN>v1Ou1B9P@!gD8=j`gR}I<;(CL(_GdE^)tL zUFO4ep8L9-mmtK8zwk_j)7t!DUA`Ph^}5hhL$DB??g)R+0?%h$8QLCG_e79qDyOu> zR_@;1l_ddW&}-$vYm}xBlh?nX(R!VXHPB29U2o7Py!+1(eqdf-=57_{>7YBCtqGG_tx#IW!lFrp*RpO7swX ze{)38V5`mUEVq=DJn~-to_`Y4Q-oiRWs2)wJ-71vssYqwP^L7j!E@>=0`4zxeU0v2 zTx)e4bKOMyW^fYep);+bz~? zgpMYg+Ecx$ot!a-elSIO*L{lPjY8!*t~a-q=V~d=Y?A6=%EmD4HJV~JOG=~-<|tWz zmJXYvrFSr0Gn-S>b_tQP40rZmpUq!`8#7a}8O5WM?q_miPj|`=SIhIsK7 z9Th4+yhO!ODjE7NEsWC2tR~tXr49bkB!q7d(VACh^meUZdc{I#qLi{%Pr4PQkzT_o zBw8Wu|7rk++UwjQQ$hI`qNAyOclcK{^5T1bju{`{h14gXlZn4dcToE zguX7?xE4G(tHy#K1Jj?P9Up9VPR;y3gcy71{_#x9IBSX1b*-9nd+AcNx<$>sh15Dm zBl{Flbc|Lm+d=(ejPjJ4CdHU$t2YXfejQI2*UYh&SjU$){}-jGEvUkLrD*FcEwMO@ ztj-SQmF0@snpQ%Dj1+BiZIi5J4}Sa=wI7ccqQ#L1M<0BDirOPFuA@G#weGJ?QG4{7 z5G@tt8yg&U9Q$u6#r+lT7fDfj;yU$+4N;x?M2PP7!Z+99D9N>zI^7rE6<9^3v7vHs z9xaYl%N6moJyxTx{|&3Z7Jly4p3CiS^AY_VtCanF&>aj_V<;?6B~Q<#E^#`kdzpsC z>E(pOGz|xL-lf%XT6rUZ-j37e{k2aBIb8(iR+Kx+Y?hKNM`=Z=`=0A=cf^0VU;bm( zy~RC=3d|lBL64m4c?Nrmk5I>WgM8x~%8fV5vs>tlWnlqbjW^557v}|bSPt;BoMVR?r&SKwI#EcHj$s;12=N z9s(fYU^L`GK8%5}V1aQk9tyw;6QB@^zy=ec7)oFg*uep%Fd53g3FS}$Q(!7o z!Zer;&%z9t3A11}%z?S^9L$5~VLrS73t%BEg2k`|mclZ45thRWsDhP1unJy+)vyNE z!ppD@*24za2%BItY=Ku`E4&J?!Rzn_Y=iCaChUM}sDYhO3%g)9)WIIu3va={;BD9k z@4&mT9}d8K@IHJ12jN3F1Ruf2@Ckehhv5kP8$R0?*x{(AS}xMBNo+V;q=;Csq2VZe zzHdXrG5!HoEW8fG$CXSgC&WYeea-ulVoET0lCyo=(>A-n{lfdc7d6JXJ>BQ;G>B8yCN#Z1P zx^YrCshsYd9-N+>r#NYxUYw^ny*Yh2eL3lz3{F2zf6f3-CTAdL5a$_A7AKoCn3KcF zT*P&vIsPW^!h6W^?9n=5n6n%;P-Ina_EFvw*XZ zvxu{pvxKvhvyAg1XE|pDr;4+ZL!4EdmpH3AYdC8;FLTy$)^j#+HgYy`HgmRcUg2!z syvliv^E&4Z&Nj|=&YPSaoN7)DXD6qYvx~EvQ^(n(IC!dHuOcsetIconName(L"rabbitsFoot")->setDescriptionId(IDS_ITEM_RABBIT_FOOT)->setUseDescriptionId(IDS_DESC_RABBIT_FOOT); Item::armor_stand = (new ArmorStandItem(160)) ->setBaseItemTypeAndMaterial(eBaseItemType_HangingItem,eMaterial_cloth)->setIconName(L"armorStand")->setDescriptionId(IDS_ITEM_ARMOR_STAND)->setUseDescriptionId(IDS_DESC_ARMOR_STAND); - Item::prismarine_crystal = (new Item(176))->setIconName(L"prismarineCrystal")->setDescriptionId(IDS_ITEM_PRISMARINE_CRYSTAL)->setUseDescriptionId(IDS_DESC_BRICK); - Item::prismarine_shard = (new Item(177))->setIconName(L"prismarineShard")->setDescriptionId(IDS_ITEM_PRISMARINE_SHARD)->setUseDescriptionId(IDS_DESC_BRICK); + Item::prismarine_crystal = (new Item(154))->setIconName(L"prismarineCrystal")->setDescriptionId(IDS_ITEM_PRISMARINE_CRYSTAL)->setUseDescriptionId(IDS_ITEM_PRISMARINE_CRYSTAL_DESC); + Item::prismarine_shard = (new Item(153))->setIconName(L"prismarineShard")->setDescriptionId(IDS_ITEM_PRISMARINE_SHARD)->setUseDescriptionId(IDS_ITEM_PRISMARINE_SHARD_DESC); } diff --git a/Minecraft.World/Item.h b/Minecraft.World/Item.h index e241af4c..18a7aaf1 100644 --- a/Minecraft.World/Item.h +++ b/Minecraft.World/Item.h @@ -662,8 +662,8 @@ public: static const int armor_stand_Id = 416; static const int rabbitStew_Id = 413; - static const int prismarine_cystal_Id = 432; - static const int prismarine_shard_Id = 433; + static const int prismarine_cystal_Id = 410; + static const int prismarine_shard_Id = 409; public: diff --git a/Minecraft.World/Tile.cpp b/Minecraft.World/Tile.cpp index bb5a7517..3611cac5 100644 --- a/Minecraft.World/Tile.cpp +++ b/Minecraft.World/Tile.cpp @@ -510,10 +510,10 @@ void Tile::staticCtor() Tile::door_acacia = (new DoorTile(196, Material::wood, L"doorAcacia"))->setDestroyTime(3.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"door_acacia")->setDescriptionId(IDS_TILE_DOOR_ACACIA)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_DOOR_WOOD); Tile::door_dark = (new DoorTile(197, Material::wood, L"doorDark"))->setDestroyTime(3.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"door_dark")->setDescriptionId(IDS_TILE_DOOR_DARK)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_DOOR_WOOD); - Tile::seaLantern = (new SeaLanternTile(198, Material::glass))->setBaseItemTypeAndMaterial(Item::eBaseItemType_torch, Item::eMaterial_glowstone)->setDestroyTime(0.3f)->setSoundType(Tile::SOUND_GLASS)->setLightEmission(1.0f)->setIconName(L"glowstone")->setDescriptionId(IDS_TILE_SEA_LANTERN)->setUseDescriptionId(IDS_DESC_GLOWSTONE); - Tile::prismarine = (new PrismarineTile(200, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(1.5f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"stone")->setDescriptionId(IDS_TILE_PRISMARINE)->setUseDescriptionId(IDS_DESC_STONE); - Tile::prismarinedark = (new Tile(201, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(2.0f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"prismarine_dark")->setDescriptionId(IDS_TILE_PRISMARINE_DARK)->setUseDescriptionId(IDS_DESC_STONE_BRICK); - Tile::prismarinebrick = (new Tile(202, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(2.0f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"prismarine_bricks")->setDescriptionId(IDS_TILE_PRISMARINE_BRICKS)->setUseDescriptionId(IDS_DESC_STONE_BRICK); + Tile::seaLantern = (new SeaLanternTile(169, Material::glass))->setBaseItemTypeAndMaterial(Item::eBaseItemType_torch, Item::eMaterial_glowstone)->setDestroyTime(0.3f)->setSoundType(Tile::SOUND_GLASS)->setLightEmission(1.0f)->setIconName(L"glowstone")->setDescriptionId(IDS_TILE_SEA_LANTERN)->setUseDescriptionId(IDS_DESC_GLOWSTONE); + Tile::prismarine = (new PrismarineTile(168, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(1.5f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"stone")->setDescriptionId(IDS_TILE_PRISMARINE)->setUseDescriptionId(IDS_ITEM_PRISMARINE_DESC); + Tile::prismarinedark = (new Tile(201, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(2.0f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"prismarine_dark")->setDescriptionId(IDS_TILE_PRISMARINE_DARK)->setUseDescriptionId(IDS_ITEM_PRISMARINE_DARK_DESC); + Tile::prismarinebrick = (new Tile(202, Material::stone))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(2.0f)->setExplodeable(10)->setSoundType(Tile::SOUND_STONE)->setIconName(L"prismarine_bricks")->setDescriptionId(IDS_TILE_PRISMARINE_BRICKS)->setUseDescriptionId(IDS_ITEM_PRISMARINE_BRICK_DESC); diff --git a/Minecraft.World/Tile.h b/Minecraft.World/Tile.h index 9cf6a153..f91f71b4 100644 --- a/Minecraft.World/Tile.h +++ b/Minecraft.World/Tile.h @@ -395,8 +395,8 @@ public: static const int darkFence_Id = 191; static const int acaciaFence_Id = 192; - static const int seaLantern_Id = 198; - static const int prismarine_Id = 200; + static const int seaLantern_Id = 169; + static const int prismarine_Id = 168; static const int prismarinedark_Id = 201; static const int prismarinebrick_Id = 202; From 07fd3222b85aa31b5602e8e7fbbab59b4ee5e345 Mon Sep 17 00:00:00 2001 From: Tranqlmao <110073921+Tranqlmao@users.noreply.github.com> Date: Fri, 20 Mar 2026 01:53:28 -0400 Subject: [PATCH 2/3] Added Double Tall Plants TODO: Add Sunflower Add natural spawning of these flowers --- .../Common/Media/MediaWindows64.arc | Bin 28538642 -> 28538710 bytes .../Common/UI/IUIScene_CreativeMenu.cpp | 8 +- Minecraft.Client/PreStitchedTextureMap.cpp | 11 + Minecraft.Client/Windows64Media/strings.h | 9 +- Minecraft.World/ColoredTileItem.cpp | 13 +- Minecraft.World/Minecraft.World.vcxproj | 2 + .../Minecraft.World.vcxproj.filters | 2 + Minecraft.World/Tallgrass2.cpp | 292 ++++++++++++++++++ Minecraft.World/Tallgrass2.h | 62 ++++ Minecraft.World/Tile.cpp | 30 +- Minecraft.World/Tile.h | 5 +- 11 files changed, 428 insertions(+), 6 deletions(-) create mode 100644 Minecraft.World/Tallgrass2.cpp create mode 100644 Minecraft.World/Tallgrass2.h diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index b5600b143a48832a52c14f35412ff42d9c2023fa..d019f87f6b0168c6b65ddedefc1384515547f357 100644 GIT binary patch delta 4008 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 diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index 9572bbfc..20ca15d2 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -12,6 +12,7 @@ #include "..\..\..\Minecraft.World\net.minecraft.world.entity.h" #include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.h" #include "..\..\..\Minecraft.World\JavaMath.h" +#include "..\..\..\Minecraft.World\TallGrass2.h" // 4J JEV - Images for each tab. IUIScene_CreativeMenu::TabSpec **IUIScene_CreativeMenu::specs = nullptr; @@ -231,7 +232,12 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::rose_Id, Rose::WHITE_TULIP) ITEM_AUX(Tile::rose_Id, Rose::PINK_TULIP) ITEM_AUX(Tile::rose_Id, Rose::OXEYE_DAISY) - + // SUNFLOWER LOCATION + ITEM_AUX(Tile::tallgrass2_Id, TallGrass2::LILAC) + ITEM_AUX(Tile::tallgrass2_Id, TallGrass2::TALL_GRASS) + ITEM_AUX(Tile::tallgrass2_Id, TallGrass2::LARGE_FERN) + ITEM_AUX(Tile::tallgrass2_Id, TallGrass2::ROSE_BUSH) + ITEM_AUX(Tile::tallgrass2_Id, TallGrass2::PEONY) ITEM(Tile::mushroom_brown_Id) ITEM(Tile::mushroom_red_Id) ITEM(Tile::cactus_Id) diff --git a/Minecraft.Client/PreStitchedTextureMap.cpp b/Minecraft.Client/PreStitchedTextureMap.cpp index b32913ee..07973d34 100644 --- a/Minecraft.Client/PreStitchedTextureMap.cpp +++ b/Minecraft.Client/PreStitchedTextureMap.cpp @@ -1058,5 +1058,16 @@ void PreStitchedTextureMap::loadUVs() ADD_ICON(24, 3, L"door_jungle_lower"); ADD_ICON(24, 4, L"door_spruce_lower"); + ADD_ICON(21, 1, L"tallgrass2_tall_grass_lower"); + ADD_ICON(20, 1, L"tallgrass2_tall_grass_upper"); + ADD_ICON(21, 0, L"tallgrass2_large_fern_lower"); + ADD_ICON(20, 0, L"tallgrass2_large_fern_upper"); + ADD_ICON(21, 2, L"tallgrass2_peony_lower"); + ADD_ICON(20, 2, L"tallgrass2_peony_upper"); + ADD_ICON(21, 3, L"tallgrass2_rose_bush_lower"); + ADD_ICON(20, 3, L"tallgrass2_rose_bush_upper"); + ADD_ICON(21, 4, L"tallgrass2_lilac_lower"); + ADD_ICON(20, 4, L"tallgrass2_lilac_upper"); + } } diff --git a/Minecraft.Client/Windows64Media/strings.h b/Minecraft.Client/Windows64Media/strings.h index 085e29f6..fbbcead2 100644 --- a/Minecraft.Client/Windows64Media/strings.h +++ b/Minecraft.Client/Windows64Media/strings.h @@ -2350,5 +2350,10 @@ #define IDS_ITEM_PRISMARINE_DARK_DESC 2344 #define IDS_ITEM_PRISMARINE_BRICK_DESC 2345 #define IDS_ITEM_PRISMARINE_CRYSTAL_DESC 2346 -#define IDS_ITEM_PRISMARINE_SHARD_DESC 2346 -#define IDS_ITEM_RABBIT_STEW 2347 \ No newline at end of file +#define IDS_ITEM_PRISMARINE_SHARD_DESC 2347 +#define IDS_ITEM_RABBIT_STEW 2348 +#define IDS_TILE_TALL_GRASS2 2349 +#define IDS_TILE_LARGE_FERN 2350 +#define IDS_TILE_LILAC 2351 +#define IDS_TILE_ROSE_BUSH 2352 +#define IDS_TILE_PEONY 2353 \ No newline at end of file diff --git a/Minecraft.World/ColoredTileItem.cpp b/Minecraft.World/ColoredTileItem.cpp index f659d7a5..deabaaed 100644 --- a/Minecraft.World/ColoredTileItem.cpp +++ b/Minecraft.World/ColoredTileItem.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "net.minecraft.world.level.tile.h" #include "ColoredTileItem.h" +#include "Facing.h" ColoredTileItem::ColoredTileItem(int id, bool stackedByData) : TileItem(id) { @@ -57,4 +58,14 @@ unsigned int ColoredTileItem::getDescriptionId(shared_ptr instance return descriptionPostfixes[id]; //TileItem::getDescriptionId(instance) + "." + descriptionPostfixes[id]; } return TileItem::getDescriptionId(instance); -} \ No newline at end of file +} +class TallGrass2TileItem : public ColoredTileItem +{ +public: + TallGrass2TileItem(int id) : ColoredTileItem(id, true) {} + + virtual Icon* getIcon(int auxValue) override + { + return Tile::tiles[getTileId()]->getTexture(Facing::UP, auxValue); + } +}; \ No newline at end of file diff --git a/Minecraft.World/Minecraft.World.vcxproj b/Minecraft.World/Minecraft.World.vcxproj index 354d66ad..7df40371 100644 --- a/Minecraft.World/Minecraft.World.vcxproj +++ b/Minecraft.World/Minecraft.World.vcxproj @@ -2833,6 +2833,7 @@ + @@ -3675,6 +3676,7 @@ + diff --git a/Minecraft.World/Minecraft.World.vcxproj.filters b/Minecraft.World/Minecraft.World.vcxproj.filters index 301cfc32..61aae0d6 100644 --- a/Minecraft.World/Minecraft.World.vcxproj.filters +++ b/Minecraft.World/Minecraft.World.vcxproj.filters @@ -827,6 +827,7 @@ + @@ -1823,6 +1824,7 @@ + diff --git a/Minecraft.World/Tallgrass2.cpp b/Minecraft.World/Tallgrass2.cpp new file mode 100644 index 00000000..e60f6bc8 --- /dev/null +++ b/Minecraft.World/Tallgrass2.cpp @@ -0,0 +1,292 @@ +#include "stdafx.h" +#include "TallGrass2.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.biome.h" +#include "net.minecraft.world.item.h" +#include "net.minecraft.world.h" +#include "net.minecraft.h" +#include "..\Minecraft.Client\Minecraft.h" +#include "net.minecraft.stats.h" + + +static const unsigned int DESCRIPTION_IDS[TallGrass2::VARIANT_COUNT] = { + IDS_TILE_TALL_GRASS2, // 0 - Tall Grass + IDS_TILE_LARGE_FERN, // 1 - Large Fern + IDS_TILE_LILAC, // 2 - Lilac + IDS_TILE_ROSE_BUSH, // 3 - Rose Bush + IDS_TILE_PEONY, // 4 - Peony +}; + + +static const wstring TEXTURE_BOTTOM[TallGrass2::VARIANT_COUNT] = { + L"tallgrass2_tall_grass_lower", + L"tallgrass2_large_fern_lower", + L"tallgrass2_lilac_lower", + L"tallgrass2_rose_bush_lower", + L"tallgrass2_peony_lower", +}; + +static const wstring TEXTURE_TOP[TallGrass2::VARIANT_COUNT] = { + L"tallgrass2_tall_grass_upper", + L"tallgrass2_large_fern_upper", + L"tallgrass2_lilac_upper", + L"tallgrass2_rose_bush_upper", + L"tallgrass2_peony_upper", +}; + + +TallGrass2::TallGrass2(int id) + : Bush(id, Material::replaceable_plant) +{ + this->updateDefaultShape(); +} + + +void TallGrass2::updateDefaultShape() +{ + float ss = 0.4f; + this->setShape(0.5f - ss, 0.0f, 0.5f - ss, 0.5f + ss, 1.0f, 0.5f + ss); +} + + +bool TallGrass2::blocksLight() { return false; } +bool TallGrass2::isSolidRender(bool) { return false; } +bool TallGrass2::isCubeShaped() { return false; } +int TallGrass2::getRenderShape() { return Tile::SHAPE_CROSS_TEXTURE; } + + +bool TallGrass2::isGrassColored(int variant) +{ + return variant == TALL_GRASS || variant == LARGE_FERN; +} + + +void TallGrass2::registerIcons(IconRegister* iconRegister) +{ + for (int i = 0; i < VARIANT_COUNT; i++) + { + iconBottom[i] = iconRegister->registerIcon(TEXTURE_BOTTOM[i]); + iconTop[i] = iconRegister->registerIcon(TEXTURE_TOP[i]); + } + + icon = iconTop[TALL_GRASS]; +} + + +Icon* TallGrass2::getTexture(int face, int data) +{ + bool isUpper = (data & UPPER_BIT) != 0; + int variant = data & ~UPPER_BIT; + if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; + + if (face == Facing::UP && !isUpper) return iconTop[variant]; + + return isUpper ? iconTop[variant] : iconBottom[variant]; +} + +Icon* TallGrass2::getTexture(LevelSource* level, int x, int y, int z, int face) +{ + int data = level->getData(x, y, z); + bool isUpper = (data & UPPER_BIT) != 0; + int variant = data & ~UPPER_BIT; + if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; + return isUpper ? iconTop[variant] : iconBottom[variant]; +} + + +int TallGrass2::getVariant(LevelSource* level, int x, int y, int z) +{ + int data = level->getData(x, y, z); + bool isUpper = (data & UPPER_BIT) != 0; + int lowerData = isUpper ? level->getData(x, y - 1, z) : data; + int variant = lowerData & ~UPPER_BIT; + if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; + return variant; +} + + +int TallGrass2::getColor(int auxData) +{ + int variant = auxData & ~UPPER_BIT; + if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; + if (!isGrassColored(variant)) return 0xFFFFFF; + return Minecraft::GetInstance()->getColourTable()->getColor(eMinecraftColour_Grass_Common); +} + +int TallGrass2::getColor() const +{ + return Minecraft::GetInstance()->getColourTable()->getColor(eMinecraftColour_Grass_Common); +} + +int TallGrass2::getColor(LevelSource* level, int x, int y, int z) +{ + return getColor(level, x, y, z, level->getData(x, y, z)); +} + +int TallGrass2::getColor(LevelSource* level, int x, int y, int z, int data) +{ + int variant = data & ~UPPER_BIT; + if (variant < 0 || variant >= VARIANT_COUNT) variant = 0; + if (!isGrassColored(variant)) return 0xFFFFFF; + return level->getBiome(x, z)->getGrassColor(); +} + + +bool TallGrass2::mayPlace(Level* level, int x, int y, int z) +{ + if (y >= Level::maxBuildHeight - 1) return false; + return Bush::mayPlaceOn(level->getTile(x, y - 1, z)) + && level->getTile(x, y, z) == 0 + && level->getTile(x, y + 1, z) == 0; +} +void TallGrass2::finalizePlacement(Level* level, int x, int y, int z, int data) +{ + if ((data & UPPER_BIT) != 0) return; + int variant = data & ~UPPER_BIT; + level->setTileAndData(x, y + 1, z, id, variant | UPPER_BIT, Tile::UPDATE_ALL); + level->setTilesDirty(x - 1, y - 1, z - 1, x + 1, y + 2, z + 1); +} + +void TallGrass2::onPlace(Level* level, int x, int y, int z) +{ + int data = level->getData(x, y, z); + if ((data & UPPER_BIT) != 0) return; + + int variant = data & ~UPPER_BIT; + level->setTileAndData(x, y + 1, z, id, variant | UPPER_BIT, Tile::UPDATE_ALL); + level->setTilesDirty(x - 1, y - 1, z - 1, x + 1, y + 2, z + 1); +} + + +bool TallGrass2::canSurvive(Level* level, int x, int y, int z) +{ + int data = level->getData(x, y, z); + bool isUpper = (data & UPPER_BIT) != 0; + + if (isUpper) + return level->getTile(x, y - 1, z) == id; + + return (level->getDaytimeRawBrightness(x, y, z) >= 8 || level->canSeeSky(x, y, z)) + && mayPlaceOn(level->getTile(x, y - 1, z)); +} + +void TallGrass2::neighborChanged(Level* level, int x, int y, int z, int type) +{ + int data = level->getData(x, y, z); + bool isUpper = (data & UPPER_BIT) != 0; + + if (!isUpper) + { + if (!canSurvive(level, x, y, z)) + { + spawnResources(level, x, y, z, data, 0); + level->setTileAndData(x, y, z, 0, 0, Tile::UPDATE_CLIENTS); + if (level->getTile(x, y + 1, z) == id) + level->removeTile(x, y + 1, z); + } + } + else + { + if (level->getTile(x, y - 1, z) != id) + level->removeTile(x, y, z); + } +} + +void TallGrass2::tick(Level* level, int x, int y, int z, Random* random) +{ + int data = level->getData(x, y, z); + bool isUpper = (data & UPPER_BIT) != 0; + + if (!isUpper) + { + if (!canSurvive(level, x, y, z)) + { + spawnResources(level, x, y, z, data, 0); + level->setTileAndData(x, y, z, 0, 0, Tile::UPDATE_CLIENTS); + if (level->getTile(x, y + 1, z) == id) + level->removeTile(x, y + 1, z); + } + } +} + + +int TallGrass2::getResource(int data, Random* random, int playerBonusLevel) +{ + + return -1; +} + +int TallGrass2::getResourceCountForLootBonus(int bonusLevel, Random* random) +{ + return 1; +} + +bool TallGrass2::isSilkTouchable() +{ + return true; +} + +shared_ptr TallGrass2::getSilkTouchItemInstance(int data) +{ + + if ((data & UPPER_BIT) != 0) return nullptr; + int variant = data & ~UPPER_BIT; + return std::make_shared(this, 1, variant); +} + +void TallGrass2::playerDestroy(Level* level, shared_ptr player, int x, int y, int z, int data) +{ + if (!level->isClientSide + && player->getSelectedItem() != nullptr + && player->getSelectedItem()->id == Item::shears->id) + { + player->awardStat( + GenericStats::blocksMined(id), + GenericStats::param_blocksMined(id, data, 1)); + + if ((data & UPPER_BIT) == 0) + { + int variant = data & ~UPPER_BIT; + popResource(level, x, y, z, std::make_shared(this, 1, variant)); + } + } + else + { + + Tile::playerDestroy(level, player, x, y, z, data); + } +} + +void TallGrass2::playerWillDestroy(Level* level, int x, int y, int z, int data, shared_ptr player) +{ + if (player->abilities.instabuild) + { + if ((data & UPPER_BIT) != 0) + { + if (level->getTile(x, y - 1, z) == id) + level->removeTile(x, y - 1, z); + } + else + { + if (level->getTile(x, y + 1, z) == id) + level->removeTile(x, y + 1, z); + } + } +} + +int TallGrass2::cloneTileData(Level* level, int x, int y, int z) +{ + return getVariant(level, x, y, z); +} + +unsigned int TallGrass2::getDescriptionId(int iData) +{ + if (iData < 0) iData = 0; + if (iData >= VARIANT_COUNT) iData = 0; + return DESCRIPTION_IDS[iData]; +} + +int TallGrass2::getPistonPushReaction() +{ + return Material::PUSH_DESTROY; +} \ No newline at end of file diff --git a/Minecraft.World/Tallgrass2.h b/Minecraft.World/Tallgrass2.h new file mode 100644 index 00000000..f74c2d69 --- /dev/null +++ b/Minecraft.World/Tallgrass2.h @@ -0,0 +1,62 @@ +#pragma once +#include "Bush.h" + +class TallGrass2 : public Bush +{ + friend class Tile; +public: + static const int TALL_GRASS = 0; + static const int LARGE_FERN = 1; + static const int LILAC = 2; + static const int ROSE_BUSH = 3; + static const int PEONY = 4; + static const int VARIANT_COUNT = 5; + + static const int UPPER_BIT = 8; + +private: + Icon* iconBottom[VARIANT_COUNT]; + Icon* iconTop[VARIANT_COUNT]; + +protected: + TallGrass2(int id); + +public: + virtual void updateDefaultShape() override; + virtual Icon* getTexture(int face, int data) override; + virtual Icon* getTexture(LevelSource* level, int x, int y, int z, int face) override; + virtual void registerIcons(IconRegister* iconRegister) override; + virtual int getRenderShape() override; + virtual bool blocksLight() override; + virtual bool isSolidRender(bool isServerLevel = false) override; + virtual bool isCubeShaped() override; + + virtual int getColor(int auxData) override; + virtual int getColor() const override; + virtual int getColor(LevelSource* level, int x, int y, int z) override; + virtual int getColor(LevelSource* level, int x, int y, int z, int data) override; + + virtual void finalizePlacement(Level* level, int x, int y, int z, int data) override; + virtual void onPlace(Level* level, int x, int y, int z) override; + virtual bool mayPlace(Level* level, int x, int y, int z) override; + virtual void neighborChanged(Level* level, int x, int y, int z, int type) override; + virtual bool canSurvive(Level* level, int x, int y, int z) override; + virtual void tick(Level* level, int x, int y, int z, Random* random) override; + + virtual int getResource(int data, Random* random, int playerBonusLevel) override; + virtual int getResourceCountForLootBonus(int bonusLevel, Random* random) override; + virtual void playerDestroy(Level* level, shared_ptr player, int x, int y, int z, int data) override; + virtual void playerWillDestroy(Level* level, int x, int y, int z, int data, shared_ptr player) override; + + virtual int cloneTileData(Level* level, int x, int y, int z) override; + virtual unsigned int getDescriptionId(int iData = -1) override; + virtual int getPistonPushReaction() override; + +protected: + virtual bool isSilkTouchable() override; + virtual shared_ptr getSilkTouchItemInstance(int data) override; + +private: + int getVariant(LevelSource* level, int x, int y, int z); + bool isGrassColored(int variant); +}; \ No newline at end of file diff --git a/Minecraft.World/Tile.cpp b/Minecraft.World/Tile.cpp index 1f324fc7..96b43971 100644 --- a/Minecraft.World/Tile.cpp +++ b/Minecraft.World/Tile.cpp @@ -16,6 +16,10 @@ #include "net.minecraft.world.h" #include "net.minecraft.h" #include "Tile.h" +#include "Tallgrass2.h" +#include "facing.h" + + @@ -257,6 +261,8 @@ Tile* Tile::prismarine = nullptr; Tile* Tile::tree2Trunk = nullptr; Tile* Tile::packed_ice = nullptr; +TallGrass2* Tile::tallgrass2 = nullptr; + DWORD Tile::tlsIdxShape = TlsAlloc(); Tile::ThreadStorage::ThreadStorage() @@ -276,6 +282,24 @@ void Tile::ReleaseThreadStorage() ThreadStorage *tls = static_cast(TlsGetValue(Tile::tlsIdxShape)); delete tls; } +class TallGrass2TileItem : public ColoredTileItem +{ +public: + TallGrass2TileItem(int id) : ColoredTileItem(id, true) {} + + virtual Icon* getIcon(int auxValue) override + { + return Tile::tiles[getTileId()]->getTexture(Facing::UP, auxValue); + } + + virtual int getColor(shared_ptr item, int spriteLayer) override + { + int variant = item->getAuxValue(); + if (variant == TallGrass2::TALL_GRASS || variant == TallGrass2::LARGE_FERN) + return Tile::tiles[getTileId()]->getColor(variant); + return 0xFFFFFF; + } +}; void Tile::staticCtor() { @@ -510,6 +534,7 @@ void Tile::staticCtor() Tile::seaLantern = (new SeaLanternTile(169, Material::glass))->setBaseItemTypeAndMaterial(Item::eBaseItemType_torch, Item::eMaterial_glowstone)->setDestroyTime(0.3f)->setSoundType(Tile::SOUND_GLASS)->setLightEmission(1.0f)->setIconName(L"glowstone")->setDescriptionId(IDS_TILE_SEA_LANTERN)->setUseDescriptionId(IDS_DESC_GLOWSTONE); Tile::prismarine = (new PrismarineTile(168))->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stone)->setDestroyTime(1.5f)->setExplodeable(10)->setSoundType(SOUND_STONE)->setIconName(L"prismarine")->setDescriptionId(IDS_TILE_PRISMARINE)->setUseDescriptionId(IDS_ITEM_PRISMARINE_DESC); + Tile::tallgrass2 = static_cast((new TallGrass2(175))->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"tallgrass2_tall_grass_upper")->setDescriptionId(IDS_TILE_TALL_GRASS2)->setUseDescriptionId(IDS_DESC_TALL_GRASS)->disableMipmap()->sendTileData(0xFF)); // Special cases for certain items since they can have different icons Item::items[wool_Id] = ( new WoolTileItem(Tile::wool_Id- 256) )->setIconName(L"cloth")->setDescriptionId(IDS_TILE_CLOTH)->setUseDescriptionId(IDS_DESC_WOOL); @@ -548,7 +573,9 @@ void Tile::staticCtor() Item::items[red_sandstone_Id] = (new MultiTextureTileItem(Tile::red_sandstone_Id - 256, red_sandstone, (int*)RedSandStoneTile::SANDSTONE_NAMES, RedSandStoneTile::SANDSTONE_BLOCK_NAMES))->setIconName(L"red_sandstone")->setDescriptionId(IDS_TILE_SANDSTONE)->setUseDescriptionId(IDS_DESC_SANDSTONE); Item::items[tree2Trunk_Id] = (new MultiTextureTileItem(Tile::tree2Trunk_Id - 256, tree2Trunk, (int*)TreeTile2::TREE_NAMES, TreeTile2::TREE_NAMES_LENGTH))->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->setUseDescriptionId(IDS_DESC_LOG); Item::items[sponge_Id] = (new MultiTextureTileItem(Tile::sponge_Id - 256, sponge, (int*)Sponge::SPONGE_NAMES, Sponge::SPONGE_NAMES_LENGTH))->setIconName(L"sponge")->setDescriptionId(IDS_TILE_SPONGE)->setUseDescriptionId(IDS_DESC_SPONGE); - + int tallgrass2IdsData[5] = { IDS_TILE_TALL_GRASS2, IDS_TILE_LARGE_FERN, IDS_TILE_LILAC, IDS_TILE_ROSE_BUSH, IDS_TILE_PEONY }; + intArray tallgrass2Ids = intArray(tallgrass2IdsData, 5); + Item::items[tallgrass2_Id] = static_cast((new TallGrass2TileItem(Tile::tallgrass2_Id - 256))->setDescriptionId(IDS_TILE_TALL_GRASS2)->setUseDescriptionId(IDS_DESC_TALL_GRASS))->setDescriptionPostfixes(tallgrass2Ids); for (int i = 0; i < 256; i++) { @@ -1632,6 +1659,7 @@ int Tile::SoundType::getPlaceSound() const } + /* 4J: These are necessary on the PS3. (and 4 and Vita). diff --git a/Minecraft.World/Tile.h b/Minecraft.World/Tile.h index 2a3464ff..9f194c08 100644 --- a/Minecraft.World/Tile.h +++ b/Minecraft.World/Tile.h @@ -42,6 +42,7 @@ class TileEntity; class HalfSlabTile; class Icon; class IconRegister; +class TallGrass2; class ChunkRebuildData; @@ -380,7 +381,7 @@ public: static const int clayHardened_Id = 172; static const int coalBlock_Id = 173; static const int packed_ice_Id = 174; - //175 double_plant + static const int tallgrass2_Id = 175; //176 standing_banner //177 wall_banner static const int invertedDaylightDetector_Id = 178; @@ -613,6 +614,8 @@ public: static Tile* packed_ice; static Tile* seaLantern; static Tile* prismarine; + + static TallGrass2* tallgrass2; static void staticCtor(); From 79449a98440eb5073921f7f2096592a6b0b6fdbb Mon Sep 17 00:00:00 2001 From: piebot <164795032+piebotc@users.noreply.github.com> Date: Fri, 20 Mar 2026 08:58:33 +0300 Subject: [PATCH 3/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a29a3e2a..897e3ab4 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This project aims to backport the newer title updates back to the Minecraft: Leg - Port Title Update 25 (98.21% complete) -- Port Title Update 31 (68.66%% complete) +- Port Title Update 31 (76.12% complete) See our our [Contributor's Guide](./CONTRIBUTING.md) for more information on the goals of this project.