55import com .gtnewhorizon .structurelib .alignment .IAlignment ;
66import com .gtnewhorizon .structurelib .alignment .enumerable .ExtendedFacing ;
77import com .gtnewhorizon .structurelib .events .SurvivalConstructionEvent ;
8- import com .gtnewhorizon .structurelib .item .BasicBlockInfoProvider ;
8+ import com .gtnewhorizon .structurelib .item .ItemBlockInfoProvider ;
99import com .gtnewhorizon .structurelib .item .IBlockInfoProvider ;
1010import com .gtnewhorizon .structurelib .structure .BlockInfo ;
1111import com .gtnewhorizon .structurelib .structure .IStructureDefinition ;
1212import com .gtnewhorizon .structurelib .structure .IStructureElement ;
1313import com .gtnewhorizon .structurelib .util .Vec3Impl ;
1414import it .unimi .dsi .fastutil .objects .Object2ObjectArrayMap ;
15- import it .unimi .dsi .fastutil .objects .ObjectSet ;
16- import it .unimi .dsi .fastutil .objects .Reference2ObjectOpenHashMap ;
1715import lombok .RequiredArgsConstructor ;
1816import lombok .val ;
1917import lombok .var ;
2018
21- import net .minecraft .block .Block ;
2219import net .minecraft .entity .player .EntityPlayer ;
2320import net .minecraft .entity .player .EntityPlayerMP ;
2421import net .minecraft .item .ItemBlock ;
2926import net .minecraftforge .common .util .FakePlayer ;
3027import net .minecraftforge .common .util .ForgeDirection ;
3128
32- import cpw .mods .fml .common .FMLCommonHandler ;
33- import cpw .mods .fml .common .registry .GameRegistry ;
34-
3529import java .util .ArrayDeque ;
36- import java .util .ArrayList ;
37- import java .util .HashSet ;
38- import java .util .Iterator ;
39- import java .util .List ;
4030import java .util .Map ;
4131import java .util .Queue ;
42- import java .util .Set ;
4332
4433public class ConstructableUtility {
4534 private static final int LIMIT = 16 ;
@@ -112,9 +101,7 @@ private static boolean handle0(ItemStack aStack, EntityPlayer aPlayer, World aWo
112101 if (itemstack .getItem () instanceof IBlockInfoProvider ) {
113102 blockInfoProvider = ((IBlockInfoProvider ) itemstack .getItem ());
114103 } else if (itemstack .getItem () != null && ItemBlock .class .equals (itemstack .getItem ().getClass ())) {
115- val itemBlock = (ItemBlock ) itemstack .getItem ();
116-
117- blockInfoProvider = new BasicBlockInfoProvider (itemBlock .field_150939_a );
104+ blockInfoProvider = new ItemBlockInfoProvider (itemstack );
118105 }
119106
120107 if (blockInfoProvider == null ) {
@@ -123,12 +110,15 @@ private static boolean handle0(ItemStack aStack, EntityPlayer aPlayer, World aWo
123110
124111 val blockInfoSet = callback .blocksToPlace .keySet ();
125112 for (var iterator = blockInfoSet .iterator (); placedBlocks < LIMIT && iterator .hasNext (); ) {
126- val blockInfo = iterator .next ();
127- if (!blockInfoProvider .matches (blockInfo )) {
113+ val blockInfoToCheck = iterator .next ();
114+ if (!blockInfoProvider .matches (itemstack , blockInfoToCheck )) {
128115 continue ;
129116 }
130117
131- val positions = callback .blocksToPlace .get (blockInfo );
118+ val blockInfoToUse = blockInfoProvider .getBlockInfo (itemstack );
119+
120+ // blockInfoToUse might not be *exactly* the same as blockInfoToCheck
121+ val positions = callback .blocksToPlace .get (blockInfoToCheck );
132122
133123 if (positions .isEmpty ()) {
134124 continue ;
@@ -142,7 +132,7 @@ private static boolean handle0(ItemStack aStack, EntityPlayer aPlayer, World aWo
142132 val z = position .get2 ();
143133
144134 if (aWorld .isAirBlock (x , y , z ) && aPlayer .inventory .mainInventory [i ] != null ) {
145- val didPlace = aWorld .setBlock (x , y , z , blockInfo .block , blockInfo .meta , 3 );
135+ val didPlace = aWorld .setBlock (x , y , z , blockInfoToUse .block , blockInfoToUse .meta , 3 );
146136
147137 if (didPlace ) {
148138 aPlayer .inventory .decrStackSize (i , 1 );
0 commit comments