diff --git a/src/main/java/practicalities/BucketHandler.java b/src/main/java/practicalities/BucketHandler.java new file mode 100644 index 0000000..850fa8d --- /dev/null +++ b/src/main/java/practicalities/BucketHandler.java @@ -0,0 +1,55 @@ +package practicalities; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.FillBucketEvent; +import practicalities.blocks.ModBlocks; +import practicalities.items.ModItems; +import cpw.mods.fml.common.eventhandler.Event.Result; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; + +public class BucketHandler { + + public static BucketHandler INSTANCE = new BucketHandler(); + public Map buckets = new HashMap(); + + public static void init() { + BucketHandler.INSTANCE.buckets.put(ModBlocks.blockPreChewedFood, ModItems.bucketPreChewedFood); + MinecraftForge.EVENT_BUS.register(BucketHandler.INSTANCE); + } + + private BucketHandler() { + } + + @SubscribeEvent + public void onBucketFill(FillBucketEvent event) { + + ItemStack result = fillCustomBucket(event.world, event.target); + + if (result == null) + return; + + event.result = result; + event.setResult(Result.ALLOW); + } + + private ItemStack fillCustomBucket(World world, MovingObjectPosition pos) { + + Block block = world.getBlock(pos.blockX, pos.blockY, pos.blockZ); + + Item bucket = buckets.get(block); + if (bucket != null && world.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ) == 0) { + world.setBlockToAir(pos.blockX, pos.blockY, pos.blockZ); + return new ItemStack(bucket); + } else + return null; + + } +} diff --git a/src/main/java/practicalities/ConfigMan.java b/src/main/java/practicalities/ConfigMan.java index 70ed769..4b23913 100755 --- a/src/main/java/practicalities/ConfigMan.java +++ b/src/main/java/practicalities/ConfigMan.java @@ -1,5 +1,6 @@ package practicalities; +import net.minecraft.launchwrapper.Launch; import net.minecraftforge.common.config.Configuration; public class ConfigMan @@ -9,8 +10,10 @@ public class ConfigMan * Sure, they will take up an ID for no reason * but I feel that is an ok trade off for not having * to worry about it when making recipes - */ - + */ + + public static boolean isDev = (Boolean)Launch.blackboard.get("fml.deobfuscatedEnvironment"); + private static Configuration config; //blocks @@ -27,6 +30,8 @@ public class ConfigMan public static boolean enableImbuedItems; public static boolean enableNetherBlade; + public static boolean enablePreChewedFood; + public static void init(Configuration configuration) { config = configuration; @@ -51,5 +56,8 @@ public static void hydrateConifg() enableImbuedItems = config.getBoolean("enableImbuedItems", "general", true, ""); enableNetherBlade = config.getBoolean("enableNetherBlade", "general", true, ""); + enablePreChewedFood = config.getBoolean("enablePreChewedFood", "general", true, ""); + + } } diff --git a/src/main/java/practicalities/Getter.java b/src/main/java/practicalities/Getter.java new file mode 100644 index 0000000..1e1e43c --- /dev/null +++ b/src/main/java/practicalities/Getter.java @@ -0,0 +1,11 @@ +package practicalities; + +public abstract class Getter { + public Operand op; + + public Getter(Operand op) { + this.op = op; + } + + public abstract DataType get(); +} diff --git a/src/main/java/practicalities/PracticalitiesMod.java b/src/main/java/practicalities/PracticalitiesMod.java index e1646c8..3156035 100755 --- a/src/main/java/practicalities/PracticalitiesMod.java +++ b/src/main/java/practicalities/PracticalitiesMod.java @@ -4,9 +4,10 @@ import net.minecraft.item.Item; import net.minecraftforge.common.config.Configuration; import practicalities.gui.GuiHandler; -import practicalities.items.ModItems; -import practicalities.machine.playerinterface.TilePlayerInterface; -import practicalities.machine.inventoryfilter.TileInventoryFilter; +import practicalities.items.ModItems; +import practicalities.machine.inventoryfilter.TileInventoryFilter; +import practicalities.machine.masher.TileMasher; +import practicalities.machine.playerinterface.TilePlayerInterface; import practicalities.machine.shippingcrate.TileShippingCrate; import practicalities.machine.vampiricgenerator.TileVampiricGenerator; import practicalities.network.Proxy; @@ -46,6 +47,7 @@ public void preInit(FMLPreInitializationEvent event) { @EventHandler public void init(FMLInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(instance, guiHandler); + BucketHandler.init(); } @EventHandler @@ -63,6 +65,7 @@ private void initMachines() { TilePlayerInterface.initialize(); TileVampiricGenerator.initialize(); TileInventoryFilter.initialize(); + TileMasher.initialize(); initializedMachines = true; } } diff --git a/src/main/java/practicalities/blocks/ModBlocks.java b/src/main/java/practicalities/blocks/ModBlocks.java index 178b5a9..6e793d2 100755 --- a/src/main/java/practicalities/blocks/ModBlocks.java +++ b/src/main/java/practicalities/blocks/ModBlocks.java @@ -2,9 +2,13 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import practicalities.ConfigMan; -import practicalities.machine.playerinterface.BlockPlayerInterface; -import practicalities.machine.inventoryfilter.BlockInventoryFilter; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import practicalities.ConfigMan; +import practicalities.fluid.prechewedfood.BlockPreChewedFood; +import practicalities.machine.inventoryfilter.BlockInventoryFilter; +import practicalities.machine.masher.BlockMasher; +import practicalities.machine.playerinterface.BlockPlayerInterface; import practicalities.machine.polaritynegator.BlockPolarityNegator; import practicalities.machine.shippingcrate.BlockShippingCrate; import practicalities.machine.vampiricgenerator.BlockVampiricGenerator; @@ -13,16 +17,28 @@ public class ModBlocks { public static Block shippingCrate; public static Block stoneWall; public static Block vampiricGenerator; - public static Block polarityNegator; + public static Block polarityNegator; + public static Block inventoryFilter; + public static Block masher; + public static Block blockPreChewedFood; + public static Fluid preChewedFood; public static Block playerInterface; - public static Block inventoryFilter; public static void init() { + preChewedFood = new Fluid("preChewedFood"); + preChewedFood.setDensity(2000).setTemperature(310).setViscosity(15000); + FluidRegistry.registerFluid(preChewedFood); + stoneWall = new BlockDecor(Material.rock, "stonewall", 1, Block.soundTypeStone); if(ConfigMan.enablePlayerInterface) playerInterface = new BlockPlayerInterface(); + if(ConfigMan.enablePreChewedFood) { + blockPreChewedFood = new BlockPreChewedFood(preChewedFood); + masher = new BlockMasher(); + } + if(ConfigMan.enableInventoryFilter) inventoryFilter = new BlockInventoryFilter(); @@ -35,4 +51,8 @@ public static void init() { if(ConfigMan.enableMagnet) polarityNegator = new BlockPolarityNegator(); } + + public static void postInit() { + + } } diff --git a/src/main/java/practicalities/fluid/prechewedfood/BlockPreChewedFood.java b/src/main/java/practicalities/fluid/prechewedfood/BlockPreChewedFood.java new file mode 100644 index 0000000..93bd96b --- /dev/null +++ b/src/main/java/practicalities/fluid/prechewedfood/BlockPreChewedFood.java @@ -0,0 +1,58 @@ +package practicalities.fluid.prechewedfood; + +import practicalities.PracticalitiesMod; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockPreChewedFood extends BlockFluidClassic { + + @SideOnly(Side.CLIENT) + protected IIcon stillIcon; + @SideOnly(Side.CLIENT) + protected IIcon flowingIcon; + protected Fluid fluid; + + public BlockPreChewedFood(Fluid fluid) { + super(fluid, Material.water); + this.fluid = fluid; + setCreativeTab(CreativeTabs.tabMisc); + setBlockName("preChewedFood"); + GameRegistry.registerBlock(this, fluid.getUnlocalizedName()); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side == 0 || side == 1)? stillIcon : flowingIcon; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister register) { + stillIcon = register.registerIcon(PracticalitiesMod.TEXTURE_BASE + "preChewedFood/still"); + flowingIcon = register.registerIcon(PracticalitiesMod.TEXTURE_BASE + "preChewedFood/flow"); + fluid.setStillIcon(stillIcon); + fluid.setFlowingIcon(flowingIcon); + } + +// @Override +// public boolean canDisplace(IBlockAccess world, int x, int y, int z) { +//// if (world.getBlock(x, y, z).getMaterial().isLiquid()) return false; +// return super.canDisplace(world, x, y, z); +// } +// +// @Override +// public boolean displaceIfPossible(World world, int x, int y, int z) { +//// if (world.getBlock(x, y, z).getMaterial().isLiquid()) return false; +// return super.displaceIfPossible(world, x, y, z); +// } + +} diff --git a/src/main/java/practicalities/gui/ContainerBase.java b/src/main/java/practicalities/gui/ContainerBase.java index 3554e7c..f44c07f 100755 --- a/src/main/java/practicalities/gui/ContainerBase.java +++ b/src/main/java/practicalities/gui/ContainerBase.java @@ -5,7 +5,6 @@ import cofh.lib.util.helpers.MathHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -16,6 +15,10 @@ //todo: remove this once CoFHLib ships with it. public abstract class ContainerBase extends Container { + @SuppressWarnings("unused") + protected SlotRegion mainInv, hotbar; + private SlotRegion[] regions; + public ContainerBase() { } @@ -28,7 +31,9 @@ protected int getPlayerInventoryHorizontalOffset() { } protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { - + + int firstIndex = this.inventorySlots.size(); + int yOff = getPlayerInventoryVerticalOffset(); int xOff = getPlayerInventoryHorizontalOffset(); for (int i = 0; i < 3; i++) { @@ -40,10 +45,17 @@ protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { for (int i = 0; i < 9; i++) { addSlotToContainer(new Slot(inventoryPlayer, i, xOff + i * 18, yOff + 58)); } + + mainInv = new SlotRegion("mainInventory", firstIndex + 0, firstIndex + 26); + hotbar = new SlotRegion("hotbar", firstIndex + 27, firstIndex + 35); } protected abstract int getSizeInventory(); + protected void setShiftClickRegions(SlotRegion... regions) { + this.regions = regions; + } + protected boolean supportsShiftClick(EntityPlayer player, int slotIndex) { return supportsShiftClick(slotIndex); @@ -69,7 +81,7 @@ protected boolean performMerge(int slotIndex, ItemStack stack) { } return mergeItemStack(stack, 0, invBase, true); } - + @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { @@ -77,29 +89,7 @@ public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { return null; } - ItemStack stack = null; - Slot slot = (Slot) inventorySlots.get(slotIndex); - - if (slot != null && slot.getHasStack()) { - ItemStack stackInSlot = slot.getStack(); - stack = stackInSlot.copy(); - - if (!performMerge(player, slotIndex, stackInSlot)) { - return null; - } - - if (stackInSlot.stackSize <= 0) { - slot.putStack((ItemStack) null); - } else { - slot.putStack(stackInSlot); - } - - if (stackInSlot.stackSize == stack.stackSize) { - return null; - } - slot.onPickupFromSlot(player, stackInSlot); - } - return stack; + return SlotRegion.shiftClick(this, slotIndex, player, regions); } @SuppressWarnings("unchecked") diff --git a/src/main/java/practicalities/gui/ElementEnergyBar.java b/src/main/java/practicalities/gui/ElementEnergyBar.java new file mode 100644 index 0000000..2dd3cee --- /dev/null +++ b/src/main/java/practicalities/gui/ElementEnergyBar.java @@ -0,0 +1,59 @@ +package practicalities.gui; + +import practicalities.PracticalitiesMod; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.ResourceLocation; +import cofh.api.energy.IEnergyStorage; +import cofh.lib.gui.GuiBase; +import cofh.lib.gui.element.ElementEnergyStored; +import cofh.lib.render.RenderHelper; +import cofh.lib.util.helpers.MathHelper; + +public class ElementEnergyBar extends ElementEnergyStored { + + public ElementEnergyBar(GuiBase gui, int x, int y, IEnergyStorage storage, int width, int height) { + super(gui, x, y, storage); + this.sizeX = width; + this.sizeY = height; + this.texW = 128; + this.texH = 32; + texture = new ResourceLocation(PracticalitiesMod.TEXTURE_BASE + "textures/gui/element/energy.png"); + } + + + int getPixelsFull() + { + if (this.storage.getMaxEnergyStored() <= 0) { + return 0; + } + double percentage = this.storage.getEnergyStored() / (double)this.storage.getMaxEnergyStored(); + int pixels = (int)( this.sizeY * percentage ); + + return (this.alwaysShowMinimum) && (this.storage.getEnergyStored() > 0) ? Math.max(1, MathHelper.round(pixels)) : MathHelper.round(pixels); + } + + public void drawRect(int x, int y, int w, int h, double u, double v, double texW, double texH) { + Tessellator localTessellator = Tessellator.instance; + localTessellator.startDrawingQuads(); + localTessellator.addVertexWithUV(x+0, y+h, 10, u, v+texH); + localTessellator.addVertexWithUV(x+w, y+h, 10, u+texW, v+texH); + localTessellator.addVertexWithUV(x+w, y+0, 10, u+texW, v ); + localTessellator.addVertexWithUV(x+0, y+0, 10, u, v ); + localTessellator.draw(); + } + + public void drawBackground(int paramInt1, int paramInt2, float paramFloat) { + int i = getScaled(); + + RenderHelper.bindTexture(this.texture); + + int bottom = this.posY + this.sizeY; + + drawRect(this.posX, this.posY, this.sizeX, this.sizeY, + 0, 0, 0.5, 1); + + drawRect(this.posX, bottom -i, this.sizeX, i, + 0.5, 0, 0.5, 1); + } + +} diff --git a/src/main/java/practicalities/gui/ElementProgress.java b/src/main/java/practicalities/gui/ElementProgress.java new file mode 100644 index 0000000..65bf8ea --- /dev/null +++ b/src/main/java/practicalities/gui/ElementProgress.java @@ -0,0 +1,48 @@ +package practicalities.gui; + +import practicalities.Getter; +import cofh.lib.gui.GuiBase; +import cofh.lib.gui.element.ElementBase; + +public class ElementProgress extends ElementBase { + + public Getter getter; + + public int zeroX, zeroY, zeroU, zeroV, zeroWidth, zeroHeight; + public int fullX, fullY, fullU, fullV, fullWidth, fullHeight; + + public ElementProgress(GuiBase gui, + int zeroX, int zeroY, int zeroU, int zeroV, int zeroWidth, int zeroHeight, + int fullX, int fullY, int fullU, int fullV, int fullWidth, int fullHeight, + Getter getter) { + + super(gui, zeroX, zeroY); + + this.zeroX = zeroX; this.zeroY = zeroY; this.zeroU = zeroU; this.zeroV = zeroV; this.zeroWidth = zeroWidth; this.zeroHeight = zeroHeight; + this.fullX = fullX; this.fullY = fullY; this.fullU = fullU; this.fullV = fullV; this.fullWidth = fullWidth; this.fullHeight = fullHeight; + + this.getter = getter; + } + + @Override + public void drawBackground(int paramInt1, int paramInt2, float paramFloat) { + double p = getter.get(); + int x = animateBetween(zeroX, fullX, p); + int y = animateBetween(zeroY, fullY, p); + int u = animateBetween(zeroU, fullU, p); + int v = animateBetween(zeroV, fullV, p); + int w = animateBetween(zeroWidth, fullWidth, p); + int h = animateBetween(zeroHeight, fullHeight, p); + + gui.drawTexturedModalRect(x, y, u, v, w, h); + + } + + @Override + public void drawForeground(int paramInt1, int paramInt2) {} + + public int animateBetween(int zero, int one, double progress) { + return (int) ( zero + (( one-zero )*progress) ); + } + +} diff --git a/src/main/java/practicalities/gui/InventorySingleStack.java b/src/main/java/practicalities/gui/InventorySingleStack.java new file mode 100644 index 0000000..6b14abb --- /dev/null +++ b/src/main/java/practicalities/gui/InventorySingleStack.java @@ -0,0 +1,35 @@ +package practicalities.gui; + +import net.minecraft.item.ItemStack; +import codechicken.lib.inventory.InventorySimple; + +public abstract class InventorySingleStack extends InventorySimple { + + protected String name; + public T data; + + public InventorySingleStack(String name, T data) { + super(1); + this.name = name; + this.data = data; + } + + public ItemStack get() { + return this.items[0]; + } + + public void set(ItemStack stack) { + this.items[0] = stack; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack != null && stack.getItem() != null && validate(stack); + } + + public abstract boolean validate(ItemStack stack); + public String getInventoryName() { + return name; + } + +} diff --git a/src/main/java/practicalities/gui/SlotRegion.java b/src/main/java/practicalities/gui/SlotRegion.java index b900474..f8abe4a 100644 --- a/src/main/java/practicalities/gui/SlotRegion.java +++ b/src/main/java/practicalities/gui/SlotRegion.java @@ -21,7 +21,7 @@ public class SlotRegion { * @param name * @param slots */ - public SlotRegion(String name, int[] slots) { + public SlotRegion(String name, int... slots) { this.name = name; this.slots = slots; } diff --git a/src/main/java/practicalities/items/ItemBucketPCF.java b/src/main/java/practicalities/items/ItemBucketPCF.java new file mode 100644 index 0000000..4317cd1 --- /dev/null +++ b/src/main/java/practicalities/items/ItemBucketPCF.java @@ -0,0 +1,18 @@ +package practicalities.items; + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.Block; +import net.minecraft.item.ItemBucket; + +public class ItemBucketPCF extends ItemBucket { + + public ItemBucketPCF(Block block) { + super(block); + setUnlocalizedName("bucket_preChewedFood"); + setTextureName("bucket_preChewedFood"); + GameRegistry.registerItem(this, block.getUnlocalizedName()); + } + + + +} diff --git a/src/main/java/practicalities/items/ModItems.java b/src/main/java/practicalities/items/ModItems.java index b9deffb..5fbfe93 100755 --- a/src/main/java/practicalities/items/ModItems.java +++ b/src/main/java/practicalities/items/ModItems.java @@ -1,11 +1,24 @@ package practicalities.items; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; +import net.minecraftforge.fluids.FluidStack; import practicalities.ConfigMan; +import practicalities.PracticalitiesMod; +import practicalities.blocks.ModBlocks; import practicalities.items.filtercard.ItemFilterCard; import practicalities.items.netherbane.ItemNetherbane; -import net.minecraftforge.common.util.EnumHelper; +import cpw.mods.fml.common.registry.GameRegistry; public class ModItems { public static final ToolMaterial imbuedToolMaterial = @@ -21,6 +34,8 @@ public class ModItems { // tools public static Item voidBucket; + public static Item bucketPreChewedFood; + public static Item matterTransporter; public static Item magnet; public static Item sitisStick; @@ -71,4 +86,22 @@ public static void init(){ // other filterCard = new ItemFilterCard(); } + + public static void postInit() { + if(ConfigMan.enablePreChewedFood) { + bucketPreChewedFood = new ItemBucket(ModBlocks.blockPreChewedFood) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(ItemStack p_77624_1_, + EntityPlayer p_77624_2_, List list, + boolean p_77624_4_) { + super.addInformation(p_77624_1_, p_77624_2_, list, p_77624_4_); + list.add(StatCollector.translateToLocal("tooltip.bucketPreChewedFood.flair")); + } + }; + bucketPreChewedFood.setUnlocalizedName("bucketPreChewedFood").setContainerItem(Items.bucket).setTextureName(PracticalitiesMod.TEXTURE_BASE + "bucket_preChewedFood"); + GameRegistry.registerItem(bucketPreChewedFood, "bucket_preChewedFood"); + FluidContainerRegistry.registerFluidContainer(new FluidContainerData(new FluidStack(ModBlocks.preChewedFood, 1000), new ItemStack(bucketPreChewedFood), new ItemStack(Items.bucket))); + } + } } diff --git a/src/main/java/practicalities/machine/inventoryfilter/ContainerInventoryFilter.java b/src/main/java/practicalities/machine/inventoryfilter/ContainerInventoryFilter.java index 3fb1ee4..88623e2 100755 --- a/src/main/java/practicalities/machine/inventoryfilter/ContainerInventoryFilter.java +++ b/src/main/java/practicalities/machine/inventoryfilter/ContainerInventoryFilter.java @@ -2,8 +2,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; import practicalities.gui.ContainerBase; import practicalities.gui.IContainerButtons; import practicalities.gui.IContainerField; @@ -12,22 +12,23 @@ public class ContainerInventoryFilter extends ContainerBase implements IContainerField, IContainerButtons { - private TileInventoryFilter tile; - private SlotRegion mainInv, hotbar, card; + private TileInventoryFilter tile; + private IInventory inv; + private SlotRegion card; public ContainerInventoryFilter(InventoryPlayer player, TileInventoryFilter tile) { this.tile = tile; bindPlayerInventory(player); - Slot cardSlot; - addSlotToContainer(cardSlot = new SlotAcceptValid(tile.getFilterInventory(), 0, 102, 10)); + Slot cardSlot; + addSlotToContainer(cardSlot = new SlotAcceptValid(inv = tile.filterCard, 0, 102, 10)); - mainInv = new SlotRegion("mainInventory", 0, 26); - hotbar = new SlotRegion("hotbar", 27, 35); card = new SlotRegion("filterCard", new int[] { cardSlot.slotNumber }); hotbar.addShiftTargets(card, mainInv); mainInv.addShiftTargets(card, hotbar); card.addShiftTargets(hotbar, mainInv); + + setShiftClickRegions(card, mainInv, hotbar); } @Override @@ -68,13 +69,13 @@ public void buttonClick(int button, int action) { tile.markFilthy(); } - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { - if (!supportsShiftClick(player, slotIndex)) { - return null; - } - - return SlotRegion.shiftClick(this, slotIndex, player, card, mainInv, hotbar); - } +// @Override +// public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { +// if (!supportsShiftClick(player, slotIndex)) { +// return null; +// } +// +// return SlotRegion.shiftClick(this, slotIndex, player, card, mainInv, hotbar); +// } } diff --git a/src/main/java/practicalities/machine/inventoryfilter/TileInventoryFilter.java b/src/main/java/practicalities/machine/inventoryfilter/TileInventoryFilter.java index d544724..074a9e8 100644 --- a/src/main/java/practicalities/machine/inventoryfilter/TileInventoryFilter.java +++ b/src/main/java/practicalities/machine/inventoryfilter/TileInventoryFilter.java @@ -4,6 +4,7 @@ import java.util.List; import practicalities.IItemFilter; +import practicalities.gui.InventorySingleStack; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; @@ -26,7 +27,19 @@ public class TileInventoryFilter extends TileCoFHBase implements ISidedInventory public int slotStart = 0; public int slotEnd = 65536; public boolean invert = false; - public ItemStack filterCard = null; + public InventorySingleStack filterCard = new InventorySingleStack("inventory.inventoryFilter.slotFilter", this) { + + @Override + public boolean validate(ItemStack stack) { + return stack.getItem() instanceof IItemFilter; + }; + + public void markDirty() { + super.markDirty(); + data.markFilthy(); + }; + + }; /** * Call both markDirty() and worldObj.markBlockForUpdate @@ -57,79 +70,11 @@ public int getType() { return 0; } - public IInventory getFilterInventory() { - final TileInventoryFilter tile = this; - return new IInventory() { - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - tile.filterCard = stack; - } - - @Override - public void openInventory() {} - - @Override - public void markDirty() { - tile.markFilthy(); - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack stack) { - return stack != null && stack.getItem() != null && stack.getItem() instanceof IItemFilter; - } - - @Override - public boolean hasCustomInventoryName() { return false; } - - @Override - public ItemStack getStackInSlotOnClosing(int p_70304_1_) { - return null; - } - - @Override - public ItemStack getStackInSlot(int p_70301_1_) { - return tile.filterCard; - } - - @Override - public int getSizeInventory() { - return 1; - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public String getInventoryName() { - return "inventory.inventoryFilter.slotFilter"; - } - - @Override - public ItemStack decrStackSize(int slot, int amt) { - ItemStack ret = tile.filterCard.copy(); - tile.filterCard.stackSize -= amt; - ret.stackSize = amt; - return ret; - } - - @Override - public void closeInventory() {} - }; - } - @SuppressWarnings("unchecked") public IItemFilter getFilter() { IItemFilter f = null; - if(filterCard != null && filterCard.getItem() instanceof IItemFilter) { - f = (IItemFilter)filterCard.getItem(); + if(filterCard.get() != null && filterCard.get().getItem() instanceof IItemFilter) { + f = (IItemFilter)filterCard.get().getItem(); } return f; } @@ -146,9 +91,9 @@ public void writeToNBT(NBTTagCompound tag) { tag.setInteger("end", slotEnd); tag.setBoolean("invert", invert); - if(filterCard != null) { + if(filterCard.get() != null) { NBTTagCompound stackTag = new NBTTagCompound(); - filterCard.writeToNBT(stackTag); + filterCard.get().writeToNBT(stackTag); tag.setTag("filter", stackTag); } else { tag.removeTag("filter"); @@ -163,7 +108,9 @@ public void readFromNBT(NBTTagCompound tag) { slotEnd = tag.getInteger("end"); invert = tag.getBoolean("invert"); if(tag.hasKey("filter")) { - filterCard = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("filter")); + filterCard.set( ItemStack.loadItemStackFromNBT(tag.getCompoundTag("filter")) ); + } else { + filterCard.set(null); } } @@ -335,7 +282,7 @@ public int[] getAccessibleSlotsFromSide(int p_94128_1_) { public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { if(!isFacingInventory()) return false; IItemFilter f = getFilter(); - if(f != null && f.filter(filterCard, p_102007_2_) == invert) return false; + if(f != null && f.filter(filterCard.get(), p_102007_2_) == invert) return false; if(getInventoryFacing() instanceof ISidedInventory) ((ISidedInventory)getInventoryFacing()).canInsertItem(p_102007_1_, p_102007_2_, facing.getOpposite().ordinal()); return true; @@ -345,7 +292,7 @@ public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_10200 public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { if(!isFacingInventory()) return false; IItemFilter f = getFilter(); - if(f != null && f.filter(filterCard, p_102008_2_) == invert) return false; + if(f != null && f.filter(filterCard.get(), p_102008_2_) == invert) return false; if(getInventoryFacing() instanceof ISidedInventory) ((ISidedInventory)getInventoryFacing()).canExtractItem(p_102008_1_, p_102008_2_, facing.getOpposite().ordinal()); return true; diff --git a/src/main/java/practicalities/machine/masher/BlockMasher.java b/src/main/java/practicalities/machine/masher/BlockMasher.java new file mode 100644 index 0000000..a537e1e --- /dev/null +++ b/src/main/java/practicalities/machine/masher/BlockMasher.java @@ -0,0 +1,39 @@ +package practicalities.machine.masher; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import practicalities.PracticalitiesMod; +import practicalities.blocks.BlockBase; +import practicalities.gui.GuiHandler; + +public class BlockMasher extends BlockBase { + + public BlockMasher() { + super(Material.rock, "masher", 1, null); + // TODO Auto-generated constructor stub + } + + @Override + public boolean hasTileEntity() { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileMasher(); + } + + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p6, float p7, float p8, + float p9) { + + player.openGui(PracticalitiesMod.instance, GuiHandler.TILE_ID, world, x, y, z); + + return true; + + } + +} diff --git a/src/main/java/practicalities/machine/masher/ContainerMasher.java b/src/main/java/practicalities/machine/masher/ContainerMasher.java new file mode 100644 index 0000000..9014a73 --- /dev/null +++ b/src/main/java/practicalities/machine/masher/ContainerMasher.java @@ -0,0 +1,45 @@ +package practicalities.machine.masher; + +import cofh.lib.gui.slot.SlotAcceptValid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import practicalities.gui.ContainerBase; +import practicalities.gui.SlotRegion; + +public class ContainerMasher extends ContainerBase { + + private SlotRegion food; + + public ContainerMasher(InventoryPlayer player, TileMasher tile) { + bindPlayerInventory(player); + + Slot s = new SlotAcceptValid(tile.food, 0, 80, 28); + addSlotToContainer(s); + int index = s.slotNumber; + + food = new SlotRegion("foodSlot", new int[] { index }); + + mainInv.addShiftTargets(food, hotbar); + hotbar.addShiftTargets(food, mainInv); + food.addShiftTargets(hotbar, mainInv); + + setShiftClickRegions(food, mainInv, hotbar); + } + + @Override + protected int getPlayerInventoryVerticalOffset() { + return 84; + } + + @Override + protected int getSizeInventory() { + return 1; + } + + @Override + public boolean canInteractWith(EntityPlayer p_75145_1_) { + return true; + } + +} diff --git a/src/main/java/practicalities/machine/masher/GuiMasher.java b/src/main/java/practicalities/machine/masher/GuiMasher.java new file mode 100644 index 0000000..1cf385f --- /dev/null +++ b/src/main/java/practicalities/machine/masher/GuiMasher.java @@ -0,0 +1,49 @@ +package practicalities.machine.masher; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import practicalities.Getter; +import practicalities.PracticalitiesMod; +import practicalities.gui.ElementEnergyBar; +import practicalities.gui.ElementProgress; +import cofh.lib.gui.GuiBase; +import cofh.lib.gui.element.ElementFluidTank; + +public class GuiMasher extends GuiBase { + + TileMasher tile; + + public GuiMasher(InventoryPlayer inventory, TileMasher tile) { + super(new ContainerMasher(inventory, tile)); + this.tile = tile; + texture = new ResourceLocation(PracticalitiesMod.TEXTURE_BASE + "textures/gui/masher.png"); + + } + + @Override + public void initGui() { + super.initGui(); + + Getter getter = new Getter(tile) { + public Double get() { + return tile.getProgress(); + } + }; + + addElement(new ElementProgress(this, + 84, 46, 0, 166, 11, 11, // 79, 27, 18, 17, // + 84, 57, 0, 177, 11, 0, // 79, 44, 18, 0, + getter + )); + + + + + ElementEnergyBar energy = new ElementEnergyBar(this, 7, 7, tile.energy, 16, 60); + addElement(energy); + + ElementFluidTank tank = new ElementFluidTank(this, 153, 7, tile.tank); + addElement(tank); + } + +} diff --git a/src/main/java/practicalities/machine/masher/TileMasher.java b/src/main/java/practicalities/machine/masher/TileMasher.java new file mode 100644 index 0000000..333df18 --- /dev/null +++ b/src/main/java/practicalities/machine/masher/TileMasher.java @@ -0,0 +1,293 @@ +package practicalities.machine.masher; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; +import practicalities.blocks.ModBlocks; +import practicalities.gui.InventorySingleStack; +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; +import cofh.core.block.TileCoFHBase; +import cpw.mods.fml.common.registry.GameRegistry; + +public class TileMasher extends TileCoFHBase implements IFluidHandler, IInventory, IEnergyReceiver{ + + public double ENERGY_PER_MB = 0.5; + public int MB_PER_TICK = 10; + + public int process_output_max; // start beyond the process time so it doesn't process when it's first loaded + public int process_output; + + public EnergyStorage energy = new EnergyStorage(1000); + public FluidTank tank = new FluidTank(5000); + public InventorySingleStack food = new InventorySingleStack("inventory.tile.masher", this) { + + @Override + public boolean validate(ItemStack stack) { + return stack.getItem() instanceof ItemFood; + } + + public void markDirty() { + super.markDirty(); + data.markFilthy(); + }; + + }; + + public TileMasher() { + food.data = this; + } + + public static void initialize() { + GameRegistry.registerTileEntity(TileMasher.class, "p2.masher"); + } + + @Override + public boolean canUpdate() { + return true; + } + + @Override + public void updateEntity() { + if(this.worldObj.isRemote) + return; + + if(process_output == 0 && food.get() != null && food.get().stackSize >= 1) { + ItemStack processing = food.get(); + ItemFood foodProcessing = (ItemFood)processing.getItem(); + + int heal = foodProcessing.func_150905_g(processing); +// float saturation = foodProcessing.func_150906_h(processing); + + int out = heal*100; + + food.decrStackSize(0, 1); + process_output = process_output_max = out; + + } + + if(process_output > 0) { + int possibleFill = tank.fill(new FluidStack(ModBlocks.preChewedFood, Math.min(process_output, 10)), false); + if(energy.getEnergyStored() >= possibleFill*ENERGY_PER_MB) { + energy.extractEnergy( (int)( possibleFill *ENERGY_PER_MB ), false); + process_output -= tank.fill(new FluidStack(ModBlocks.preChewedFood, Math.min(process_output, 10)), true); + } + } + } + + public double getProgress() { + return (process_output_max-process_output)/(double)process_output_max; + } + + @Override + public String getName() { + return null; + } + + @Override + public int getType() { + return 0; + } + + /** + * Call both markDirty() and worldObj.markBlockForUpdate + * This sends an update packet to the client + */ + public void markFilthy() { + this.markDirty(); + this.worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + @Override + public Object getGuiClient(InventoryPlayer inventory) { + return new GuiMasher(inventory, this); + } + + @Override + public Object getGuiServer(InventoryPlayer inventory) { + return new ContainerMasher(inventory, this); + } + + @Override + public void writeToNBT(NBTTagCompound tag) { + super.writeToNBT(tag); + energy.writeToNBT(tag); + tag.setInteger("tankAmount", tank.getFluidAmount()); + + tag.setInteger("process_max", process_output_max); + tag.setInteger("process", process_output); + + if(food.get() != null) { + NBTTagCompound stackTag = new NBTTagCompound(); + food.get().writeToNBT(stackTag); + tag.setTag("food", stackTag); + } else { + tag.removeTag("food"); + } + } + + @Override + public void readFromNBT(NBTTagCompound tag) { + super.readFromNBT(tag); + energy.readFromNBT(tag); + if(tank.getFluid() == null) { + tank.setFluid(new FluidStack(ModBlocks.preChewedFood, 10)); + } + tank.getFluid().amount = tag.getInteger("tankAmount"); + + process_output_max = tag.getInteger("process_max"); + process_output = tag.getInteger("process"); + + if(tag.hasKey("food")) { + food.set( ItemStack.loadItemStackFromNBT(tag.getCompoundTag("food")) ); + } else { + food.set(null); + } + } + + + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound syncData = new NBTTagCompound(); + this.writeToNBT(syncData); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, syncData); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + } + + ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\\ + + @Override + public boolean canConnectEnergy(ForgeDirection dir) { + return true; + } + + @Override + public int receiveEnergy(ForgeDirection dir, int amt, boolean simulate) { + if(!simulate && energy.getEnergyStored() != energy.getMaxEnergyStored()) markFilthy(); + return energy.receiveEnergy(amt, simulate); + } + + @Override + public int getEnergyStored(ForgeDirection dir) { + return energy.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(ForgeDirection dir) { + return energy.getMaxEnergyStored(); + } + + ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\\ + + @Override + public int getSizeInventory() { + return food.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int slot) { + return food.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int amt) { + return food.decrStackSize(slot, amt); + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + return food.getStackInSlotOnClosing(slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + food.setInventorySlotContents(slot, stack); + } + + @Override + public String getInventoryName() { + return "inventory.masher"; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { + return true; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return food.isItemValidForSlot(slot, stack); + } + + ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\\ + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return 0; +// if(doFill && tank.getFluidAmount() != tank.getCapacity()) markFilthy(); +// return tank.fill(resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if(doDrain && tank.getFluidAmount() > 0) markFilthy(); + return tank.drain(Math.min(tank.getCapacity(), resource.amount), doDrain); + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + if(doDrain && tank.getFluidAmount() > 0) markFilthy(); + return tank.drain(Math.min(tank.getCapacity(), maxDrain), doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return fluid == ModBlocks.preChewedFood; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return false; +// return fluid == ModBlocks.preChewedFood; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return new FluidTankInfo[] { tank.getInfo() }; + } + + ///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\\ +} diff --git a/src/main/java/practicalities/machine/playerinterface/TilePlayerInterface.java b/src/main/java/practicalities/machine/playerinterface/TilePlayerInterface.java index a92828b..2bc4174 100755 --- a/src/main/java/practicalities/machine/playerinterface/TilePlayerInterface.java +++ b/src/main/java/practicalities/machine/playerinterface/TilePlayerInterface.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.UUID; +import practicalities.blocks.ModBlocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -12,15 +13,24 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.FoodStats; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; import cofh.core.block.TileCoFHBase; import cpw.mods.fml.common.registry.GameRegistry; -public class TilePlayerInterface extends TileCoFHBase implements IInventory { +public class TilePlayerInterface extends TileCoFHBase implements IInventory, IFluidHandler { private WeakReference player; private UUID uuid; private String lastName; + public FluidTank tank = new FluidTank(1000); + private int timeout = 0; public TilePlayerInterface() { @@ -73,7 +83,23 @@ public void updateEntity() { } else { updatePlayer(false); } + + if(hasPlayer()) { + FoodStats f = player.get().getFoodStats(); + if(f.getFoodLevel() < 20 && tank.getFluidAmount() > 100) { + tank.drain(100, true); + f.addStats(1, 0.5f); + +// if(f.getSaturationLevel() < 20 && tank.getFluidAmount() > 0) { +// FluidStack drained = tank.drain((int)( 20-f.getSaturationLevel() )*100, true); +// sat = (float)( drained.amount/100.0 ); +// } +// + } + + } } + @Override public boolean canUpdate() { return true; @@ -101,12 +127,14 @@ public boolean canPlayerDismantle(EntityPlayer player) { @Override public void writeToNBT(NBTTagCompound nbtTag) { super.writeToNBT(nbtTag); + tank.writeToNBT(nbtTag); writeSyncableDataToNBT(nbtTag); } @Override public void readFromNBT(NBTTagCompound nbtTag) { super.readFromNBT(nbtTag); + tank.readFromNBT(nbtTag); readSyncableDataFromNBT(nbtTag); } @@ -233,4 +261,70 @@ public String getInventoryName() { public boolean hasCustomInventoryName() { return false; } + + // *************************** + +// @Override +// public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { +// if(!hasPlayer()) return 0; +// if(player.get().getFoodStats().needFood()) { +// +// FoodStats fs = player.get().getFoodStats(); +// +// int amtNeeded = 0; +// +// int hamNeeded = 100*( 20 - fs.getFoodLevel() ); +// int satNeeded = (int)( 100*( 20.0 - fs.getSaturationLevel() ) ); +// +// amtNeeded = hamNeeded+satNeeded; +// +// amtNeeded = Math.min(amtNeeded, resource.amount); +// +// if(doFill) { +// int amtHam = Math.min(hamNeeded, amtNeeded)/100; +// float amtSat = Math.min(satNeeded, (amtNeeded-(amtHam*100)))/100; +// +// fs.addStats(amtHam, amtSat); +// } +// return amtNeeded; +//// amtNeeded = hamPointsNeeded*100 + saturationNeeded*100; +// +// } +// return 0; +// } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + if(doFill && tank.getFluidAmount() != tank.getCapacity()) markDirty(); + return tank.fill(resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + return null; +// if(doDrain && tank.getFluidAmount() > 0) markFilthy(); +// return tank.drain(Math.min(tank.getCapacity(), resource.amount), doDrain); + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + return null; +// if(doDrain && tank.getFluidAmount() > 0) markFilthy(); +// return tank.drain(Math.min(tank.getCapacity(), maxDrain), doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return true; //fluid != null && fluid.getName() == ModBlocks.preChewedFood.getName(); + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return new FluidTankInfo[] { tank.getInfo() }; + } } diff --git a/src/main/java/practicalities/machine/shippingcrate/ContainerShippingCrate.java b/src/main/java/practicalities/machine/shippingcrate/ContainerShippingCrate.java index ba8b0ba..86055ea 100755 --- a/src/main/java/practicalities/machine/shippingcrate/ContainerShippingCrate.java +++ b/src/main/java/practicalities/machine/shippingcrate/ContainerShippingCrate.java @@ -13,7 +13,7 @@ public class ContainerShippingCrate extends ContainerBase { private TileShippingCrate shippingCrate; - private SlotRegion mainInv, hotbar, crate, card; + private SlotRegion crate, card; public ContainerShippingCrate(InventoryPlayer player, TileShippingCrate shippingCrate) { this.shippingCrate = shippingCrate; @@ -32,9 +32,6 @@ public ContainerShippingCrate(InventoryPlayer player, TileShippingCrate shipping // filter slot Slot cardSlot = this.addSlotToContainer(new SlotAcceptAssignable(shippingCrate, shippingCrate.getFilterSlotIndex(), 152, 5, ItemFilterCard.class)); - mainInv = new SlotRegion("mainInventory", 0, 26); - hotbar = new SlotRegion("hotbar", 27, 35); - SlotRegion[] cols = new SlotRegion[9]; for (int i = 0; i < indexColumns.length; i++) { int[] column = indexColumns[i]; @@ -48,6 +45,8 @@ public ContainerShippingCrate(InventoryPlayer player, TileShippingCrate shipping mainInv.addShiftTargets(card, crate, hotbar); crate.addShiftTargets(mainInv, hotbar); card.addShiftTargets(hotbar, mainInv); + + setShiftClickRegions(card, crate, mainInv, hotbar); } @@ -66,15 +65,5 @@ protected int getSizeInventory() { public boolean canInteractWith(EntityPlayer player) { return true; } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { - - if (!supportsShiftClick(player, slotIndex)) { - return null; - } - - return SlotRegion.shiftClick(this, slotIndex, player, card, mainInv, hotbar, crate); - } } diff --git a/src/main/java/practicalities/network/Proxy.java b/src/main/java/practicalities/network/Proxy.java index ec03317..96c7b0c 100755 --- a/src/main/java/practicalities/network/Proxy.java +++ b/src/main/java/practicalities/network/Proxy.java @@ -19,6 +19,8 @@ public class Proxy { public void preInit() { ModItems.init(); ModBlocks.init(); + ModItems.postInit(); + ModBlocks.postInit(); Net.init(); } diff --git a/src/main/java/practicalities/network/ProxyClient.java b/src/main/java/practicalities/network/ProxyClient.java index e34b3f8..dd63702 100755 --- a/src/main/java/practicalities/network/ProxyClient.java +++ b/src/main/java/practicalities/network/ProxyClient.java @@ -1,9 +1,12 @@ package practicalities.network; +import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import org.lwjgl.input.Keyboard; +import practicalities.ConfigMan; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; @@ -38,4 +41,12 @@ public void onKeyInput(InputEvent.KeyInputEvent event) { Net.channel.sendToServer(new ToggleMagnetPacket()); } } + + @SubscribeEvent + public void drawDebug(RenderGameOverlayEvent.Text event) { + if(!ConfigMan.isDev) return; + if(!Minecraft.getMinecraft().gameSettings.showDebugInfo) return; + + event.left.add("Saturation:" + Minecraft.getMinecraft().thePlayer.getFoodStats().getSaturationLevel()); + } } diff --git a/src/main/resources/assets/practicalities/lang/en_US.lang b/src/main/resources/assets/practicalities/lang/en_US.lang index 9bd9286..8e63623 100755 --- a/src/main/resources/assets/practicalities/lang/en_US.lang +++ b/src/main/resources/assets/practicalities/lang/en_US.lang @@ -12,7 +12,7 @@ item.imbuedRod.name=Imbued Rod item.imbuedTool.name=Imbued Tool item.imbuedSword.name=Imbued Sword item.netherBane.name=Netherbane - +item.bucketPreChewedFood.name=Bucket o' Food item.machinePlate.name=Machine Plate tile.shippingcrate.name=Shipping Crate @@ -21,6 +21,10 @@ tile.vampiricgenerator.name=Vampiric Generator tile.polarityNegator.name=Polarity Negator tile.playerinterface.name=Player Interface tile.inventoryfilter.name=Inventory Filter +tile.preChewedFood.name=Pre-Chewed Food +tile.masher.name=Masher + +fluid.preChewedFood=Pre-Chewed Food chat.sitis.noSky=The stick might work better out in the open chat.sitis.noRain=The stick doesn't really have much to do right now @@ -33,7 +37,7 @@ tooltip.itemMagnet.flair=Suck it! tooltip.imbuedTool.flair=The OPness! tooltip.imbuedSword.flair=Watch out for the quick draw! tooltip.netherBane.flair=Sabre of the Moon - +tooltip.bucketPreChewedFood.flair=Nutritious, if not appetizing gui.tooltip.inventoryfilter.whitelist=Whitelist gui.tooltip.inventoryfilter.blacklist=Blacklist diff --git a/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png new file mode 100644 index 0000000..beb36f6 Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png differ diff --git a/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png.mcmeta b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png.mcmeta new file mode 100755 index 0000000..de3267f --- /dev/null +++ b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/static.png b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/static.png new file mode 100644 index 0000000..a06e37a Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/static.png differ diff --git a/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png new file mode 100644 index 0000000..1e6b132 Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png differ diff --git a/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png.mcmeta b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png.mcmeta new file mode 100755 index 0000000..4b721e0 --- /dev/null +++ b/src/main/resources/assets/practicalities/textures/blocks/preChewedFood/still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/practicalities/textures/gui/element/energy.png b/src/main/resources/assets/practicalities/textures/gui/element/energy.png new file mode 100644 index 0000000..d27aceb Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/gui/element/energy.png differ diff --git a/src/main/resources/assets/practicalities/textures/gui/masher.png b/src/main/resources/assets/practicalities/textures/gui/masher.png new file mode 100644 index 0000000..c0d1d1c Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/gui/masher.png differ diff --git a/src/main/resources/assets/practicalities/textures/items/bucket_preChewedFood.png b/src/main/resources/assets/practicalities/textures/items/bucket_preChewedFood.png new file mode 100644 index 0000000..a63c8be Binary files /dev/null and b/src/main/resources/assets/practicalities/textures/items/bucket_preChewedFood.png differ