Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Container
- public class ContainerArcFurnace extends Container {
- private final TileEntityArcFurnace tileentity;
- private int cookTime, totalCookTime, burnTime, currentBurnTime;
- public ContainerArcFurnace(InventoryPlayer player, TileEntityArcFurnace tileentity) {
- this.tileentity = tileentity;
- IItemHandler handler = tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
- this.addSlotToContainer(new SlotItemHandler(handler, 0, 25, 23));
- this.addSlotToContainer(new SlotItemHandler(handler, 1, 50, 23));
- this.addSlotToContainer(new SlotItemHandler(handler, 2, 37, 45));
- this.addSlotToContainer(new SlotItemHandler(handler, 3, 133, 33));
- this.addSlotToContainer(new SlotItemHandler(handler, 4, 90, 23));
- for(int y = 0; y < 3; y++) {
- for(int x = 0; x < 9; x++) {
- this.addSlotToContainer(new Slot(player, x + y*9 + 9, 8 + x*18, 84 + y*18));
- }
- }
- for(int x = 0; x < 9; x++) {
- this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142));
- }
- }
- @Override
- public void detectAndSendChanges() {
- super.detectAndSendChanges();
- for(int i = 0; i < this.listeners.size(); ++i) {
- IContainerListener listener = (IContainerListener)this.listeners.get(i);
- if(this.cookTime != this.tileentity.getField(2)) listener.sendWindowProperty(this, 2, this.tileentity.getField(2));
- if(this.burnTime != this.tileentity.getField(0)) listener.sendWindowProperty(this, 0, this.tileentity.getField(0));
- if(this.currentBurnTime != this.tileentity.getField(1)) listener.sendWindowProperty(this, 1, this.tileentity.getField(1));
- if(this.totalCookTime != this.tileentity.getField(3)) listener.sendWindowProperty(this, 3, this.tileentity.getField(3));
- }
- this.cookTime = this.tileentity.getField(2);
- this.burnTime = this.tileentity.getField(0);
- this.currentBurnTime = this.tileentity.getField(1);
- this.totalCookTime = this.tileentity.getField(3);
- }
- @Override
- @SideOnly(Side.CLIENT)
- public void updateProgressBar(int id, int data) {
- this.tileentity.setField(id, data);
- }
- @Override
- public boolean canInteractWith(EntityPlayer playerIn) {
- return this.tileentity.isUsableByPlayer(playerIn);
- }
- @Override
- public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
- ItemStack stack = ItemStack.EMPTY;
- Slot slot = (Slot)this.inventorySlots.get(index);
- if(slot != null && slot.getHasStack()) {
- ItemStack stack1 = slot.getStack();
- stack = stack1.copy();
- if(index == 3) {
- if(!this.mergeItemStack(stack1, 4, 40, true)) return ItemStack.EMPTY;
- slot.onSlotChange(stack1, stack);
- }
- else if(index != 2 && index != 1 && index != 0) {
- Slot slot1 = (Slot)this.inventorySlots.get(index + 1);
- if(!RecipeArcFurnace.getInstance().getResult(stack1, slot1.getStack()).isEmpty()) {
- if(!this.mergeItemStack(stack1, 0, 2, false)) {
- return ItemStack.EMPTY;
- }
- else if(TileEntityArcFurnace.isItemFuel(stack1)) {
- if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
- }
- else if(TileEntityArcFurnace.isItemFuel(stack1)) {
- if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
- }
- else if(TileEntityArcFurnace.isItemFuel(stack1)) {
- if(!this.mergeItemStack(stack1, 2, 3, false)) return ItemStack.EMPTY;
- }
- else if(index >= 4 && index < 31) {
- if(!this.mergeItemStack(stack1, 31, 40, false)) return ItemStack.EMPTY;
- }
- else if(index >= 31 && index < 40 && !this.mergeItemStack(stack1, 4, 31, false)) {
- return ItemStack.EMPTY;
- }
- }
- }
- else if(!this.mergeItemStack(stack1, 4, 40, false)) {
- return ItemStack.EMPTY;
- }
- if(stack1.isEmpty()) {
- slot.putStack(ItemStack.EMPTY);
- }
- else {
- slot.onSlotChanged();
- }
- if(stack1.getCount() == stack.getCount()) return ItemStack.EMPTY;
- slot.onTake(playerIn, stack1);
- }
- return stack;
- }
- }
- //TileEntity
- public class TileEntityArcFurnace extends TileEntity implements ITickable {
- private ItemStackHandler handler = new ItemStackHandler(5);
- private String customName;
- private ItemStack smelting = ItemStack.EMPTY;
- private int burnTime;
- private int currentBurnTime;
- private int cookTime;
- private int totalCookTime = 200;
- @Override
- public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
- if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return true;
- else return false;
- }
- @Override
- public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
- if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return (T) this.handler;
- return super.getCapability(capability, facing);
- }
- public boolean hasCustomName() {
- return this.customName != null && !this.customName.isEmpty();
- }
- public void setCustomName(String customName) {
- this.customName = customName;
- }
- @Override
- public ITextComponent getDisplayName() {
- return this.hasCustomName() ? new TextComponentString(this.customName) : new TextComponentTranslation("container.arc_furnace");
- }
- @Override
- public void readFromNBT(NBTTagCompound compound) {
- super.readFromNBT(compound);
- this.handler.deserializeNBT(compound.getCompoundTag("Inventory"));
- this.burnTime = compound.getInteger("BurnTime");
- this.cookTime = compound.getInteger("CookTime");
- this.totalCookTime = compound.getInteger("CookTimeTotal");
- this.currentBurnTime = getItemBurnTime((ItemStack)this.handler.getStackInSlot(2));
- if(compound.hasKey("CustomName", 8)) this.setCustomName(compound.getString("CustomName"));
- }
- @Override
- public NBTTagCompound writeToNBT(NBTTagCompound compound) {
- super.writeToNBT(compound);
- compound.setInteger("BurnTime", (short)this.burnTime);
- compound.setInteger("CookTime", (short)this.cookTime);
- compound.setInteger("CookTimeTotal", (short)this.totalCookTime);
- compound.setTag("Inventory", this.handler.serializeNBT());
- if(this.hasCustomName()) compound.setString("CustomName", this.customName);
- return compound;
- }
- public boolean isBurning() {
- return this.burnTime > 0;
- }
- @SideOnly(Side.CLIENT)
- public static boolean isBurning(TileEntityArcFurnace te) {
- return te.getField(0) > 0;
- }
- public void update() {
- if(this.isBurning()) {
- --this.burnTime;
- MachineArcFurnace.setState(true, world, pos);
- }
- ItemStack[] inputs = new ItemStack[] {handler.getStackInSlot(0), handler.getStackInSlot(1)};
- ItemStack fuel = this.handler.getStackInSlot(2);
- if(this.isBurning() || !fuel.isEmpty() && !this.handler.getStackInSlot(0).isEmpty() || this.handler.getStackInSlot(1).isEmpty()) {
- if(!this.isBurning() && this.canSmelt()) {
- this.burnTime = getItemBurnTime(fuel);
- this.currentBurnTime = burnTime;
- if(this.isBurning() && !fuel.isEmpty()) {
- Item item = fuel.getItem();
- fuel.shrink(1);
- if(fuel.isEmpty()) {
- ItemStack item1 = item.getContainerItem(fuel);
- this.handler.setStackInSlot(2, item1);
- }
- }
- }
- }
- if(this.isBurning() && this.canSmelt() && cookTime > 0) {
- cookTime++;
- if(cookTime == totalCookTime) {
- if(handler.getStackInSlot(3).getCount() > 0) {
- handler.getStackInSlot(3).grow(1);
- }
- else {
- handler.insertItem(3, smelting, false);
- }
- smelting = ItemStack.EMPTY;
- cookTime = 0;
- return;
- }
- }
- else {
- if(this.canSmelt() && this.isBurning()) {
- ItemStack output = RecipeArcFurnace.getInstance().getResult(inputs[0], inputs[1]);
- if(!output.isEmpty()) {
- smelting = output;
- cookTime++;
- inputs[0].shrink(1);
- inputs[1].shrink(1);
- handler.setStackInSlot(0, inputs[0]);
- handler.setStackInSlot(1, inputs[1]);
- }
- }
- }
- }
- private boolean canSmelt() {
- if(((ItemStack)this.handler.getStackInSlot(0)).isEmpty() || ((ItemStack)this.handler.getStackInSlot(1)).isEmpty()) return false;
- else {
- ItemStack result = RecipeArcFurnace.getInstance().getResult((ItemStack)this.handler.getStackInSlot(0), (ItemStack)this.handler.getStackInSlot(1));
- if(result.isEmpty()) return false;
- else {
- ItemStack output = (ItemStack)this.handler.getStackInSlot(3);
- if(output.isEmpty()) return true;
- if(!output.isItemEqual(result)) return false;
- int res = output.getCount() + result.getCount();
- return res <= 64 && res <= output.getMaxStackSize();
- }
- }
- }
- public static int getItemBurnTime(ItemStack fuel) {
- if(fuel.isEmpty()) return 0;
- else {
- Item item = fuel.getItem();
- if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.AIR) {
- Block block = Block.getBlockFromItem(item);
- if (block == Blocks.WOODEN_SLAB) return 150;
- if (block.getDefaultState().getMaterial() == Material.WOOD) return 300;
- if (block == Blocks.COAL_BLOCK) return 16000;
- }
- if (item instanceof ItemTool && "WOOD".equals(((ItemTool)item).getToolMaterialName())) return 200;
- if (item instanceof ItemSword && "WOOD".equals(((ItemSword)item).getToolMaterialName())) return 200;
- if (item instanceof ItemHoe && "WOOD".equals(((ItemHoe)item).getMaterialName())) return 200;
- if (item == Items.STICK) return 100;
- if (item == Items.COAL) return 1600;
- if (item == Items.LAVA_BUCKET) return 20000;
- if (item == Item.getItemFromBlock(Blocks.SAPLING)) return 100;
- if (item == Items.BLAZE_ROD) return 2400;
- return GameRegistry.getFuelValue(fuel);
- }
- }
- public static boolean isItemFuel(ItemStack fuel) {
- return getItemBurnTime(fuel) > 0;
- }
- public boolean isUsableByPlayer(EntityPlayer player) {
- return this.world.getTileEntity(this.pos) != this ? false : player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D;
- }
- public int getField(int id) {
- switch(id) {
- case 0:
- return this.burnTime;
- case 1:
- return this.currentBurnTime;
- case 2:
- return this.cookTime;
- case 3:
- return this.totalCookTime;
- default:
- return 0;
- }
- }
- public void setField(int id, int value) {
- switch(id)
- {
- case 0:
- this.burnTime = value;
- break;
- case 1:
- this.currentBurnTime = value;
- break;
- case 2:
- this.cookTime = value;
- break;
- case 3:
- this.totalCookTime = value;
- }
- }
- }
- //Error + Stacktrace
- [22:04:14] [Server thread/FATAL] [minecraft/MinecraftServer]: Error executing task
- java.util.concurrent.ExecutionException: java.lang.RuntimeException: Slot 4 not in valid range - [0,4)
- at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:1.8.0_181]
- at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[?:1.8.0_181]
- at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?]
- at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:798) [MinecraftServer.class:?]
- at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) [MinecraftServer.class:?]
- at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?]
- at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?]
- at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
- Caused by: java.lang.RuntimeException: Slot 4 not in valid range - [0,4)
- at net.minecraftforge.items.ItemStackHandler.validateSlotIndex(ItemStackHandler.java:214) ~[ItemStackHandler.class:?]
- at net.minecraftforge.items.ItemStackHandler.getStackInSlot(ItemStackHandler.java:73) ~[ItemStackHandler.class:?]
- at net.minecraftforge.items.SlotItemHandler.getStack(SlotItemHandler.java:79) ~[SlotItemHandler.class:?]
- at net.minecraft.inventory.Container.getInventory(Container.java:75) ~[Container.class:?]
- at net.minecraft.inventory.Container.addListener(Container.java:61) ~[Container.class:?]
- at net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:101) ~[FMLNetworkHandler.class:?]
- at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2809) ~[EntityPlayer.class:?]
- at exokem.exkva.objects.machines.MachineArcFurnace.onBlockActivated(MachineArcFurnace.java:55) ~[MachineArcFurnace.class:?]
- at net.minecraft.server.management.PlayerInteractionManager.processRightClickBlock(PlayerInteractionManager.java:475) ~[PlayerInteractionManager.class:?]
- at net.minecraft.network.NetHandlerPlayServer.processTryUseItemOnBlock(NetHandlerPlayServer.java:769) ~[NetHandlerPlayServer.class:?]
- at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:68) ~[CPacketPlayerTryUseItemOnBlock.class:?]
- at net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock.processPacket(CPacketPlayerTryUseItemOnBlock.java:13) ~[CPacketPlayerTryUseItemOnBlock.class:?]
- at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
- at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_181]
- at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_181]
- at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?]
- ... 5 more
- [22:04:14] [Server thread/ERROR] [minecraft/MinecraftServer]: Encountered an unexpected exception
- net.minecraft.util.ReportedException: Ticking player
- at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:848) ~[MinecraftServer.class:?]
- at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) ~[MinecraftServer.class:?]
- at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) ~[IntegratedServer.class:?]
- at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?]
- at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
- Caused by: java.lang.RuntimeException: Slot 4 not in valid range - [0,4)
- at net.minecraftforge.items.ItemStackHandler.validateSlotIndex(ItemStackHandler.java:214) ~[ItemStackHandler.class:?]
- at net.minecraftforge.items.ItemStackHandler.getStackInSlot(ItemStackHandler.java:73) ~[ItemStackHandler.class:?]
- at net.minecraftforge.items.SlotItemHandler.getStack(SlotItemHandler.java:79) ~[SlotItemHandler.class:?]
- at net.minecraft.inventory.Container.detectAndSendChanges(Container.java:97) ~[Container.class:?]
- at exokem.exkva.objects.containers.ContainerArcFurnace.detectAndSendChanges(ContainerArcFurnace.java:44) ~[ContainerArcFurnace.class:?]
- at net.minecraft.entity.player.EntityPlayerMP.onUpdate(EntityPlayerMP.java:365) ~[EntityPlayerMP.class:?]
- at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171) ~[World.class:?]
- at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871) ~[WorldServer.class:?]
- at net.minecraft.world.World.updateEntity(World.java:2130) ~[World.class:?]
- at net.minecraft.world.WorldServer.tickPlayers(WorldServer.java:672) ~[WorldServer.class:?]
- at net.minecraft.world.World.updateEntities(World.java:1906) ~[World.class:?]
- at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643) ~[WorldServer.class:?]
- at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842) ~[MinecraftServer.class:?]
- ... 4 more
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement