Advertisement
Exokem

Untitled

May 19th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.68 KB | None | 0 0
  1. // GUI
  2. public class GuiArcFurnace extends GuiContainer {
  3.  
  4.     private static final ResourceLocation TEXTURES = new ResourceLocation(Exkva.MODID + ":textures/gui/container/arc_furnace.png");
  5.     private final InventoryPlayer player;
  6.     private final TileEntityArcFurnace tileentity;
  7.  
  8.     public GuiArcFurnace(InventoryPlayer player, TileEntityArcFurnace tileentity) {
  9.         super(new ContainerArcFurnace(player, tileentity));
  10.         this.player = player;
  11.         this.tileentity = tileentity;
  12.     }
  13.  
  14.     @Override
  15.     protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
  16.         String tileName = this.tileentity.getBlockType().getLocalizedName();
  17.         this.fontRenderer.drawString(tileName, (this.xSize / 2 - this.fontRenderer.getStringWidth(tileName) / 2) + 3, 8, 4210752);
  18.         this.fontRenderer.drawString(this.player.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752);
  19.     }
  20.  
  21.     @Override
  22.     public void drawScreen(int mouseX, int mouseY, float partialTicks){
  23.         this.drawDefaultBackground();
  24.         super.drawScreen(mouseX, mouseY, partialTicks);
  25.         this.renderHoveredToolTip(mouseX, mouseY);
  26.     }
  27.  
  28.     @Override
  29.     protected void drawGuiContainerBackgroundLayer(float v, int i, int i1) {
  30.         GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
  31.         this.mc.getTextureManager().bindTexture(TEXTURES);
  32.         this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
  33.  
  34.         int progressMax = getRefineProgressScaled();
  35.         this.drawTexturedModalRect(this.guiLeft + 82, this.guiTop + 33, 176, 14, progressMax, 17);
  36.         if(progressMax == 34) {
  37.             this.drawTexturedModalRect(this.guiLeft + 82, this.guiTop + 33, 176, 14, 0, 17);
  38.         }
  39.  
  40.         int energy = getStoredEnergy();
  41.         this.fontRenderer.drawString("" + energy, this.guiLeft + 128 + (getEnergyPos(energy) * (5 + 1)), this.guiTop + this.ySize - 96 + 2, 4210752);
  42.         this.fontRenderer.drawString("kRF", this.guiLeft + 150, this.guiTop + this.ySize - 96 + 2, 4210752);
  43.     }
  44.  
  45.     private int getRefineProgressScaled() {
  46.         double progress = (double) tileentity.getActiveTime();
  47.         double end = (double) tileentity.getRefineTime();
  48.  
  49.         if(tileentity.getActiveTime() == 0) {
  50.             progress = 0.0;
  51.         }
  52.  
  53.         if(progress == 0) {
  54.             return 0;
  55.         }
  56.  
  57.         if(progress == end) {
  58.             return 34;
  59.         }
  60.  
  61.         return (int) ((progress / end) * 34);
  62.     }
  63.  
  64.     private int getStoredEnergy() {
  65.         return tileentity.getStoredEnergy() / 1000;
  66.     }
  67.  
  68.     private int getEnergyPos(int energy) {
  69.         if(energy >= 100) {
  70.             return 0;
  71.         } else if (energy >= 10) {
  72.             return 1;
  73.         } else {
  74.             return 2;
  75.         }
  76.     }
  77. }
  78.  
  79. //Container
  80. public class ContainerArcFurnace extends Container {
  81.     private final TileEntityArcFurnace tileentity;
  82.  
  83.     private int activeTime;
  84.     private int storedEnergy;
  85.  
  86.     public ContainerArcFurnace(InventoryPlayer player, TileEntityArcFurnace tileentity) {
  87.         this.tileentity = tileentity;
  88.  
  89.         this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 0, 25, 23)); //input1
  90.         this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 1, 50, 23)); //input2
  91.         this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 2, 37, 45)); //input3
  92.         this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 3, 90, 58)); //fuel
  93.         this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 4, 133, 33)); //output
  94.  
  95.         for(int y = 0; y < 3; y++) {
  96.             for(int x = 0; x < 9; x++) {
  97.                 this.addSlotToContainer(new Slot(player, x + y*9 + 9, 8 + x*18, 84 + y*18));
  98.             }
  99.         }
  100.  
  101.         for(int x = 0; x < 9; x++) {
  102.             this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142));
  103.         }
  104.     }
  105.  
  106.     @Override
  107.     public void detectAndSendChanges() {
  108.         super.detectAndSendChanges();
  109.  
  110.         for(int i = 0; i < this.listeners.size(); ++i) {
  111.             IContainerListener icontainerlistener = (IContainerListener)this.listeners.get(i);
  112.             if (this.activeTime != this.tileentity.getActiveTime()) {
  113.                 icontainerlistener.sendWindowProperty(this, 0, this.tileentity.getActiveTime());
  114.             }
  115.             if(this.storedEnergy != this.tileentity.getStoredEnergy()) {
  116.                 icontainerlistener.sendWindowProperty(this, 1, this.tileentity.getStoredEnergy());
  117.             }
  118.         }
  119.         this.activeTime = tileentity.getActiveTime();
  120.         this.storedEnergy = tileentity.getStoredEnergy();
  121.     }
  122.  
  123.     @Override
  124.     public void updateProgressBar(int id, int data) {
  125.         if(id == 0) {
  126.             this.tileentity.setActiveTime(data);
  127.         } else if(id == 1) {
  128.             this.tileentity.setStoredEnergy(data);
  129.         }
  130.     }
  131.  
  132.     @Override
  133.     public boolean canInteractWith(EntityPlayer player) {
  134.         return player.getDistanceSq(tileentity.getPos()) < 64;
  135.     }
  136.  
  137.     @Override
  138.     public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
  139.  
  140.         ItemStack slotStack = ItemStack.EMPTY;
  141.         Slot slot = inventorySlots.get(index);
  142.  
  143.         if(slot != null && slot.getHasStack()) {
  144.  
  145.         }
  146.  
  147.         return slotStack;
  148.     }
  149. }
  150.  
  151. //TileEntity
  152. public class TileEntityArcFurnace extends TileEntityMachineBase implements ITickable {
  153.  
  154.     private static final int IN1  = 0;
  155.     private static final int IN2  = 1;
  156.     private static final int IN3  = 2;
  157.     private static final int UPGRADE = 3;
  158.     private static final int OUT  = 4;
  159.  
  160.     public static final int MAX_POWER = 250000;
  161.     public static final int RF_PER_TICK = 50;
  162.     public static final int RF_PER_TICK_INPUT = 500;
  163.  
  164.     protected final ItemStackHandler inventory = new ItemStackHandler(5) {
  165.         public ItemStack insertItem(int index, ItemStack stack, boolean simulate) {
  166.             if(isItemValid(index, stack)) {
  167.                 return super.insertItem(index, stack, simulate);
  168.             }
  169.             return stack;
  170.         }
  171.         public boolean isItemValid(int index, ItemStack stack) {
  172.             if(index == 4) {
  173.                 return false;
  174.             } else if(index != 3) {
  175.                 return true;
  176.             } else {
  177.                 return TileEntityFurnace.isItemFuel(stack);
  178.             }
  179.         }
  180.     };
  181.  
  182.     public TileEntityArcFurnace() {
  183.         super(MAX_POWER, RF_PER_TICK, RF_PER_TICK_INPUT);
  184.         super.inventory = this.inventory;
  185.     }
  186.  
  187.     private boolean active;
  188.     private int activeTime;
  189.     private int storedEnergy = energyStorage.getEnergyStored();
  190.  
  191.     private int outQuantity;
  192.  
  193.     private RecipeExkva lastRecipe;
  194.  
  195.     @Override
  196.     public void update() {
  197.  
  198.         if(world.isRemote) { return; }
  199.  
  200.         storedEnergy = energyStorage.getEnergyStored();
  201.  
  202.         if(energyStorage.getEnergyStored() < RF_PER_TICK) {
  203.             return;
  204.         }
  205.  
  206.         if(this.canRefine() && !this.isActive()) {
  207.             this.activeTime = 0;
  208.             this.active = true;
  209.             world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, true));
  210.         }
  211.  
  212.         if(lastRecipe != null) {
  213.             ItemStack[] in = { inventory.getStackInSlot(IN1), inventory.getStackInSlot(IN2), inventory.getStackInSlot(IN3) };
  214.             if (!lastRecipe.matches(in)) {
  215.                 this.activeTime = 0;
  216.                 this.active = false;
  217.                 world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, false));
  218.             }
  219.         }
  220.  
  221.         if(this.isActive()) {
  222.             this.activeTime++;
  223.             energyStorage.consumePower(RF_PER_TICK);
  224.             if(this.activeTime == this.getRefineTime()) {
  225.                 this.refineItem();
  226.                 this.activeTime = 0;
  227.                 this.active = false;
  228.                 world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, false));
  229.             }
  230.         } else {
  231.             this.active = false;
  232.             this.activeTime = 0;
  233.  
  234.         }
  235.         markDirty();
  236.     }
  237.  
  238.     public void refineItem() {
  239.         ItemStack[] in = { inventory.getStackInSlot(IN1), inventory.getStackInSlot(IN2), inventory.getStackInSlot(IN3) };
  240.         ItemStack out = getResult()[0];
  241.  
  242.         ItemStack currentOut = inventory.getStackInSlot(OUT);
  243.         if(currentOut.isEmpty()) {
  244.             inventory.setStackInSlot(OUT, new ItemStack(out.getItem(), outQuantity));
  245.         } else if(inventory.getStackInSlot(OUT).getItem().equals(out.getItem())) {
  246.             currentOut.grow(outQuantity);
  247.         }
  248.  
  249.         for(ItemStack i : in) {
  250.             i.shrink(1);
  251.         }
  252.     }
  253.  
  254.     public int getActiveTime() {
  255.         return this.activeTime;
  256.     }
  257.  
  258.     public int getRefineTime() {
  259.         return 200;
  260.     }
  261.  
  262.     public static int getTicks() { return 200; }
  263.  
  264.     public ItemStackHandler getInventory() {
  265.         return inventory;
  266.     }
  267.  
  268.     public int getStoredEnergy() {
  269.         return storedEnergy;
  270.     }
  271.  
  272.     public void setActiveTime(int data) {
  273.         this.activeTime = data;
  274.     }
  275.  
  276.     public void setStoredEnergy(int data) {
  277.         storedEnergy = data;
  278.     }
  279.  
  280.     public boolean isActive() {
  281.         return active;
  282.     }
  283.  
  284.     protected boolean canRefine() {
  285.         return !this.getResult()[0].isEmpty() && (inventory.getStackInSlot(OUT).isEmpty() || inventory.getStackInSlot(OUT).getItem().equals(getResult()[0].getItem()));
  286.     }
  287.  
  288.     protected ItemStack[] getResult() {
  289.  
  290.         ItemStack[] in = { new ItemStack(inventory.getStackInSlot(IN1).getItem(), 1), new ItemStack(inventory.getStackInSlot(IN2).getItem(), 1), new ItemStack(inventory.getStackInSlot(IN3).getItem(), 1) };
  291.  
  292.         if(lastRecipe != null) {
  293.             if (lastRecipe.matches(in)) {
  294.                 return lastRecipe.getOutput();
  295.             }
  296.         }
  297.  
  298.         for(RecipeExkva recipe : Exkva.ARC_FURNACE_RECIPES) {
  299.             if(recipe.matches(in)) {
  300.                 lastRecipe = recipe;
  301.                 outQuantity = lastRecipe.getOutput()[0].getCount();
  302.                 return recipe.getOutput();
  303.             }
  304.         }
  305.  
  306.         return new ItemStack[]{ ItemStack.EMPTY };
  307.     }
  308.  
  309.     //----- Capability -----//
  310.  
  311.     RangedWrapper RIGHT = new RangedWrapper(inventory, OUT, OUT + 1);
  312.     RangedWrapper LEFT = new RangedWrapper(inventory, IN1, IN1 + 1);
  313.     RangedWrapper BACK = new RangedWrapper(inventory, IN2, IN2 + 1);
  314.     RangedWrapper BOTTOM = new RangedWrapper(inventory, IN3, IN3 + 1);
  315.  
  316.     @Override
  317.     public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
  318.         if(capability == CapabilityEnergy.ENERGY) {
  319.             return CapabilityEnergy.ENERGY.cast(energyStorage);
  320.         }
  321.         if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
  322.             IItemHandler handler;
  323.             EnumFacing face = world.getBlockState(pos).getValue(FACING);
  324.             if(facing == null) {
  325.                 handler = inventory;
  326.             }
  327.             if(facing == face.rotateY().getOpposite()) {
  328.                 handler = RIGHT;
  329.             } else if(facing == face.rotateY()) {
  330.                 handler = LEFT;
  331.             } else if(facing == face.getOpposite()) {
  332.                 handler = BACK;
  333.             } else if(facing == face.rotateAround(EnumFacing.Axis.X)) {
  334.                 handler = BOTTOM;
  335.             }
  336.  
  337.             else {
  338.                 handler = inventory;
  339.             }
  340.             return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(handler);
  341.         }
  342.         return super.getCapability(capability, facing);
  343.     }
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement