From d30eb824cb12b0a7301c435330875cf1c60fb29a Mon Sep 17 00:00:00 2001 From: draknyte1 Date: Sun, 12 Mar 2017 13:55:59 +1000 Subject: + Added missing classes from the Helium Generator. Forgot to commit them last time. --- .../core/block/machine/HeliumGenerator.java | 93 ++++++++++ .../core/container/Container_HeliumGenerator.java | 188 +++++++++++++++++++++ .../core/gui/machine/GUI_HeliumGenerator.java | 37 ++++ .../core/inventories/InventoryHeliumGenerator.java | 176 +++++++++++++++++++ src/Java/gtPlusPlus/core/slots/SlotFuelRod.java | 25 +++ .../general/TileEntityHeliumGenerator.java | 156 +++++++++++++++++ 6 files changed, 675 insertions(+) create mode 100644 src/Java/gtPlusPlus/core/block/machine/HeliumGenerator.java create mode 100644 src/Java/gtPlusPlus/core/container/Container_HeliumGenerator.java create mode 100644 src/Java/gtPlusPlus/core/gui/machine/GUI_HeliumGenerator.java create mode 100644 src/Java/gtPlusPlus/core/inventories/InventoryHeliumGenerator.java create mode 100644 src/Java/gtPlusPlus/core/slots/SlotFuelRod.java create mode 100644 src/Java/gtPlusPlus/core/tileentities/general/TileEntityHeliumGenerator.java (limited to 'src/Java/gtPlusPlus') diff --git a/src/Java/gtPlusPlus/core/block/machine/HeliumGenerator.java b/src/Java/gtPlusPlus/core/block/machine/HeliumGenerator.java new file mode 100644 index 0000000000..98c7eaafd2 --- /dev/null +++ b/src/Java/gtPlusPlus/core/block/machine/HeliumGenerator.java @@ -0,0 +1,93 @@ +package gtPlusPlus.core.block.machine; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.GTplusplus; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.tileentities.general.TileEntityHeliumGenerator; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class HeliumGenerator extends BlockContainer +{ + @SideOnly(Side.CLIENT) + private IIcon textureTop; + @SideOnly(Side.CLIENT) + private IIcon textureBottom; + @SideOnly(Side.CLIENT) + private IIcon textureFront; + + + @SuppressWarnings("deprecation") + public HeliumGenerator() + { + super(Material.wood); + this.setBlockName("blockHeliumGenerator"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, "blockHeliumGenerator"); + LanguageRegistry.addName(this, "Helium Generator"); + + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int p_149691_1_, final int p_149691_2_) + { + return p_149691_1_ == 1 ? this.textureTop : (p_149691_1_ == 0 ? this.textureBottom : ((p_149691_1_ != 2) && (p_149691_1_ != 4) ? this.blockIcon : this.textureFront)); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) + { + this.blockIcon = p_149651_1_.registerIcon(CORE.MODID + ":" + "Chrono/" + "CyberPanel2"); + this.textureTop = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "CyberPanel2"); + this.textureBottom = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "CyberPanel"); + this.textureFront = p_149651_1_.registerIcon(CORE.MODID + ":" + "TileEntities/" + "CyberPanel"); + } + + /** + * Called upon block activation (right click on the block.) + */ + @Override + public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, final int side, final float lx, final float ly, final float lz) + { + if (world.isRemote) { + return true; + } + + final TileEntity te = world.getTileEntity(x, y, z); + if ((te != null) && (te instanceof TileEntityHeliumGenerator)){ //TODO + player.openGui(GTplusplus.instance, 1, world, x, y, z); //TODO + return true; + } + return false; + } + + @Override + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { + return new TileEntityHeliumGenerator(); + } + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/container/Container_HeliumGenerator.java b/src/Java/gtPlusPlus/core/container/Container_HeliumGenerator.java new file mode 100644 index 0000000000..f98d0cd561 --- /dev/null +++ b/src/Java/gtPlusPlus/core/container/Container_HeliumGenerator.java @@ -0,0 +1,188 @@ +package gtPlusPlus.core.container; + +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.InventoryHeliumGenerator; +import gtPlusPlus.core.slots.SlotFuelRod; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.tileentities.general.TileEntityHeliumGenerator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class Container_HeliumGenerator extends Container { + + protected TileEntityHeliumGenerator tile_entity; + public final InventoryHeliumGenerator inventoryChest; + + private final World worldObj; + private final int posX; + private final int posY; + private final int posZ; + + + public static int StorageSlotNumber = 18; //Number of slots in storage area + public static int InventorySlotNumber = 36; //Inventory Slots (Inventory and Hotbar) + public static int FullSlotNumber = InventorySlotNumber + StorageSlotNumber; //All slots + + private final int[] slotStorage = new int[15]; + + public Container_HeliumGenerator(final InventoryPlayer inventory, final TileEntityHeliumGenerator te){ + this.tile_entity = te; + this.inventoryChest = te.getInventory(); + + int var6; + int var7; + this.worldObj = te.getWorldObj(); + this.posX = te.xCoord; + this.posY = te.yCoord; + this.posZ = te.zCoord; + + int o=0; + + //Output + this.addSlotToContainer(new SlotNoInput(this.inventoryChest, 0, 80, 35)); + this.slotStorage[o] = o; + o++; + + //Side A + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 3; ++var7) + { + this.addSlotToContainer(new SlotFuelRod(this.inventoryChest, var7 + (var6 * 4), 36+ 8 + (var7 * 18), 8 + 7 + (var6 * 18))); + this.slotStorage[o] = o; + o++; + } + } + + //Side B + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 3; ++var7) + { + this.addSlotToContainer(new SlotFuelRod(this.inventoryChest, var7 + (var6 * 4), 90 + 8 + (var7 * 18), 8 + 7 + (var6 * 18))); + this.slotStorage[o] = o; + o++; + } + } + + o=0; + + //Player Inventory + for (var6 = 0; var6 < 3; ++var6) + { + for (var7 = 0; var7 < 9; ++var7) + { + this.addSlotToContainer(new Slot(inventory, var7 + (var6 * 9) + 9, 8 + (var7 * 18), 84 + (var6 * 18))); + } + } + + //Player Hotbar + for (var6 = 0; var6 < 9; ++var6) + { + this.addSlotToContainer(new Slot(inventory, var6, 8 + (var6 * 18), 142)); + } + + } + + @Override + public ItemStack slotClick(final int aSlotIndex, final int aMouseclick, final int aShifthold, final EntityPlayer aPlayer){ + + if (!aPlayer.worldObj.isRemote){ + if ((aSlotIndex == 999) || (aSlotIndex == -999)){ + //Utils.LOG_WARNING("??? - "+aSlotIndex); + } + } + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + + + + + + @Override + public void onContainerClosed(final EntityPlayer par1EntityPlayer){ + super.onContainerClosed(par1EntityPlayer); + } + + + @Override + public boolean canInteractWith(final EntityPlayer par1EntityPlayer){ + if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockHeliumGenerator){ + return false; + } + + return par1EntityPlayer.getDistanceSq(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D) <= 64D; + } + + + @Override + public ItemStack transferStackInSlot(final EntityPlayer par1EntityPlayer, final int par2) + { + ItemStack var3 = null; + final Slot var4 = (Slot)this.inventorySlots.get(par2); + + if ((var4 != null) && var4.getHasStack()) + { + final ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + /*if (par2 == 0) + { + if (!this.mergeItemStack(var5, InOutputSlotNumber, FullSlotNumber, true)) + { + return null; + } + + var4.onSlotChange(var5, var3); + } + else if (par2 >= InOutputSlotNumber && par2 < InventoryOutSlotNumber) + { + if (!this.mergeItemStack(var5, InventoryOutSlotNumber, FullSlotNumber, false)) + { + return null; + } + } + else if (par2 >= InventoryOutSlotNumber && par2 < FullSlotNumber) + { + if (!this.mergeItemStack(var5, InOutputSlotNumber, InventoryOutSlotNumber, false)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, InOutputSlotNumber, FullSlotNumber, false)) + { + return null; + }*/ + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack)null); + } + else + { + var4.onSlotChanged(); + } + + if (var5.stackSize == var3.stackSize) + { + return null; + } + + var4.onPickupFromSlot(par1EntityPlayer, var5); + } + + return var3; + } + + //Can merge Slot + @Override + public boolean func_94530_a(final ItemStack p_94530_1_, final Slot p_94530_2_) { + return super.func_94530_a(p_94530_1_, p_94530_2_); + } + + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/gui/machine/GUI_HeliumGenerator.java b/src/Java/gtPlusPlus/core/gui/machine/GUI_HeliumGenerator.java new file mode 100644 index 0000000000..0f02b709e6 --- /dev/null +++ b/src/Java/gtPlusPlus/core/gui/machine/GUI_HeliumGenerator.java @@ -0,0 +1,37 @@ +package gtPlusPlus.core.gui.machine; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.container.Container_HeliumGenerator; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.tileentities.general.TileEntityHeliumGenerator; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +@SideOnly(Side.CLIENT) +public class GUI_HeliumGenerator extends GuiContainer { + + private static final ResourceLocation guiTexture = new ResourceLocation(CORE.MODID, "textures/gui/helium_collector_gui.png"); + + public GUI_HeliumGenerator(final InventoryPlayer player_inventory, final TileEntityHeliumGenerator te){ + super(new Container_HeliumGenerator(player_inventory, te)); + } + + @Override + protected void drawGuiContainerForegroundLayer(final int i, final int j){ + //this.fontRendererObj.drawString(I18n.format("", new Object[0]), 28, 6, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(final float f, final int i, final int j){ + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + this.mc.renderEngine.bindTexture(guiTexture); + final int x = (this.width - this.xSize) / 2; + final int y = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(x, y, 0, 0, this.xSize, this.ySize); + } + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/inventories/InventoryHeliumGenerator.java b/src/Java/gtPlusPlus/core/inventories/InventoryHeliumGenerator.java new file mode 100644 index 0000000000..0288aa4d29 --- /dev/null +++ b/src/Java/gtPlusPlus/core/inventories/InventoryHeliumGenerator.java @@ -0,0 +1,176 @@ +package gtPlusPlus.core.inventories; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +public class InventoryHeliumGenerator implements IInventory{ + + private final String name = "Helium"; + + /** Defining your inventory size this way is handy */ + public static final int INV_SIZE = 19; + + /** Inventory's size must be same as number of slots you add to the Container class */ + private ItemStack[] inventory = new ItemStack[INV_SIZE]; + + public void readFromNBT(final NBTTagCompound nbt){ + final NBTTagList list = nbt.getTagList("Items", 10); + this.inventory = new ItemStack[INV_SIZE]; + for(int i = 0;i= 0) && (slot < INV_SIZE)){ + //Utils.LOG_INFO("Trying to read NBT data from inventory."); + this.inventory[slot] = ItemStack.loadItemStackFromNBT(data); + } + } + } + + public void writeToNBT(final NBTTagCompound nbt){ + final NBTTagList list = new NBTTagList(); + for(int i = 0;i amount) + { + stack = stack.splitStack(amount); + // Don't forget this line or your inventory will not be saved! + this.markDirty(); + } + else + { + // this method also calls markDirty, so we don't need to call it again + this.setInventorySlotContents(slot, null); + } + } + return stack; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int slot) + { + final ItemStack stack = this.getStackInSlot(slot); + this.setInventorySlotContents(slot, null); + return stack; + } + + @Override + public void setInventorySlotContents(final int slot, final ItemStack stack) + { + this.inventory[slot] = stack; + + if ((stack != null) && (stack.stackSize > this.getInventoryStackLimit())) + { + stack.stackSize = this.getInventoryStackLimit(); + } + + // Don't forget this line or your inventory will not be saved! + this.markDirty(); + } + + // 1.7.2+ renamed to getInventoryName + @Override + public String getInventoryName() + { + return this.name; + } + + // 1.7.2+ renamed to hasCustomInventoryName + @Override + public boolean hasCustomInventoryName() + { + return this.name.length() > 0; + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + /** + * This is the method that will handle saving the inventory contents, as it is called (or should be called!) + * anytime the inventory changes. Perfect. Much better than using onUpdate in an Item, as this will also + * let you change things in your inventory without ever opening a Gui, if you want. + */ + // 1.7.2+ renamed to markDirty + @Override + public void markDirty() + { + for (int i = 0; i < this.getSizeInventory(); ++i) + { + final ItemStack temp = this.getStackInSlot(i); + if (temp != null){ + //Utils.LOG_INFO("Slot "+i+" contains "+temp.getDisplayName()+" x"+temp.stackSize); + } + + if ((temp != null) && (temp.stackSize == 0)) { + this.inventory[i] = null; + } + } + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer entityplayer) + { + return true; + } + + // 1.7.2+ renamed to openInventory(EntityPlayer player) + @Override + public void openInventory() {} + + // 1.7.2+ renamed to closeInventory(EntityPlayer player) + @Override + public void closeInventory() {} + + /** + * This method doesn't seem to do what it claims to do, as + * items can still be left-clicked and placed in the inventory + * even when this returns false + */ + @Override + public boolean isItemValidForSlot(final int slot, final ItemStack itemstack) + { + // Don't want to be able to store the inventory item within itself + // Bad things will happen, like losing your inventory + // Actually, this needs a custom Slot to work + return true; + } + +} \ No newline at end of file diff --git a/src/Java/gtPlusPlus/core/slots/SlotFuelRod.java b/src/Java/gtPlusPlus/core/slots/SlotFuelRod.java new file mode 100644 index 0000000000..f925376c69 --- /dev/null +++ b/src/Java/gtPlusPlus/core/slots/SlotFuelRod.java @@ -0,0 +1,25 @@ +package gtPlusPlus.core.slots; + +import ic2.core.Ic2Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class SlotFuelRod extends Slot{ + + public SlotFuelRod(final IInventory inventory, final int index, final int x, final int y) { + super(inventory, index, x, y); + + } + + @Override + public boolean isItemValid(final ItemStack itemstack) { + return itemstack.getItem().getClass() == Ic2Items.fuelRod.getItem().getClass(); + } + + @Override + public int getSlotStackLimit() { + return 1; + } + +} diff --git a/src/Java/gtPlusPlus/core/tileentities/general/TileEntityHeliumGenerator.java b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityHeliumGenerator.java new file mode 100644 index 0000000000..7cf7c992e2 --- /dev/null +++ b/src/Java/gtPlusPlus/core/tileentities/general/TileEntityHeliumGenerator.java @@ -0,0 +1,156 @@ +package gtPlusPlus.core.tileentities.general; + +import gregtech.api.enums.GT_Values; +import gtPlusPlus.core.inventories.InventoryHeliumGenerator; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.item.ItemUtils; +import gtPlusPlus.core.util.math.MathUtils; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityHeliumGenerator extends TileEntity{ + + private int tickCount = 0; + private final InventoryHeliumGenerator inventoryContents; //TODO + private int locationX; + private int locationY; + private int locationZ; + private int baseTickRate = 1200; + + public TileEntityHeliumGenerator(){ + this.inventoryContents = new InventoryHeliumGenerator();//number of slots - without product slot + this.setTileLocation(); + } + + public boolean setTileLocation(){ + if (this.hasWorldObj()){ + if (!this.getWorldObj().isRemote){ + this.locationX = this.xCoord; + this.locationY = this.yCoord; + this.locationZ = this.zCoord; + return true; + } + } + return false; + } + + public InventoryHeliumGenerator getInventory(){ + return this.inventoryContents; + } + + public boolean tryAddLoot(){ + if (this.getInventory().getInventory() != null){ + int checkingSlot = 0; + final ItemStack loot = this.generateLootForFishTrap(); + for (final ItemStack contents : this.getInventory().getInventory()){ + if (contents == null){ + this.getInventory().setInventorySlotContents(checkingSlot, loot); + this.markDirty(); + return true; + } + else if (contents.getItem() == loot.getItem()){ + if (contents.stackSize < contents.getMaxStackSize()){ + contents.stackSize++; + this.markDirty(); + return true; + } + else { + this.getInventory().setInventorySlotContents(checkingSlot, loot); + this.markDirty(); + return true; + } + } + else { + + } + checkingSlot++; + } + } + this.markDirty(); + return false; + } + + private ItemStack generateLootForFishTrap() { + final int lootWeight = MathUtils.randInt(0, 1000); + ItemStack loot = GT_Values.NI; + if (lootWeight > 990){ + loot = ItemUtils.getSimpleStack(Items.slime_ball); + } + return loot; + } + + @Override + public void updateEntity(){ + if (!this.worldObj.isRemote){ + this.tickCount++; + //Utils.LOG_INFO("Ticking "+this.tickCount); + //Check if the Tile is within water once per second. + if ((this.tickCount%20)==0){ + + } + else { + + } + + if (true){ + this.calculateTickrate(); + } + + //Try add some loot once every 30 seconds. + if ((this.tickCount%this.baseTickRate)==0){ + if (true){ + //Add loot + //Utils.LOG_INFO("Adding Loot to the fishtrap at x["+this.locationX+"] y["+this.locationY+"] z["+this.locationZ+"] (Ticking for loot every "+this.baseTickRate+" ticks)"); + this.tryAddLoot(); + this.markDirty(); + } + else { + Utils.LOG_INFO("This Trap does not have enough water around it."); + Utils.LOG_INFO("Not adding Loot to the fishtrap at x["+this.locationX+"] y["+this.locationY+"] z["+this.locationZ+"] (Ticking for loot every "+this.baseTickRate+" ticks)"); + this.markDirty(); + } + this.tickCount = 0; + } + if (this.tickCount > (this.baseTickRate+500)){ + this.tickCount = 0; + } + + + } + } + + public void calculateTickrate(){ + int calculateTickrate = 0; + this.baseTickRate = calculateTickrate; + } + + public boolean anyPlayerInRange(){ + return this.worldObj.getClosestPlayer(this.xCoord + 0.5D, this.yCoord + 0.5D, this.zCoord + 0.5D, 32) != null; + } + + public NBTTagCompound getTag(final NBTTagCompound nbt, final String tag){ + if(!nbt.hasKey(tag)){ + nbt.setTag(tag, new NBTTagCompound()); + } + return nbt.getCompoundTag(tag); + } + + @Override + public void writeToNBT(final NBTTagCompound nbt){ + super.writeToNBT(nbt); + //Utils.LOG_INFO("Trying to write NBT data to TE."); + final NBTTagCompound chestData = new NBTTagCompound(); + this.inventoryContents.writeToNBT(chestData); + nbt.setTag("ContentsChest", chestData); + } + + @Override + public void readFromNBT(final NBTTagCompound nbt){ + super.readFromNBT(nbt); + //Utils.LOG_INFO("Trying to read NBT data from TE."); + this.inventoryContents.readFromNBT(nbt.getCompoundTag("ContentsChest")); + } + +} -- cgit