diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItemPortable.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItemPortable.java index b90d81ba6..85de7c701 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItemPortable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/StorageCacheItemPortable.java @@ -33,7 +33,7 @@ public class StorageCacheItemPortable implements IStorageCache { portableGrid.getStorage().getStacks().forEach(list::add); } - portableGrid.getWatchers().forEach(this::sendTo); + portableGrid.getWatchers().forEach(this::sendUpdateTo); } @Override @@ -67,7 +67,7 @@ public class StorageCacheItemPortable implements IStorageCache { return Collections.emptyList(); } - public void sendTo(EntityPlayer player) { + public void sendUpdateTo(EntityPlayer player) { RS.INSTANCE.network.sendTo(new MessageGridItemUpdate(buf -> { buf.writeInt(list.getStacks().size()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java index f3e734c7e..9b51e1d3d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java @@ -4,6 +4,8 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.item.ItemBlockPortableGrid; import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -21,6 +23,8 @@ import java.util.ArrayList; import java.util.List; public class BlockPortableGrid extends BlockBase { + public static final PropertyEnum TYPE = PropertyEnum.create("type", PortableGridType.class); + public BlockPortableGrid() { super("portable_grid"); } @@ -76,6 +80,23 @@ public class BlockPortableGrid extends BlockBase { return drops; } + @Override + protected BlockStateContainer createBlockState() { + return createBlockStateBuilder() + .add(TYPE) + .build(); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return getDefaultState().withProperty(TYPE, meta == 0 ? PortableGridType.NORMAL : PortableGridType.CREATIVE); + } + + @Override + public int getMetaFromState(IBlockState state) { + return state.getValue(TYPE) == PortableGridType.NORMAL ? 0 : 1; + } + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridType.java b/src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridType.java new file mode 100644 index 000000000..d2c55a7f5 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridType.java @@ -0,0 +1,30 @@ +package com.raoulvdberge.refinedstorage.block; + +import net.minecraft.util.IStringSerializable; + +public enum PortableGridType implements IStringSerializable { + NORMAL(0, "normal"), + CREATIVE(1, "creative"); + + private int id; + private String name; + + PortableGridType(int id, String name) { + this.id = id; + this.name = name; + } + + @Override + public String getName() { + return name; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ControllerEnergyForge.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/EnergyForge.java old mode 100755 new mode 100644 similarity index 69% rename from src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ControllerEnergyForge.java rename to src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/EnergyForge.java index 03e198c59..915408261 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ControllerEnergyForge.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/EnergyForge.java @@ -1,11 +1,10 @@ package com.raoulvdberge.refinedstorage.integration.forgeenergy; -import com.raoulvdberge.refinedstorage.RS; import net.minecraftforge.energy.EnergyStorage; -public class ControllerEnergyForge extends EnergyStorage { - public ControllerEnergyForge() { - super(RS.INSTANCE.config.controllerCapacity, Integer.MAX_VALUE, 0); +public class EnergyForge extends EnergyStorage { + public EnergyForge(int capacity) { + super(capacity, capacity, 0); } public int extractEnergyInternal(int maxExtract) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ControllerEnergyTesla.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/EnergyTesla.java old mode 100755 new mode 100644 similarity index 81% rename from src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ControllerEnergyTesla.java rename to src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/EnergyTesla.java index fa311ebb4..4472f5678 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/ControllerEnergyTesla.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/EnergyTesla.java @@ -4,10 +4,10 @@ import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; import net.minecraftforge.energy.IEnergyStorage; -public class ControllerEnergyTesla implements ITeslaHolder, ITeslaConsumer { +public class EnergyTesla implements ITeslaHolder, ITeslaConsumer { private IEnergyStorage energy; - public ControllerEnergyTesla(IEnergyStorage energy) { + public EnergyTesla(IEnergyStorage energy) { this.energy = energy; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 64083bcea..2c26c322c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -246,6 +246,7 @@ public class ProxyClient extends ProxyCommon { }); ModelLoader.setCustomStateMapper(RSBlocks.CONTROLLER, new StateMap.Builder().ignore(BlockController.TYPE).build()); + ModelLoader.setCustomStateMapper(RSBlocks.PORTABLE_GRID, new StateMap.Builder().ignore(BlockPortableGrid.TYPE).build()); ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(RSBlocks.CONTROLLER), stack -> { int energy = stack.getItemDamage() == ControllerType.CREATIVE.getId() ? 7 : TileController.getEnergyScaled(ItemBlockController.getEnergyStored(stack), ItemBlockController.getEnergyCapacity(stack), 7); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index e9dd1bbfd..7169d313a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -36,8 +36,8 @@ import com.raoulvdberge.refinedstorage.block.GridType; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; -import com.raoulvdberge.refinedstorage.integration.forgeenergy.ControllerEnergyForge; -import com.raoulvdberge.refinedstorage.integration.tesla.ControllerEnergyTesla; +import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge; +import com.raoulvdberge.refinedstorage.integration.tesla.EnergyTesla; import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla; import com.raoulvdberge.refinedstorage.network.*; import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNodeProxy; @@ -159,8 +159,8 @@ public class TileController extends TileBase implements ITickable, INetworkMaste private Map readerWriterChannels = new HashMap<>(); - private ControllerEnergyForge energy = new ControllerEnergyForge(); - private ControllerEnergyTesla energyTesla; + private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity); + private EnergyTesla energyTesla; private int lastEnergyDisplay; @@ -180,11 +180,11 @@ public class TileController extends TileBase implements ITickable, INetworkMaste dataManager.addParameter(NODES); if (IntegrationTesla.isLoaded()) { - this.energyTesla = new ControllerEnergyTesla(energy); + this.energyTesla = new EnergyTesla(energy); } } - public ControllerEnergyForge getEnergy() { + public EnergyForge getEnergy() { return energy; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java index ed6fa2cb6..d33b039ee 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java @@ -108,11 +108,6 @@ public class PortableGrid implements IGrid, IPortableGrid { this.player = player; this.stack = stack; - // Only extract when we can - if (isActive()) { - drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); - } - this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); @@ -128,6 +123,8 @@ public class PortableGrid implements IGrid, IPortableGrid { } RSUtils.readItems(disk, 4, stack.getTagCompound()); + + drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); } public ItemStack getStack() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index 9fa322107..2a01cfea8 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -11,11 +11,15 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItemPortable; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageDiskItemPortable; +import com.raoulvdberge.refinedstorage.block.BlockPortableGrid; import com.raoulvdberge.refinedstorage.block.GridType; +import com.raoulvdberge.refinedstorage.block.PortableGridType; import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; +import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFilter; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerTile; +import com.raoulvdberge.refinedstorage.item.ItemBlockPortableGrid; import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid; import com.raoulvdberge.refinedstorage.item.filter.Filter; import com.raoulvdberge.refinedstorage.item.filter.FilterTab; @@ -34,7 +38,6 @@ import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.energy.CapabilityEnergy; -import net.minecraftforge.energy.EnergyStorage; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; @@ -53,8 +56,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { private static final String NBT_ENERGY = "Energy"; - // @todo: make non-extractable - private EnergyStorage energyStorage = new EnergyStorage(3200); + private EnergyForge energyStorage = new EnergyForge(3200); private int sortingType; private int sortingDirection; @@ -62,6 +64,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { private int tabSelected; private int size; + private PortableGridType type; + private List filters = new ArrayList<>(); private List tabs = new ArrayList<>(); private ItemHandlerFilter filter = new ItemHandlerFilter(filters, tabs, new ItemHandlerListenerTile(this)); @@ -105,6 +109,14 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { dataManager.addWatchedParameter(ENERGY_STORED); } + public PortableGridType getPortableType() { + if (type == null && getWorld().getBlockState(pos).getBlock() == RSBlocks.PORTABLE_GRID) { + this.type = (PortableGridType) getWorld().getBlockState(pos).getValue(BlockPortableGrid.TYPE); + } + + return type == null ? PortableGridType.NORMAL : type; + } + public void onPassItemContext(ItemStack stack) { this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); @@ -112,7 +124,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { this.tabSelected = ItemWirelessGrid.getTabSelected(stack); this.size = ItemWirelessGrid.getSize(stack); - energyStorage.receiveEnergy(stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored(), false); + this.energyStorage.setEnergyStored(stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored()); for (int i = 0; i < 4; ++i) { RSUtils.readItems(filter, i, stack.getTagCompound()); @@ -128,7 +140,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { storage.writeToNBT(); } - ItemStack stack = new ItemStack(RSBlocks.PORTABLE_GRID); + ItemStack stack = new ItemStack(RSBlocks.PORTABLE_GRID, 1, getPortableType() == PortableGridType.NORMAL ? ItemBlockPortableGrid.TYPE_NORMAL : ItemBlockPortableGrid.TYPE_CREATIVE); stack.setTagCompound(new NBTTagCompound()); @@ -328,10 +340,9 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { @Override public boolean isActive() { - int stored = !world.isRemote ? energyStorage.getEnergyStored() : ENERGY_STORED.getValue(); + int stored = !getWorld().isRemote ? energyStorage.getEnergyStored() : ENERGY_STORED.getValue(); - // @todo: handle creative - if (RS.INSTANCE.config.portableGridUsesEnergy && stored <= RS.INSTANCE.config.portableGridOpenUsage) { + if (getPortableType() != PortableGridType.CREATIVE && RS.INSTANCE.config.portableGridUsesEnergy && stored <= RS.INSTANCE.config.portableGridOpenUsage) { return false; } @@ -355,9 +366,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { @Override public void drainEnergy(int energy) { - // @todo: handle creative - if (RS.INSTANCE.config.portableGridUsesEnergy) { - energyStorage.extractEnergy(energy, false); + if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE) { + energyStorage.extractEnergyInternal(energy); } } @@ -408,12 +418,12 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { tabSelected = tag.getInteger(NetworkNodeGrid.NBT_TAB_SELECTED); } - if (tag.hasKey(NBT_ENERGY)) { - energyStorage.receiveEnergy(tag.getInteger(NBT_ENERGY), false); - } - RSUtils.readItems(disk, 0, tag); RSUtils.readItems(filter, 1, tag); + + if (tag.hasKey(NBT_ENERGY)) { + energyStorage.setEnergyStored(tag.getInteger(NBT_ENERGY)); + } } @Override @@ -432,6 +442,8 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid { } public void onOpened(EntityPlayer player) { - cache.sendTo(player); + cache.sendUpdateTo(player); + + drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); } }