diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java index a94cedc50..dc4d96e3f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/Comparer.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.util; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.block.BlockNode; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraftforge.fluids.FluidStack; @@ -179,6 +180,9 @@ public class Comparer implements IComparer { stack.getTagCompound().removeTag("sjData"); stack.getTagCompound().removeTag("PackOn"); break; + case "refinedstorage": + stack.getTagCompound().removeTag(BlockNode.NBT_REFINED_STORAGE_DATA); + break; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java index 28f8dd103..8fa98b451 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java @@ -7,11 +7,14 @@ import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public abstract class BlockNode extends BlockBase { + public static final String NBT_REFINED_STORAGE_DATA = "RefinedStorageData"; + public static final PropertyBool CONNECTED = PropertyBool.create("connected"); public BlockNode(String name) { @@ -28,6 +31,15 @@ public abstract class BlockNode extends BlockBase { super.onBlockPlacedBy(world, pos, state, placer, stack); if (!world.isRemote) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_REFINED_STORAGE_DATA)) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileNode) { + ((TileNode) tile).getNode().readConfiguration(stack.getTagCompound().getCompoundTag(NBT_REFINED_STORAGE_DATA)); + ((TileNode) tile).getNode().markDirty(); + } + } + API.instance().discoverNode(world, pos); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWrench.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWrench.java index 637e56fea..f9858d9ce 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWrench.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWrench.java @@ -1,9 +1,13 @@ package com.raoulvdberge.refinedstorage.item; import com.raoulvdberge.refinedstorage.api.util.IWrenchable; +import com.raoulvdberge.refinedstorage.block.BlockNode; +import com.raoulvdberge.refinedstorage.tile.TileNode; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -22,7 +26,8 @@ import java.util.List; public class ItemWrench extends ItemBase { private enum WrenchMode { ROTATION(0), - CONFIGURATION(1); + CONFIGURATION(1), + DISMANTLING(2); private final int id; @@ -31,7 +36,7 @@ public class ItemWrench extends ItemBase { } public WrenchMode cycle() { - return this == ROTATION ? CONFIGURATION : ROTATION; + return this == ROTATION ? CONFIGURATION : (this == CONFIGURATION ? DISMANTLING : ROTATION); } public NBTTagCompound writeToNBT(NBTTagCompound tag) { @@ -115,6 +120,28 @@ public class ItemWrench extends ItemBase { return EnumActionResult.SUCCESS; } + } else if (mode == WrenchMode.DISMANTLING) { + TileEntity tile = world.getTileEntity(pos); + IBlockState state = world.getBlockState(pos); + + if (tile instanceof TileNode) { + NBTTagCompound data = new NBTTagCompound(); + + ((TileNode) tile).writeConfiguration(data); + + ItemStack tileStack = new ItemStack( + state.getBlock(), + 1, + state.getBlock().getMetaFromState(state) + ); + + tileStack.setTagCompound(new NBTTagCompound()); + tileStack.getTagCompound().setTag(BlockNode.NBT_REFINED_STORAGE_DATA, data); + + world.setBlockToAir(pos); + + InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), tileStack); + } } return EnumActionResult.PASS; @@ -139,8 +166,8 @@ public class ItemWrench extends ItemBase { next.writeToNBT(stack.getTagCompound()); player.sendMessage(new TextComponentTranslation( - "item.refinedstorage:wrench.mode", - new TextComponentTranslation("item.refinedstorage:wrench.mode." + next.id).setStyle(new Style().setColor(TextFormatting.YELLOW)) + "item.refinedstorage:wrench.mode", + new TextComponentTranslation("item.refinedstorage:wrench.mode." + next.id).setStyle(new Style().setColor(TextFormatting.YELLOW)) )); } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index e7fdfbcc5..6b59806e7 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -271,5 +271,6 @@ item.refinedstorage:wrench.read=Configuration read. item.refinedstorage:wrench.mode=Mode: %s item.refinedstorage:wrench.mode.0=Rotation item.refinedstorage:wrench.mode.1=Configuration +item.refinedstorage:wrench.mode.2=Dismantling item.refinedstorage:security_card.name=Security Card item.refinedstorage:security_card.owner=Bound to: %s \ No newline at end of file