Skip to content

Commit

Permalink
Started work on the inventory panel mass storage block
Browse files Browse the repository at this point in the history
  • Loading branch information
HenryLoenwind committed Nov 30, 2016
1 parent 8ea39f8 commit b987736
Show file tree
Hide file tree
Showing 6 changed files with 417 additions and 14 deletions.
4 changes: 3 additions & 1 deletion src/main/java/crazypants/enderio/ModObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
import crazypants.enderio.conduit.item.ItemItemConduit;
import crazypants.enderio.conduit.item.filter.ItemBasicItemFilter;
import crazypants.enderio.conduit.item.filter.ItemExistingItemFilter;
import crazypants.enderio.conduit.item.filter.ItemSpeciesItemFilter;
import crazypants.enderio.conduit.item.filter.ItemModItemFilter;
import crazypants.enderio.conduit.item.filter.ItemPowerItemFilter;
import crazypants.enderio.conduit.item.filter.ItemSpeciesItemFilter;
import crazypants.enderio.conduit.liquid.ItemLiquidConduit;
import crazypants.enderio.conduit.me.ItemMEConduit;
import crazypants.enderio.conduit.oc.ItemOCConduit;
Expand All @@ -50,6 +50,7 @@
import crazypants.enderio.machine.generator.stirling.BlockStirlingGenerator;
import crazypants.enderio.machine.generator.zombie.BlockZombieGenerator;
import crazypants.enderio.machine.invpanel.BlockInventoryPanel;
import crazypants.enderio.machine.invpanel.chest.BlockInventoryChest;
import crazypants.enderio.machine.invpanel.remote.ItemRemoteInvAccess;
import crazypants.enderio.machine.invpanel.sensor.BlockInventoryPanelSensor;
import crazypants.enderio.machine.killera.BlockKillerJoe;
Expand Down Expand Up @@ -195,6 +196,7 @@ protected void preInitElem(FMLPreInitializationEvent event) {
blockTransceiver(BlockTransceiver.class),
blockBuffer(BlockBuffer.class),
blockInventoryPanel(BlockInventoryPanel.class),
blockInventoryChest(BlockInventoryChest.class),

blockPoweredSpawner(BlockPoweredSpawner.class),
itemBrokenSpawner(ItemBrokenSpawner.class),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.Nullable;

import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
Expand All @@ -27,6 +29,7 @@ public static enum Type {
private final Map<String, InventorySlot> idents = new HashMap<String, InventorySlot>();
private final EnumMap<EnderInventory.Type, List<InventorySlot>> slots = new EnumMap<EnderInventory.Type, List<InventorySlot>>(EnderInventory.Type.class);
private final View allSlots = new View(EnderInventory.Type.ALL);
private @Nullable TileEntity owner = null;

public EnderInventory() {
for (EnderInventory.Type type : EnderInventory.Type.values()) {
Expand Down Expand Up @@ -55,6 +58,7 @@ public void add(EnderInventory.Type type, String ident, InventorySlot slot) {
slots.get(EnderInventory.Type.INPUT).add(slot);
slots.get(EnderInventory.Type.OUTPUT).add(slot);
}
slot.setOwner(owner);
}

public InventorySlot getSlot(Enum<?> ident) {
Expand All @@ -81,7 +85,9 @@ public NBTTagCompound writeToNBT() {
public void writeToNBT(NBTTagCompound tag) {
for (Entry<String, InventorySlot> entry : idents.entrySet()) {
if (entry.getValue() != null) {
entry.getValue().writeToNBT(tag.getCompoundTag(entry.getKey()));
NBTTagCompound subTag = new NBTTagCompound();
entry.getValue().writeToNBT(subTag);
tag.setTag(entry.getKey(), subTag);
}
}
}
Expand All @@ -99,6 +105,7 @@ public void readFromNBT(NBTTagCompound tag) {
}

public void setOwner(TileEntity owner) {
this.owner = owner;
for (InventorySlot slot : allSlots) {
slot.setOwner(owner);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,28 @@
public abstract class AbstractCapabilityMachineEntity extends AbstractMachineEntity {

@Store
protected final EnderInventory inventory = new EnderInventory();
private final View upgradeSlots = inventory.getView(EnderInventory.Type.UPGRADE);
private final View inputSlots = inventory.getView(EnderInventory.Type.INPUT);
private final View outputSlots = inventory.getView(EnderInventory.Type.OUTPUT);
private final EnderInventory inventory = new EnderInventory();
private final EnderInventory inventoryDelegate;
private final View upgradeSlots, inputSlots, outputSlots;

public AbstractCapabilityMachineEntity(SlotDefinition slotDefinition) {
protected AbstractCapabilityMachineEntity() {
this(null);
}

/**
* If an inventory is given, it will NOT be stored to nbt/client/save. The subclass must handle that itself.
*/
protected AbstractCapabilityMachineEntity(EnderInventory subclassInventory) {
super();
inventory.setOwner(this);
this.inventoryDelegate = subclassInventory != null ? subclassInventory : this.inventory;
upgradeSlots = inventoryDelegate.getView(EnderInventory.Type.UPGRADE);
inputSlots = inventoryDelegate.getView(EnderInventory.Type.INPUT);
outputSlots = inventoryDelegate.getView(EnderInventory.Type.OUTPUT);
inventoryDelegate.setOwner(this);
}

public EnderInventory getEnderInventory() {
return inventory;
public EnderInventory getInventory() {
return inventoryDelegate;
}

public boolean isValidUpgrade(@Nonnull ItemStack itemstack) {
Expand Down Expand Up @@ -108,16 +118,16 @@ public boolean hasCapability(Capability<?> capability, EnumFacing facingIn) {
public <T> T getCapability(Capability<T> capability, EnumFacing facingIn) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
if (facingIn == null) {
return (T) inventory.getView(EnderInventory.Type.INTERNAL);
return (T) getInventory().getView(EnderInventory.Type.INTERNAL);
}
switch (getIoMode(facingIn)) {
case NONE:
case PUSH_PULL:
return (T) inventory.getView(EnderInventory.Type.INOUT);
return (T) getInventory().getView(EnderInventory.Type.INOUT);
case PULL:
return (T) inventory.getView(EnderInventory.Type.INPUT);
return (T) getInventory().getView(EnderInventory.Type.INPUT);
case PUSH:
return (T) inventory.getView(EnderInventory.Type.OUTPUT);
return (T) getInventory().getView(EnderInventory.Type.OUTPUT);
case DISABLED:
default:
return null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
package crazypants.enderio.machine.invpanel.chest;

import java.util.List;

import javax.annotation.Nonnull;

import com.enderio.core.api.client.gui.IResourceTooltipProvider;

import crazypants.enderio.GuiID;
import crazypants.enderio.ModObject;
import crazypants.enderio.machine.AbstractMachineBlock;
import crazypants.enderio.paint.IPaintable;
import crazypants.enderio.render.IBlockStateWrapper;
import crazypants.enderio.render.IRenderMapper;
import crazypants.enderio.render.IRenderMapper.IItemRenderMapper;
import crazypants.enderio.render.ISmartRenderAwareBlock;
import crazypants.enderio.render.property.EnumRenderMode;
import crazypants.enderio.teleport.telepad.render.TelePadRenderMapper;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class BlockInventoryChest extends AbstractMachineBlock<TileInventoryChest>
implements IResourceTooltipProvider, ISmartRenderAwareBlock, IPaintable.IBlockPaintableBlock, IPaintable.IWrenchHideablePaint {

public static BlockInventoryChest create() {
TileInventoryChest.create();
BlockInventoryChest res = new BlockInventoryChest();
res.init();
return res;
}

protected BlockInventoryChest() {
super(ModObject.blockInventoryChest, TileInventoryChest.class);
initDefaultState();
}

protected void initDefaultState() {
setDefaultState(
this.blockState.getBaseState().withProperty(EnumRenderMode.RENDER, EnumRenderMode.AUTO).withProperty(EnumChestSize.SIZE, EnumChestSize.TINY));
}

@Override
protected @Nonnull BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] { EnumRenderMode.RENDER, EnumChestSize.SIZE });
}

@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(EnumChestSize.SIZE, EnumChestSize.getTypeFromMeta(meta));
}

@Override
public int getMetaFromState(IBlockState state) {
return EnumChestSize.getMetaFromType(state.getValue(EnumChestSize.SIZE));
}

@Override
public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
return state.withProperty(EnumRenderMode.RENDER, EnumRenderMode.AUTO);
}

@Override
protected void setBlockStateWrapperCache(@Nonnull IBlockStateWrapper blockStateWrapper, @Nonnull IBlockAccess world, @Nonnull BlockPos pos,
@Nonnull TileInventoryChest tileEntity) {
blockStateWrapper.addCacheKey(0);
}

@Override
@SideOnly(Side.CLIENT)
public IItemRenderMapper getItemRenderMapper() {
return TelePadRenderMapper.instance;
}

@SideOnly(Side.CLIENT)
public IRenderMapper.IBlockRenderMapper getBlockRenderMapper() {
return TelePadRenderMapper.instance;
}

// NO GUI

@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}

@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}

@Override
protected GuiID getGuiId() {
return null;
}

@Override
protected boolean openGui(World world, BlockPos pos, EntityPlayer entityPlayer, EnumFacing side) {
return false;
}

@Override
public boolean hasComparatorInputOverride(IBlockState state) {
return true;
}

@Override
public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) {
TileInventoryChest te = getTileEntitySafe(worldIn, pos);
if (te != null) {
return te.getComparatorInputOverride();
}
return 0;
}

@Override
public @Nonnull TileEntity createTileEntity(World world, IBlockState state) {
TileInventoryChest te = TileInventoryChest.create(state.getValue(EnumChestSize.SIZE));
te.init();
return te;
}

@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}

@Override
protected ItemBlock createItemBlock() {
ItemBlock ib = new ItemBlock(this) {
@Override
public String getUnlocalizedName(ItemStack stack) {
return EnumChestSize.getTypeFromMeta(stack.getMetadata()).getUnlocalizedName(this);
}

@Override
public int getMetadata(int damage) {
return damage;
}
};
ib.setRegistryName(getName());
ib.setHasSubtypes(true);
return ib;
}


@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) {
for (EnumChestSize size : EnumChestSize.values()) {
list.add(new ItemStack(itemIn, 1, EnumChestSize.getMetaFromType(size)));
}
}

@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package crazypants.enderio.machine.invpanel.chest;

import java.util.Locale;

import javax.annotation.Nonnull;

import crazypants.util.NullHelper;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.item.Item;
import net.minecraft.util.IStringSerializable;

public enum EnumChestSize implements IStringSerializable {
TINY(9),
SMALL(12),
MEDIUM(15),
BIG(18),
LARGE(21),
HUGE(24),
ENORMOUS(27),
WAREHOUSE(30),
WAREHOUSE13(60),

// Be honest, you expected a bra size joke here, didn't you?

;

private final int slots;

private EnumChestSize(int rows) {
this.slots = rows * 9;
}

public int getSlots() {
return slots;
}

@SuppressWarnings("null")
public static final @Nonnull PropertyEnum<EnumChestSize> SIZE = PropertyEnum.<EnumChestSize> create("size", EnumChestSize.class);

@Override
public @Nonnull String getName() {
return NullHelper.notnullJ(name().toLowerCase(Locale.ENGLISH), "String.toLowerCase()");
}

public String getUnlocalizedName(Item me) {
return me.getUnlocalizedName() + "_" + getName();
}

public static EnumChestSize getTypeFromMeta(int meta) {
return values()[meta >= 0 && meta < values().length ? meta : 0];
}

public static int getMetaFromType(EnumChestSize value) {
return value.ordinal();
}


}
Loading

0 comments on commit b987736

Please sign in to comment.