Jump to content

hnsdieter

Members
  • Posts

    23
  • Joined

  • Last visited

Everything posted by hnsdieter

  1. Solved. Must have derped something completely
  2. I added the following lines but removed them as you can see: The getItemDropped try: @Override public Item getItemDropped(IBlockState state, Random rand, int fortune) { return Item.getItemFromBlock(Blocks.emerald_block); } The breakBlock Override: @Override public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { super.breakBlock(worldIn, pos, state); worldIn.removeTileEntity(pos); } I think I have nothing else tried so far. I also tried overriding the int getQuantityDropped MEthod just returning 1. Edit: Sorry I should have mentioned that I am modding 1.8
  3. Hey there, I think this is a very basic question so I need to apologize. My Block with a TileEntity is not dropping. I tried overwriting the Method onBreakBlock so the super is called (I know it does not actually break the block but atleast i tried). I also tried returning a very different item in the getDrops(not the actual name). This is my Block: https://github.com/hnsdieter/PingusRandoms/blob/master/src/main/java/pingu/pingusrandoms/block/BlockExpSpawner.java'>https://github.com/hnsdieter/PingusRandoms/blob/master/src/main/java/pingu/pingusrandoms/block/BlockExpSpawner.java My TileEntity: https://github.com/hnsdieter/PingusRandoms/blob/master/src/main/java/pingu/pingusrandoms/tileentity/ExpSpawnerTileEntity.java'>https://github.com/hnsdieter/PingusRandoms/blob/master/src/main/java/pingu/pingusrandoms/tileentity/ExpSpawnerTileEntity.java My Git-Repository: https://github.com/hnsdieter/PingusRandoms thanks for help P.S.: I know you guys dont have the time to overlook everything in my source. Just tell me what class you need and Ill post it in this Thread. Edit: The other Block i created dropped just fine. It is a basic Block.
  4. Thank you very much!!! That was a pretty dumb mistake of mine
  5. Hello, as the title says i have a problem with my item models. I am using intellij and already seted up everything from scratch as diesieben showed in this thread http://www.minecraftforge.net/forum/index.php/topic,21354.0.html. I have no idea what is going wrong... My code: https://github.com/hnsdieter/PingusRandomStuff My log: http://hastebin.com/ikicugibub.tex thanks for help. And Merry Christmas hnsdieter EDOT: I am using forge 1.8-11.14.4.1577
  6. Hello, I got two questions about textures: 1. Is it possible to set an Items/Blocks texture by replacing a certain color in the texturefile e.g. grey tones? And how? 2. Can somebody either confirm/correct my theory of generating a texture out of another: e.g. we have two ore textures. We get the texture e.g. an oreblock. We loop through every pixel with for-loops, and save colors that are not grey ones(the stone background). Then we take another picture an replace defined parts with our getted colors from an Array/List. Then bind our new texture to the our block.
  7. Ok, I have got what you want. But what is the benefit I get from using a foreach-loop instead of a standard for loop?
  8. Thank you for the support! This is my solution now: public static Block[] getBlockB(World world, int x, int y, int z){ ForgeDirection[] directions = ForgeDirection.VALID_DIRECTIONS; Block[] blocks = new Block[directions.length]; for(int i = 0; i < directions.length; i++){ int xCoord = x + directions[i].offsetX; int yCoord = y + directions[i].offsetY; int zCoord = z + directions[i].offsetZ; blocks[i] = world.getBlock(xCoord, yCoord, zCoord); } return blocks; } My Block: package hnsdieter.hnsCrystals.block; import hnsdieter.hnsCrystals.item.hnsItems; import hnsdieter.hnsCrystals.tileentity.BRuneCrafterTileEntity; import hnsdieter.hnsCrystals.util.BlockUtil; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BRuneCrafter extends hnsBlock implements ITileEntityProvider{ public BRuneCrafter(String name) { super(Material.rock, name); this.setHarvestLevel("pickaxe", 2); this.setHardness(5.0F); this.setResistance(1000.0F); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int int1, float f1, float f2, float f3){ if(world.isRemote){ }else{ ItemStack item = player.getHeldItem(); if(item == null){ return false; } if(item.getItem() == hnsItems.crystalStaff){ Block[] blocks = new Block[6]; blocks = BlockUtil.getBlockB(world, x, y, z); for(int i = 0; i < blocks.length; i++){ Block b = blocks[i]; System.out.println(b.getUnlocalizedName()); } } return false; } return false; } @Override public TileEntity createNewTileEntity(World world, int i) { return null; } } The console printout is kind of the same... I am now only ask if it is a good solution for my problem. Ty, hnsdieter
  9. Hello, I figured out that ForgeDirection is the best way to-do this but it seems like the Code is running twice: 0:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.4.-892 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.sponge [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.6.-892 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.grass [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.5.-893 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.blockEmerald [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.5.-891 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.sponge [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 456.5.-892 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: hnsdieter:tile.hnscrystals:stringemitter [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 458.5.-892 [20:35:50] [Client thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.air [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.4.-892 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.sponge [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.6.-892 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.grass [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.5.-893 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.blockEmerald [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 457.5.-891 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.sponge [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 456.5.-892 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: hnsdieter:tile.hnscrystals:stringemitter [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.util.BlockUtil:getBlockA:14]: 458.5.-892 [20:35:50] [server thread/INFO] [sTDOUT]: [hnsdieter.hnsCrystals.block.BRuneCrafter:onBlockActivated:36]: tile.air My Client's log... My Block: public class BRuneCrafter extends hnsBlock implements ITileEntityProvider{ public BRuneCrafter(String name) { super(Material.rock, name); this.setHarvestLevel("pickaxe", 2); this.setHardness(5.0F); this.setResistance(1000.0F); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int int1, float f1, float f2, float f3){ ItemStack item = player.getHeldItem(); if(item == null){ return false; } if(item.getItem() == hnsItems.crystalStaff){ int i = 0; while(i < 6){ Block block = BlockUtil.getBlockA(world, x, y, z, i); if(block == null){ }else{ System.out.println(block.getUnlocalizedName()); } i = i + 1; } } return false; } @Override public TileEntity createNewTileEntity(World world, int i) { return null; } } My BlockUtil class: public class BlockUtil { public static Block getBlockA(World world, int x, int y, int z, int i){ ForgeDirection direction = ForgeDirection.getOrientation(i); int xCoord = x + direction.offsetX; int yCoord = y + direction.offsetY; int zCoord = z + direction.offsetZ; System.out.println(xCoord + "." + yCoord + "." + zCoord); return world.getBlock(xCoord, yCoord, zCoord); } } Please help me to find the derp...
  10. Ok, This is the thing you should implement when you want to go on your own read the documentation above: https://github.com/CoFH/RedstoneFlux-API/blob/master/src/main/java/cofh/api/energy/IEnergyContainerItem.java should look like this: public class Battery extends Item implements IEnergyContainerItem{ } You will get a warning to implement the methods in your class. Just register it later as a normal Item. The example is this: https://github.com/CoFH/RedstoneFlux-API/blob/master/src/main/java/cofh/api/energy/ItemEnergyContainer.java You can extend this for experimental purpouse in your Item class.
  11. Ok, then I have two last ideas: 1: You make it like in extrautilities that you got an extractor(EnergyNode) and a line to go down. 2: You can pass the direction received where the Energy was last received from and prevent it from outputting it backwards. But Energy could not go back because the first Wire in the lines buffer is full at a constant outout of the Generator or Battery so it might be difficult for the Energy to go backwards if the Wir before is full so it only has the direction forward down the line.
  12. You could give every TileEntity using your Energy a simple getter-Method e.g.: public int getMaxReceive() and let it return 0 instead of a value if you dont want it to accept energy from other blocks, that scan around and give Energy to other Tiles. Than you can use "Math.min" to get the smallest number that could be transfered in your outout method: int transfer = Math.min(energy, Math.min(maxTransfer, tile.getMaxReceive()); tile is in that case your TileEntity you scanned for and "Math.min()" returns the smallest number of the two parameters so if getMaxReceive() returns 0 there wont be any transfer into the TileEntity but in others that could accept. You only need to dumb the value transfer as always into your TileEntity. Hope that could help.
  13. I can only figure a simple solution out of the API(I could not test and would not test): ItemStack thaumium = ItemAPI.getItem("itemThaumium", 0); The basic method is: public static ItemStack getItem(String itemString, int meta) I guess for the itemString ingotThaumium or itemThaunium or itemIngotThaumium. Hope that could help.
  14. thank you that helped
  15. Hello, I always get this weird error message: [21:06:28] [server thread/ERROR] [FML]: A TileEntity type hnsdieter.chargeassembly.tileentity.GearBoxTileEntity has throw an exception trying to write state. It will not persist. Report this to the mod author java.lang.RuntimeException: class hnsdieter.chargeassembly.tileentity.GearBoxTileEntity is missing a mapping! This is a bug! at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?] at hnsdieter.chargeassembly.tileentity.GearBoxTileEntity.writeToNBT(GearBoxTileEntity.java:28) ~[GearBoxTileEntity.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?] at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?] at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?] at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:862) [WorldServer.class:?] at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:636) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [integratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] I cant figure out what it means and how to fix it, pls help me. My Tile Entity: package hnsdieter.chargeassembly.tileentity; import hnsdieter.chargeassembly.energy.IJouleMachine; import hnsdieter.chargeassembly.util.BlockUtil; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; 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; public class GearBoxTileEntity extends TileEntity implements IJouleMachine, IFluidHandler{ public int energy; public int maxEnergy; public int maxTransfer; public FluidTank tank = new FluidTank(16000); public GearBoxTileEntity(){ } public void writeToNBT(NBTTagCompound nbt){ super.writeToNBT(nbt); nbt.setInteger("Energy", energy); tank.writeToNBT(nbt); } public void readFromNBT(NBTTagCompound nbt){ super.readFromNBT(nbt); nbt.getInteger("Energy"); tank.readFromNBT(nbt); } /* * Implementation of IJouleMachine */ @Override public void generateEnergy(int amount) { } @Override public void transferEnergy(int amount) { } @Override public void receiveEnergy(int amount) { energy = energy + amount; if(energy > maxEnergy){ energy = maxEnergy; } } /* * IFluidHandler Implementation * @see net.minecraftforge.fluids.IFluidHandler */ @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { return tank.fill(resource, doFill); } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { if(resource == null || !resource.isFluidEqual(tank.getFluid())){ return null; } return tank.drain(resource.amount, doDrain); } @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { return tank.drain(maxDrain, doDrain); } @Override public boolean canFill(ForgeDirection from, Fluid fluid) { return true; } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { return false; } @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { return new FluidTankInfo[] {tank.getInfo()}; } }
  16. I think this is pretty much solved. Is there a good tutorial how I can create my own world generator like the BiomesOP one?
  17. thanks, but if i would create a own world gen type I could porbably only generate my own ores, cant I?
  18. Hello, as mentioned in the topic I want to know, how I can disable Iron or Gold Ore from generating in the world? And can I do the same for other mods?
  19. Ive got a cnstructur is it a matter if i got parameters in there? private ItemStack[] itemStacks; private String invName; public BaseGeneratorTileEntity(int size, String displayName){ itemStacks = new ItemStack[size]; invName = displayName; }
  20. After a closer look with the println() I saw that the NBT data are written and readed if I place the Block, when i close the world they are written, but if i reopen they give me this crashlog I must totally missed the last days as I was trying to make it work: java.lang.InstantiationException: hnsdieter.chargecore.tileentity.BaseGeneratorTileEntity at java.lang.Class.newInstance(Class.java:359) at net.minecraft.tileentity.TileEntity.createAndLoadEntity(TileEntity.java:127) at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:525) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:41) at net.minecraftforge.common.chunkio.ChunkIOProvider.callStage2(ChunkIOProvider.java:12) at net.minecraftforge.common.util.AsynchronousExecutor.skipQueue(AsynchronousExecutor.java:344) at net.minecraftforge.common.util.AsynchronousExecutor.getSkipQueue(AsynchronousExecutor.java:302) at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:12) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:146) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:121) at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:315) at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:79) at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:96) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:455) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:762) And if I give the TileEntity InventoryBasic I need to bind the Container and GUI manually, or not?
  21. After a closer look at TileEntityChest I came up with this solution, but it still doesnt work: package hnsdieter.chargecore.tileentity; import hnsdieter.chargecore.block.BaseGenerator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; /** * Created by Andy on 31.08.2014. */ public class BaseGeneratorTileEntity extends TileEntity implements ISidedInventory{ private ItemStack[] itemStacks; private String invName; public BaseGeneratorTileEntity(int size, String displayName){ itemStacks = new ItemStack[size]; invName = displayName; } /*NBT*/ @Override public void readFromNBT(NBTTagCompound nbtTagCompound){ super.readFromNBT(nbtTagCompound); NBTTagList tagList = nbtTagCompound.getTagList("Inventory", 10); for (int i = 0; i < tagList.tagCount(); i++){ NBTTagCompound nbtTagCompound1 = (NBTTagCompound)tagList.getCompoundTagAt(i); byte slot = nbtTagCompound1.getByte("Slot"); if(slot >= 0 && slot < itemStacks.length){ itemStacks[slot] = ItemStack.loadItemStackFromNBT(nbtTagCompound1); } } } @Override public void writeToNBT(NBTTagCompound nbtTagCompound){ super.writeToNBT(nbtTagCompound); NBTTagList tagList = new NBTTagList(); for(int i = 0; i < itemStacks.length; i++){ ItemStack itemStack = itemStacks[i]; if(itemStack != null){ NBTTagCompound nbtTagCompound1 = new NBTTagCompound(); nbtTagCompound1.setByte("Slot", (byte) i ); itemStack.writeToNBT(nbtTagCompound1); tagList.appendTag(nbtTagCompound1); } } nbtTagCompound.setTag("Inventory", tagList); } @Override public void updateEntity(){ super.updateEntity(); } /*Inventory*/ @Override public int getSizeInventory() { return itemStacks.length; } @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { if(this.itemStacks != null){ ItemStack item; if(this.itemStacks[slot].stackSize <= amount){ item = this.getStackInSlot(slot); this.setInventorySlotContents(slot, null); this.markDirty(); return item; }else{ item = this.getStackInSlot(slot).splitStack(amount); if(this.itemStacks[slot].stackSize == 0){ this.setInventorySlotContents(slot, null); } this.markDirty(); return item; } }else{ return null; } } @Override public ItemStack getStackInSlotOnClosing(int slot) { if(itemStacks[slot] != null){ ItemStack item = this.itemStacks[slot]; this.itemStacks[slot] = null; return item; }else{ return null; } } @Override public void setInventorySlotContents(int slot, ItemStack stack) { itemStacks[slot] = stack; if(stack != null && stack.stackSize > getInventoryStackLimit()){ stack.stackSize = getInventoryStackLimit(); } this.markDirty(); } @Override public String getInventoryName() { if(hasCustomInventoryName() == true){ return invName; }else{ return null; } } @Override public boolean hasCustomInventoryName() { if (invName != null && invName.length() < 0) { return true; } else { return false; } } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; } @Override public Packet getDescriptionPacket() { NBTTagCompound tag = new NBTTagCompound(); writeToNBT(tag); return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag); } @Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { readFromNBT(pkt.func_148857_g()); } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { return false; } }
  22. Ty, but that doesnt work the thing is that Ive no idea. The items are nit saving if I close and reopen the world
  23. Dear Community, Im pretty new to the scene and got a basic knowledge of modding I hope. I followed the Guide for this on the wiki and figuered out how parts of it work. As you might know the tutorial is outdated so Ive got a few questions: When Im in game and shift click the items out, the items double like( 1, 2, 4, 8 and so on) what can I do to prevent mc from doing this? And I cant shift click into the bottom item slots. How can I let the items spread out on break, the code seems not to work?[solved] And the items in the gui are not saving, if i restart the world/server, how can I fix that?[solved] Code: package hnsdieter.chargecore.container; import hnsdieter.chargecore.tileentity.BaseGeneratorTileEntity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; /** * Created by Andy on 31.08.2014. */ public class ContainerGenerator extends net.minecraft.inventory.Container{ protected BaseGeneratorTileEntity tileEntity1; public ContainerGenerator(InventoryPlayer inventoryPlayer, TileEntity te){ tileEntity1 = (BaseGeneratorTileEntity) te; for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ addSlotToContainer(new Slot(tileEntity1, j + i * 3, 62 + j * 18, 17 + i * 18)); } } bindPlayerInventory(inventoryPlayer); } protected void bindPlayerInventory(InventoryPlayer inventoryPlayer){ for(int i = 0; i < 3; i++){ for (int j = 0; j < 9; j++){ addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } for(int i = 0; i < 9; i++){ addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142)); } } public ItemStack transferStackInSlot(EntityPlayer player, int slot){ ItemStack stack = null; Slot slotObject = (Slot) inventorySlots.get(slot); if(slotObject != null && slotObject.getHasStack()){ ItemStack stackInSlot = slotObject.getStack(); stack = stackInSlot.copy(); if(slot < 9){ if(!this.mergeItemStack(stackInSlot, 0, 35, true)){ return null; } }else if(!this.mergeItemStack(stackInSlot, 0, 9, false)){ return null; } if(stackInSlot.stackSize == 0){ slotObject.putStack(null); }else{ slotObject.onSlotChanged(); } if(stackInSlot.stackSize == stack.stackSize){ return null; } slotObject.onPickupFromSlot(player, stackInSlot); } return stack; } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity1.isUseableByPlayer(player); } } package hnsdieter.chargecore.gui; import hnsdieter.chargecore.container.ContainerGenerator; import hnsdieter.chargecore.reference.Reference; import hnsdieter.chargecore.tileentity.BaseGeneratorTileEntity; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; /** * Created by Andy on 31.08.2014. */ public class GuiBaseGenerator extends GuiContainer { public GuiBaseGenerator(InventoryPlayer inventoryPlayer, BaseGeneratorTileEntity tileEntity) { super(new ContainerGenerator(inventoryPlayer, tileEntity)); } protected void drawGuiContainerForegroundLayer(int par1, int par2){ fontRendererObj.drawString("BaseGenerator", 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { ResourceLocation texture = new ResourceLocation(Reference.ID + ":" + "/textures/gui/crafting.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 10.F); this.mc.renderEngine.bindTexture(texture); int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); } } package hnsdieter.chargecore.gui; import cpw.mods.fml.common.network.IGuiHandler; import hnsdieter.chargecore.container.ContainerGenerator; import hnsdieter.chargecore.tileentity.BaseGeneratorTileEntity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; /** * Created by Andy on 31.08.2014. */ public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity instanceof BaseGeneratorTileEntity){ return new ContainerGenerator(player.inventory, (TileEntity) tileEntity); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity instanceof BaseGeneratorTileEntity){ return new GuiBaseGenerator(player.inventory, (BaseGeneratorTileEntity) tileEntity); } return null; } } package hnsdieter.chargecore.tileentity; import hnsdieter.chargecore.block.BaseGenerator; 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; import net.minecraft.tileentity.TileEntity; /** * Created by Andy on 31.08.2014. */ public class BaseGeneratorTileEntity extends TileEntity implements IInventory { private ItemStack[] itemStacks; private String invName; public BaseGeneratorTileEntity(int size, String displayName){ itemStacks = new ItemStack[size]; invName = displayName; } /*NBT*/ @Override public void readFromNBT(NBTTagCompound nbtTagCompound){ super.readFromNBT(nbtTagCompound); NBTTagList tagList = nbtTagCompound.getTagList("Inventory", 10); for (int i = 0; i < tagList.tagCount(); i++){ NBTTagCompound nbtTagCompound1 = (NBTTagCompound)tagList.getCompoundTagAt(i); byte slot = nbtTagCompound1.getByte("Slot"); if(slot >= 0 && slot < itemStacks.length){ itemStacks[slot] = ItemStack.loadItemStackFromNBT(nbtTagCompound1); } } } @Override public void writeToNBT(NBTTagCompound nbtTagCompound){ super.writeToNBT(nbtTagCompound); NBTTagList tagList = new NBTTagList(); for(int i = 0; i < itemStacks.length; i++){ ItemStack itemStack = itemStacks[i]; if(itemStack != null){ NBTTagCompound nbtTagCompound1 = new NBTTagCompound(); nbtTagCompound1.setByte("Slot", (byte) i ); itemStack.writeToNBT(nbtTagCompound1); tagList.appendTag(nbtTagCompound1); } } nbtTagCompound.setTag("Inventory", tagList); } /*Inventory*/ @Override public int getSizeInventory() { return itemStacks.length; } @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { ItemStack itemStack = getStackInSlot(slot); if(itemStack != null){ if(itemStack.stackSize <= amount){ setInventorySlotContents(slot, null); }else { itemStack = itemStack.splitStack(amount); if(itemStack.stackSize == 0){ setInventorySlotContents(slot, null); } } } return itemStack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { ItemStack itemStack = getStackInSlot(slot); if(itemStack != null){ setInventorySlotContents(slot, null); } return itemStack; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { itemStacks[slot] = stack; if(stack != null && stack.stackSize > getInventoryStackLimit()){ stack.stackSize = getInventoryStackLimit(); } } @Override public String getInventoryName() { if(hasCustomInventoryName() == true){ return invName; }else{ return null; } } @Override public boolean hasCustomInventoryName() { if (invName != null && invName.length() < 0) { return true; } else { return false; } } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this && player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { return false; } } package hnsdieter.chargecore.block; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import hnsdieter.chargecore.ChargeCore; import hnsdieter.chargecore.tileentity.BaseGeneratorTileEntity; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; import java.util.Random; /** * Created by Andy on 31.08.2014. */ public class BaseGenerator extends BaseBlock { public BaseGenerator(Material material) { super(material); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float these, float are){ TileEntity tileEntity = world.getTileEntity(x, y, z); if(tileEntity == null || player.isSneaking()){ return false; } player.openGui(ChargeCore.instance, 0, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int par6){ Random rand = new Random(); BaseGeneratorTileEntity tileEntity = (BaseGeneratorTileEntity) world.getTileEntity(x, y, z); if(tileEntity != null) { for (int i = 0; i < tileEntity.getSizeInventory(); i++) { ItemStack itemStack = tileEntity.getStackInSlot(i); if (itemStack != null) { float rx = rand.nextFloat() * 0.8F + 0.1F; float rz = rand.nextFloat() * 0.8F + 0.1F; EntityItem entityItem; for (float ry = rand.nextFloat() * 0.8F + 0.1F; itemStack.stackSize > 0; world.spawnEntityInWorld(entityItem)) { int j1 = rand.nextInt(21) + 10; if (j1 > itemStack.stackSize) { j1 = itemStack.stackSize; } itemStack.stackSize -= j1; entityItem = new EntityItem(world, (double) ((float) x + rx), (double) ((float) y + rz), (double) ((float) z + ry)); float factor = 0.05F; entityItem.motionX = rand.nextGaussian() * factor; entityItem.motionY = rand.nextGaussian() * factor + 0.2F; entityItem.motionZ = rand.nextGaussian() * factor; if (itemStack.hasTagCompound()) { entityItem.getEntityItem().setTagCompound((NBTTagCompound) itemStack.getTagCompound().copy()); } } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, par6); } public TileEntity createNewTileEntity(World world, int par2){ return new BaseGeneratorTileEntity(9, "BaseGenerator"); } }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.