Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // GUI
- public class GuiArcFurnace extends GuiContainer {
- private static final ResourceLocation TEXTURES = new ResourceLocation(Exkva.MODID + ":textures/gui/container/arc_furnace.png");
- private final InventoryPlayer player;
- private final TileEntityArcFurnace tileentity;
- public GuiArcFurnace(InventoryPlayer player, TileEntityArcFurnace tileentity) {
- super(new ContainerArcFurnace(player, tileentity));
- this.player = player;
- this.tileentity = tileentity;
- }
- @Override
- protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
- String tileName = this.tileentity.getBlockType().getLocalizedName();
- this.fontRenderer.drawString(tileName, (this.xSize / 2 - this.fontRenderer.getStringWidth(tileName) / 2) + 3, 8, 4210752);
- this.fontRenderer.drawString(this.player.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752);
- }
- @Override
- public void drawScreen(int mouseX, int mouseY, float partialTicks){
- this.drawDefaultBackground();
- super.drawScreen(mouseX, mouseY, partialTicks);
- this.renderHoveredToolTip(mouseX, mouseY);
- }
- @Override
- protected void drawGuiContainerBackgroundLayer(float v, int i, int i1) {
- GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
- this.mc.getTextureManager().bindTexture(TEXTURES);
- this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
- int progressMax = getRefineProgressScaled();
- this.drawTexturedModalRect(this.guiLeft + 82, this.guiTop + 33, 176, 14, progressMax, 17);
- if(progressMax == 34) {
- this.drawTexturedModalRect(this.guiLeft + 82, this.guiTop + 33, 176, 14, 0, 17);
- }
- int energy = getStoredEnergy();
- this.fontRenderer.drawString("" + energy, this.guiLeft + 128 + (getEnergyPos(energy) * (5 + 1)), this.guiTop + this.ySize - 96 + 2, 4210752);
- this.fontRenderer.drawString("kRF", this.guiLeft + 150, this.guiTop + this.ySize - 96 + 2, 4210752);
- }
- private int getRefineProgressScaled() {
- double progress = (double) tileentity.getActiveTime();
- double end = (double) tileentity.getRefineTime();
- if(tileentity.getActiveTime() == 0) {
- progress = 0.0;
- }
- if(progress == 0) {
- return 0;
- }
- if(progress == end) {
- return 34;
- }
- return (int) ((progress / end) * 34);
- }
- private int getStoredEnergy() {
- return tileentity.getStoredEnergy() / 1000;
- }
- private int getEnergyPos(int energy) {
- if(energy >= 100) {
- return 0;
- } else if (energy >= 10) {
- return 1;
- } else {
- return 2;
- }
- }
- }
- //Container
- public class ContainerArcFurnace extends Container {
- private final TileEntityArcFurnace tileentity;
- private int activeTime;
- private int storedEnergy;
- public ContainerArcFurnace(InventoryPlayer player, TileEntityArcFurnace tileentity) {
- this.tileentity = tileentity;
- this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 0, 25, 23)); //input1
- this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 1, 50, 23)); //input2
- this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 2, 37, 45)); //input3
- this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 3, 90, 58)); //fuel
- this.addSlotToContainer(new SlotItemHandler(tileentity.getInventory(), 4, 133, 33)); //output
- 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 icontainerlistener = (IContainerListener)this.listeners.get(i);
- if (this.activeTime != this.tileentity.getActiveTime()) {
- icontainerlistener.sendWindowProperty(this, 0, this.tileentity.getActiveTime());
- }
- if(this.storedEnergy != this.tileentity.getStoredEnergy()) {
- icontainerlistener.sendWindowProperty(this, 1, this.tileentity.getStoredEnergy());
- }
- }
- this.activeTime = tileentity.getActiveTime();
- this.storedEnergy = tileentity.getStoredEnergy();
- }
- @Override
- public void updateProgressBar(int id, int data) {
- if(id == 0) {
- this.tileentity.setActiveTime(data);
- } else if(id == 1) {
- this.tileentity.setStoredEnergy(data);
- }
- }
- @Override
- public boolean canInteractWith(EntityPlayer player) {
- return player.getDistanceSq(tileentity.getPos()) < 64;
- }
- @Override
- public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) {
- ItemStack slotStack = ItemStack.EMPTY;
- Slot slot = inventorySlots.get(index);
- if(slot != null && slot.getHasStack()) {
- }
- return slotStack;
- }
- }
- //TileEntity
- public class TileEntityArcFurnace extends TileEntityMachineBase implements ITickable {
- private static final int IN1 = 0;
- private static final int IN2 = 1;
- private static final int IN3 = 2;
- private static final int UPGRADE = 3;
- private static final int OUT = 4;
- public static final int MAX_POWER = 250000;
- public static final int RF_PER_TICK = 50;
- public static final int RF_PER_TICK_INPUT = 500;
- protected final ItemStackHandler inventory = new ItemStackHandler(5) {
- public ItemStack insertItem(int index, ItemStack stack, boolean simulate) {
- if(isItemValid(index, stack)) {
- return super.insertItem(index, stack, simulate);
- }
- return stack;
- }
- public boolean isItemValid(int index, ItemStack stack) {
- if(index == 4) {
- return false;
- } else if(index != 3) {
- return true;
- } else {
- return TileEntityFurnace.isItemFuel(stack);
- }
- }
- };
- public TileEntityArcFurnace() {
- super(MAX_POWER, RF_PER_TICK, RF_PER_TICK_INPUT);
- super.inventory = this.inventory;
- }
- private boolean active;
- private int activeTime;
- private int storedEnergy = energyStorage.getEnergyStored();
- private int outQuantity;
- private RecipeExkva lastRecipe;
- @Override
- public void update() {
- if(world.isRemote) { return; }
- storedEnergy = energyStorage.getEnergyStored();
- if(energyStorage.getEnergyStored() < RF_PER_TICK) {
- return;
- }
- if(this.canRefine() && !this.isActive()) {
- this.activeTime = 0;
- this.active = true;
- world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, true));
- }
- if(lastRecipe != null) {
- ItemStack[] in = { inventory.getStackInSlot(IN1), inventory.getStackInSlot(IN2), inventory.getStackInSlot(IN3) };
- if (!lastRecipe.matches(in)) {
- this.activeTime = 0;
- this.active = false;
- world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, false));
- }
- }
- if(this.isActive()) {
- this.activeTime++;
- energyStorage.consumePower(RF_PER_TICK);
- if(this.activeTime == this.getRefineTime()) {
- this.refineItem();
- this.activeTime = 0;
- this.active = false;
- world.setBlockState(pos, world.getBlockState(pos).withProperty(MachineArcFurnace.ACTIVE, false));
- }
- } else {
- this.active = false;
- this.activeTime = 0;
- }
- markDirty();
- }
- public void refineItem() {
- ItemStack[] in = { inventory.getStackInSlot(IN1), inventory.getStackInSlot(IN2), inventory.getStackInSlot(IN3) };
- ItemStack out = getResult()[0];
- ItemStack currentOut = inventory.getStackInSlot(OUT);
- if(currentOut.isEmpty()) {
- inventory.setStackInSlot(OUT, new ItemStack(out.getItem(), outQuantity));
- } else if(inventory.getStackInSlot(OUT).getItem().equals(out.getItem())) {
- currentOut.grow(outQuantity);
- }
- for(ItemStack i : in) {
- i.shrink(1);
- }
- }
- public int getActiveTime() {
- return this.activeTime;
- }
- public int getRefineTime() {
- return 200;
- }
- public static int getTicks() { return 200; }
- public ItemStackHandler getInventory() {
- return inventory;
- }
- public int getStoredEnergy() {
- return storedEnergy;
- }
- public void setActiveTime(int data) {
- this.activeTime = data;
- }
- public void setStoredEnergy(int data) {
- storedEnergy = data;
- }
- public boolean isActive() {
- return active;
- }
- protected boolean canRefine() {
- return !this.getResult()[0].isEmpty() && (inventory.getStackInSlot(OUT).isEmpty() || inventory.getStackInSlot(OUT).getItem().equals(getResult()[0].getItem()));
- }
- protected ItemStack[] getResult() {
- ItemStack[] in = { new ItemStack(inventory.getStackInSlot(IN1).getItem(), 1), new ItemStack(inventory.getStackInSlot(IN2).getItem(), 1), new ItemStack(inventory.getStackInSlot(IN3).getItem(), 1) };
- if(lastRecipe != null) {
- if (lastRecipe.matches(in)) {
- return lastRecipe.getOutput();
- }
- }
- for(RecipeExkva recipe : Exkva.ARC_FURNACE_RECIPES) {
- if(recipe.matches(in)) {
- lastRecipe = recipe;
- outQuantity = lastRecipe.getOutput()[0].getCount();
- return recipe.getOutput();
- }
- }
- return new ItemStack[]{ ItemStack.EMPTY };
- }
- //----- Capability -----//
- RangedWrapper RIGHT = new RangedWrapper(inventory, OUT, OUT + 1);
- RangedWrapper LEFT = new RangedWrapper(inventory, IN1, IN1 + 1);
- RangedWrapper BACK = new RangedWrapper(inventory, IN2, IN2 + 1);
- RangedWrapper BOTTOM = new RangedWrapper(inventory, IN3, IN3 + 1);
- @Override
- public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
- if(capability == CapabilityEnergy.ENERGY) {
- return CapabilityEnergy.ENERGY.cast(energyStorage);
- }
- if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
- IItemHandler handler;
- EnumFacing face = world.getBlockState(pos).getValue(FACING);
- if(facing == null) {
- handler = inventory;
- }
- if(facing == face.rotateY().getOpposite()) {
- handler = RIGHT;
- } else if(facing == face.rotateY()) {
- handler = LEFT;
- } else if(facing == face.getOpposite()) {
- handler = BACK;
- } else if(facing == face.rotateAround(EnumFacing.Axis.X)) {
- handler = BOTTOM;
- }
- else {
- handler = inventory;
- }
- return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(handler);
- }
- return super.getCapability(capability, facing);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement