diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bff9599e..50f6ec785 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Refined Storage Changelog +### 0.7.9 +**Bugfixes** +- Fixed not being able to place sugar cane +- Fixed not being able to place seeds + ### 0.7.8 **Bugfixes** - Updated to Forge 1951 diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java index 2c9210bd7..e936b08c4 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java @@ -1,12 +1,20 @@ package refinedstorage.container.slot; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBlockSpecial; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.IPlantable; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.SlotItemHandler; +import java.lang.reflect.Field; + public class SlotSpecimen extends SlotItemHandler { public static final int SPECIMEN_SIZE = 1; public static final int SPECIMEN_BLOCK = 2; @@ -30,7 +38,7 @@ public class SlotSpecimen extends SlotItemHandler { @Override public boolean isItemValid(ItemStack stack) { - return isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial) : true; + return isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial || stack.getItem() instanceof IPlantable) : true; } @Override @@ -49,4 +57,28 @@ public class SlotSpecimen extends SlotItemHandler { public boolean isBlockOnly() { return (flags & SPECIMEN_BLOCK) == SPECIMEN_BLOCK; } + + public static IBlockState getBlockState(IBlockAccess world, BlockPos pos, ItemStack stack) { + if (stack != null) { + Item item = stack.getItem(); + + if (item instanceof ItemBlockSpecial) { + try { + Field f = ((ItemBlockSpecial) item).getClass().getDeclaredField("block"); + f.setAccessible(true); + return ((Block) f.get(item)).getDefaultState(); + } catch (IllegalAccessException e) { + // NO OP + } catch (NoSuchFieldException e) { + // NO OP + } + } else if (item instanceof ItemBlock) { + return (((ItemBlock) item).getBlock()).getDefaultState(); + } else if (item instanceof IPlantable) { + return ((IPlantable) item).getPlant(world, pos); + } + } + + return null; + } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 5d7c74e82..b74f64b72 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -1,12 +1,9 @@ package refinedstorage.tile; import io.netty.buffer.ByteBuf; -import net.minecraft.block.Block; import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; import net.minecraft.inventory.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemBlockSpecial; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -19,13 +16,12 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerConstructor; +import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; -import java.lang.reflect.Field; - public class TileConstructor extends TileMachine implements ICompareConfig { public static final String NBT_COMPARE = "Compare"; @@ -36,29 +32,7 @@ public class TileConstructor extends TileMachine implements ICompareConfig { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - ItemStack stack = getStackInSlot(0); - - if (stack != null) { - Item item = stack.getItem(); - - if (item instanceof ItemBlockSpecial) { - try { - Field f = ((ItemBlockSpecial) item).getClass().getDeclaredField("block"); - f.setAccessible(true); - block = (Block) f.get(item); - } catch (IllegalAccessException e) { - // NO OP - } catch (NoSuchFieldException e) { - // NO OP - } - } else if (item instanceof ItemBlock) { - block = ((ItemBlock) item).getBlock(); - } else { - block = null; - } - } else { - block = null; - } + block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; private BasicItemHandler upgrades = new BasicItemHandler( @@ -69,7 +43,7 @@ public class TileConstructor extends TileMachine implements ICompareConfig { ); private int compare = 0; - private Block block; + private IBlockState block; private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(); @@ -83,14 +57,14 @@ public class TileConstructor extends TileMachine implements ICompareConfig { if (block != null && ticks % RefinedStorageUtils.getSpeed(upgrades, BASE_SPEED, 4) == 0) { BlockPos front = pos.offset(getDirection()); - if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { + if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { ItemStack took = controller.take(filter.getStackInSlot(0), 1, compare); if (took != null) { scheduler.resetSchedule(); - worldObj.setBlockState(front, block.getStateFromMeta(took.getItemDamage()), 1 | 2); + worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); // From ItemBlock.onItemUse - SoundType blockSound = block.getSoundType(); + SoundType blockSound = block.getBlock().getSoundType(); worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); } else if (RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_CRAFTING)) { ItemStack craft = filter.getStackInSlot(0);