Added Wrench dismantling mode. Fixes #795

This commit is contained in:
raoulvdberge
2016-12-28 18:08:48 +01:00
parent 931c1430ec
commit 647faf1120
4 changed files with 48 additions and 4 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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))
));
}

View File

@@ -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