From dc160bbd678a5ba448212b5b1c0514b919a7f44e Mon Sep 17 00:00:00 2001 From: ProfessorProspector Date: Sun, 8 Jan 2017 21:58:02 -0800 Subject: [PATCH] started with one thing...then I ended up doing a lot of shit. --- .../java/techreborn/client/gui/GuiBase.java | 2 +- .../java/techreborn/client/gui/GuiBatbox.java | 8 +- .../client/gui/GuiBlastFurnace.java | 119 +++++++----------- .../techreborn/client/gui/GuiCentrifuge.java | 2 +- .../techreborn/client/gui/GuiCompressor.java | 54 +++----- .../client/gui/GuiElectricFurnace.java | 2 +- .../techreborn/client/gui/GuiExtractor.java | 53 +++----- .../techreborn/client/gui/GuiGenerator.java | 2 +- .../techreborn/client/gui/GuiGrinder.java | 53 +++----- .../java/techreborn/client/gui/GuiMFE.java | 10 +- .../java/techreborn/client/gui/GuiMFSU.java | 10 +- .../client/gui/GuiVacuumFreezer.java | 56 +++------ .../java/techreborn/client/gui/TRBuilder.java | 55 ++++++-- .../client/gui/widget/GuiButtonHologram.java | 51 ++++++++ .../compat/jei/TechRebornJeiPlugin.java | 20 +-- .../BlastFurnaceRecipeCategory.java | 13 +- .../BlastFurnaceRecipeWrapper.java | 33 +++-- .../centrifuge/CentrifugeRecipeWrapper.java | 7 +- .../compressor/CompressorRecipeCategory.java | 8 +- .../compressor/CompressorRecipeWrapper.java | 16 +-- .../extractor/ExtractorRecipeCategory.java | 9 +- .../jei/extractor/ExtractorRecipeWrapper.java | 16 +-- .../jei/grinder/GrinderRecipeCategory.java | 9 +- .../jei/grinder/GrinderRecipeWrapper.java | 16 +-- .../jei/scrapbox/ScrapboxRecipeCategory.java | 9 +- .../jei/scrapbox/ScrapboxRecipeWrapper.java | 19 --- .../VacuumFreezerRecipeCategory.java | 9 +- .../VacuumFreezerRecipeWrapper.java | 9 +- .../techreborn/tiles/TileDigitalChest.java | 3 +- .../techreborn/tiles/TileQuantumChest.java | 3 +- .../techreborn/tiles/TileTechStorageBase.java | 15 --- .../tiles/multiblock/TileBlastFurnace.java | 4 +- .../tiles/multiblock/TileVacuumFreezer.java | 6 +- .../techreborn/tiles/storage/TileBatBox.java | 13 +- .../techreborn/tiles/storage/TileMFE.java | 8 +- .../techreborn/tiles/storage/TileMFSU.java | 8 +- .../tiles/teir1/TileCompressor.java | 12 +- .../techreborn/tiles/teir1/TileExtractor.java | 11 +- .../techreborn/tiles/teir1/TileGrinder.java | 7 +- .../assets/techreborn/lang/en_us.lang | 2 +- .../techreborn/textures/gui/gui_sheet.png | Bin 11518 -> 12776 bytes .../assets/techreborn/textures/gui/jei.png | Bin 1898 -> 2276 bytes 42 files changed, 345 insertions(+), 417 deletions(-) create mode 100644 src/main/java/techreborn/client/gui/widget/GuiButtonHologram.java diff --git a/src/main/java/techreborn/client/gui/GuiBase.java b/src/main/java/techreborn/client/gui/GuiBase.java index 49f2c27ff..7b92885fe 100644 --- a/src/main/java/techreborn/client/gui/GuiBase.java +++ b/src/main/java/techreborn/client/gui/GuiBase.java @@ -112,7 +112,7 @@ public class GuiBase extends GuiContainer { factorX = guiLeft; factorY = guiTop; } - buttonList.add(new GuiButtonPowerBar(0, x + factorX, y + factorY, this, layer)); + buttonList.add(new GuiButtonPowerBar(id, x + factorX, y + factorY, this, layer)); } //TODO diff --git a/src/main/java/techreborn/client/gui/GuiBatbox.java b/src/main/java/techreborn/client/gui/GuiBatbox.java index 8cb59b1fb..b6652178d 100644 --- a/src/main/java/techreborn/client/gui/GuiBatbox.java +++ b/src/main/java/techreborn/client/gui/GuiBatbox.java @@ -2,9 +2,7 @@ package techreborn.client.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; - import reborncore.common.powerSystem.PowerSystem; - import techreborn.tiles.storage.TileBatBox; public class GuiBatbox extends GuiBase { @@ -30,9 +28,11 @@ public class GuiBatbox extends GuiBase { super.drawGuiContainerForegroundLayer(mouseX, mouseY); final Layer layer = Layer.FOREGROUND; - this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); + GlStateManager.pushMatrix(); GlStateManager.scale(0.6, 0.6, 5); this.drawCentredString(PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.tile.getEnergy()) + "/" + PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.tile.getMaxPower()) + " " + PowerSystem.getDisplayPower().abbreviation, 35, 0, 58, layer); - GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + + this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java index 090f59b65..d11e3bf5b 100644 --- a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java +++ b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java @@ -2,103 +2,74 @@ package techreborn.client.gui; import net.minecraft.block.state.IBlockState; import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.translation.I18n; - -import reborncore.client.gui.GuiUtil; import reborncore.client.multiblock.Multiblock; import reborncore.client.multiblock.MultiblockRenderEvent; import reborncore.client.multiblock.MultiblockSet; import reborncore.common.misc.Location; -import reborncore.common.multiblock.CoordTriplet; - +import techreborn.client.gui.widget.GuiButtonHologram; import techreborn.init.ModBlocks; import techreborn.proxies.ClientProxy; import techreborn.tiles.multiblock.TileBlastFurnace; import java.io.IOException; -public class GuiBlastFurnace extends GuiContainer { - - public static final ResourceLocation texture = new ResourceLocation("techreborn", - "textures/gui/industrial_blast_furnace.png"); - - TileBlastFurnace blastfurnace; +public class GuiBlastFurnace extends GuiBase { + public TileBlastFurnace tile; boolean hasMultiBlock; - public GuiBlastFurnace(final EntityPlayer player, final TileBlastFurnace blastFurnace) { - super(blastFurnace.createContainer(player)); - this.xSize = 176; - this.ySize = 167; - this.blastfurnace = blastFurnace; + public GuiBlastFurnace(final EntityPlayer player, final TileBlastFurnace tile) { + super(player, tile, tile.createContainer(player)); + this.tile = tile; } @Override public void initGui() { - - this.hasMultiBlock = this.blastfurnace.getCachedHeat() != 0; - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - final GuiButton button = new GuiButton(212, k + 4, l + 6, 20, 20, ""); - this.buttonList.add(button); super.initGui(); - final CoordTriplet coordinates = new CoordTriplet( - this.blastfurnace.getPos().getX() - EnumFacing.getFront(this.blastfurnace.getFacingInt()).getFrontOffsetX() * 2, - this.blastfurnace.getPos().getY() - 1, this.blastfurnace.getPos().getZ() - - EnumFacing.getFront(this.blastfurnace.getFacingInt()).getFrontOffsetZ() * 2); - if (coordinates.equals(MultiblockRenderEvent.anchor) && this.blastfurnace.getHeat() != 0) { - ClientProxy.multiblockRenderEvent.setMultiblock(null); - button.displayString = "B"; - } else { - button.displayString = "A"; - } + this.hasMultiBlock = this.tile.getCachedHeat() != 0; } @Override - protected void drawGuiContainerBackgroundLayer(final float p_146976_1_, final int p_146976_2_, final int p_146976_3_) { + protected void drawGuiContainerBackgroundLayer(final float f, final int mouseX, final int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(GuiBlastFurnace.texture); - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + final GuiBase.Layer layer = Layer.BACKGROUND; - if (this.blastfurnace.getCachedHeat() == 0) { - GuiUtil.drawTooltipBox(k + 30, l + 50 + 12 - 0, 114, 10); - this.fontRendererObj.drawString(I18n.translateToLocal("techreborn.message.missingmultiblock"), k + 38, - l + 52 + 12 - 0, -1); - } - - int j = 0; - this.mc.getTextureManager().bindTexture(GuiBlastFurnace.texture); - j = this.blastfurnace.getProgressScaled(24); - if (j > 0) { - this.drawTexturedModalRect(k + 64, l + 37, 176, 14, j + 1, 16); - } - - j = this.blastfurnace.getEnergyScaled(12); - if (j > 0) { - this.drawTexturedModalRect(k + 9, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + drawSlot(50, 27, layer); + drawSlot(50, 47, layer); + drawSlot(92, 36, layer); + drawSlot(110, 36, layer); + this.builder.drawJEIButton(this, 150, 4, layer); } @Override - protected void drawGuiContainerForegroundLayer(final int p_146979_1_, final int p_146979_2_) { - super.drawGuiContainerForegroundLayer(p_146979_1_, p_146979_2_); - final String name = I18n.translateToLocal("tile.techreborn.blastfurnace.name"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, - 4210752); - if (this.blastfurnace.getCachedHeat() != 0) { - this.fontRendererObj.drawString("Current Heat: " + this.blastfurnace.getCachedHeat(), 40, 60, 4210752); + protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; + + this.builder.drawProgressBar(this, this.tile.getProgressScaled(100), 100, 71, 40, mouseX, mouseY, TRBuilder.ProgressDirection.RIGHT, layer); + this.builder.drawMultiEnergyBar(this, 9, 18, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); + this.builder.drawBigHeatBar(this, 31, 71, tile.getCachedHeat(), 3230, layer); + addHologramButton(6, 4, 212, layer); + builder.drawHologramButton(this, 6, 4, mouseX, mouseY, layer); + } + + public void addHologramButton(int x, int y, int id, Layer layer) { + if (id == 0) + buttonList.clear(); + int factorX = 0; + int factorY = 0; + if (layer == Layer.BACKGROUND) { + factorX = guiLeft; + factorY = guiTop; } - this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory", new Object[0]), 8, - this.ySize - 96 + 2, 4210752); + buttonList.add(new GuiButtonHologram(id, x + factorX, y + factorY, this, layer)); } @Override @@ -106,8 +77,8 @@ public class GuiBlastFurnace extends GuiContainer { super.actionPerformed(button); if (button.id == 212) { if (ClientProxy.multiblockRenderEvent.currentMultiblock == null) { - {// This code here makes a basic multiblock and then sets to the - // selected one. + { + // This code here makes a basic multiblock and then sets to the selected one. final Multiblock multiblock = new Multiblock(); this.addComponent(0, 0, 0, ModBlocks.MACHINE_CASINGS.getDefaultState(), multiblock); this.addComponent(1, 0, 0, ModBlocks.MACHINE_CASINGS.getDefaultState(), multiblock); @@ -149,18 +120,16 @@ public class GuiBlastFurnace extends GuiContainer { final MultiblockSet set = new MultiblockSet(multiblock); ClientProxy.multiblockRenderEvent.setMultiblock(set); - ClientProxy.multiblockRenderEvent.parent = new Location(this.blastfurnace.getPos().getX(), - this.blastfurnace.getPos().getY(), this.blastfurnace.getPos().getZ(), this.blastfurnace.getWorld()); + ClientProxy.multiblockRenderEvent.parent = new Location(this.tile.getPos().getX(), + this.tile.getPos().getY(), this.tile.getPos().getZ(), this.tile.getWorld()); MultiblockRenderEvent.anchor = new BlockPos( - this.blastfurnace.getPos().getX() - - EnumFacing.getFront(this.blastfurnace.getFacingInt()).getFrontOffsetX() * 2, - this.blastfurnace.getPos().getY() - 1, this.blastfurnace.getPos().getZ() - - EnumFacing.getFront(this.blastfurnace.getFacingInt()).getFrontOffsetZ() * 2); + this.tile.getPos().getX() + - EnumFacing.getFront(this.tile.getFacingInt()).getFrontOffsetX() * 2, + this.tile.getPos().getY() - 1, this.tile.getPos().getZ() + - EnumFacing.getFront(this.tile.getFacingInt()).getFrontOffsetZ() * 2); } - button.displayString = "A"; } else { ClientProxy.multiblockRenderEvent.setMultiblock(null); - button.displayString = "B"; } } } diff --git a/src/main/java/techreborn/client/gui/GuiCentrifuge.java b/src/main/java/techreborn/client/gui/GuiCentrifuge.java index 64c14fe5b..edc151c33 100644 --- a/src/main/java/techreborn/client/gui/GuiCentrifuge.java +++ b/src/main/java/techreborn/client/gui/GuiCentrifuge.java @@ -27,7 +27,7 @@ public class GuiCentrifuge extends GuiBase { this.drawSlot(120, 44, layer); this.drawSlot(101, 63, layer); - this.builder.drawJEIButton(this, 150, 4, mouseX, mouseY, layer); + this.builder.drawJEIButton(this, 150, 4, layer); } @Override diff --git a/src/main/java/techreborn/client/gui/GuiCompressor.java b/src/main/java/techreborn/client/gui/GuiCompressor.java index b661b765c..cafef96d8 100644 --- a/src/main/java/techreborn/client/gui/GuiCompressor.java +++ b/src/main/java/techreborn/client/gui/GuiCompressor.java @@ -1,54 +1,36 @@ package techreborn.client.gui; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.translation.I18n; - import techreborn.tiles.teir1.TileCompressor; -public class GuiCompressor extends GuiContainer { +public class GuiCompressor extends GuiBase { - public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/compressor.png"); + TileCompressor tile; - TileCompressor compressor; - - public GuiCompressor(final EntityPlayer player, final TileCompressor compressor) { - super(compressor.createContainer(player)); - - this.xSize = 176; - this.ySize = 167; - this.compressor = compressor; + public GuiCompressor(final EntityPlayer player, final TileCompressor tile) { + super(player, tile, tile.createContainer(player)); + this.tile = tile; } @Override - protected void drawGuiContainerBackgroundLayer(final float p_146976_1_, final int p_146976_2_, final int p_146976_3_) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(GuiCompressor.texture); - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + protected void drawGuiContainerBackgroundLayer(final float f, final int mouseX, final int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND; - int j = 0; + //this.drawSlot(8, 72, layer); - j = this.compressor.getProgressScaled(24); - if (j > 0) { - this.drawTexturedModalRect(k + 78, l + 35, 176, 14, j + 1, 16); - } + this.drawSlot(55, 45, layer); + this.drawOutputSlot(101, 45, layer); - j = this.compressor.getEnergyScaled(12); - if (j > 0) { - this.drawTexturedModalRect(k + 24, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + this.builder.drawJEIButton(this, 150, 4, layer); } @Override - protected void drawGuiContainerForegroundLayer(final int p_146979_1_, final int p_146979_2_) { - final String name = I18n.translateToLocal("tile.techreborn.compressor.name"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, - 4210752); - this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory", new Object[0]), 8, - this.ySize - 96 + 2, 4210752); + protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; + + this.builder.drawProgressBar(this, this.tile.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, TRBuilder.ProgressDirection.RIGHT, layer); + this.builder.drawMultiEnergyBar(this, 9, 18, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiElectricFurnace.java b/src/main/java/techreborn/client/gui/GuiElectricFurnace.java index 2400e5efe..93523fa67 100644 --- a/src/main/java/techreborn/client/gui/GuiElectricFurnace.java +++ b/src/main/java/techreborn/client/gui/GuiElectricFurnace.java @@ -22,7 +22,7 @@ public class GuiElectricFurnace extends GuiBase { this.drawSlot(55, 45, layer); this.drawOutputSlot(101, 45, layer); - this.builder.drawJEIButton(this, 150, 4, mouseX, mouseY, layer); + this.builder.drawJEIButton(this, 150, 4, layer); } @Override diff --git a/src/main/java/techreborn/client/gui/GuiExtractor.java b/src/main/java/techreborn/client/gui/GuiExtractor.java index 0b0b19e56..6ecf64376 100644 --- a/src/main/java/techreborn/client/gui/GuiExtractor.java +++ b/src/main/java/techreborn/client/gui/GuiExtractor.java @@ -1,53 +1,36 @@ package techreborn.client.gui; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.translation.I18n; - import techreborn.tiles.teir1.TileExtractor; -public class GuiExtractor extends GuiContainer { +public class GuiExtractor extends GuiBase { - public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/compressor.png"); + TileExtractor tile; - TileExtractor extractor; - - public GuiExtractor(final EntityPlayer player, final TileExtractor extractor) { - super(extractor.createContainer(player)); - this.xSize = 176; - this.ySize = 167; - this.extractor = extractor; + public GuiExtractor(final EntityPlayer player, final TileExtractor tile) { + super(player, tile, tile.createContainer(player)); + this.tile = tile; } @Override - protected void drawGuiContainerBackgroundLayer(final float p_146976_1_, final int p_146976_2_, final int p_146976_3_) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(GuiExtractor.texture); - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + protected void drawGuiContainerBackgroundLayer(final float f, final int mouseX, final int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND; - int j = 0; + //this.drawSlot(8, 72, layer); - j = this.extractor.getProgressScaled(24); - if (j > 0) { - this.drawTexturedModalRect(k + 78, l + 35, 176, 14, j + 1, 16); - } + this.drawSlot(55, 45, layer); + this.drawOutputSlot(101, 45, layer); - j = this.extractor.getEnergyScaled(12); - if (j > 0) { - this.drawTexturedModalRect(k + 24, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + this.builder.drawJEIButton(this, 150, 4, layer); } @Override - protected void drawGuiContainerForegroundLayer(final int p_146979_1_, final int p_146979_2_) { - final String name = I18n.translateToLocal("tile.techreborn.extractor.name"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, - 4210752); - this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory", new Object[0]), 8, - this.ySize - 96 + 2, 4210752); + protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; + + this.builder.drawProgressBar(this, this.tile.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, TRBuilder.ProgressDirection.RIGHT, layer); + this.builder.drawMultiEnergyBar(this, 9, 18, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiGenerator.java b/src/main/java/techreborn/client/gui/GuiGenerator.java index 3d62cad3f..127ffd471 100644 --- a/src/main/java/techreborn/client/gui/GuiGenerator.java +++ b/src/main/java/techreborn/client/gui/GuiGenerator.java @@ -21,7 +21,7 @@ public class GuiGenerator extends GuiBase { this.drawSlot(80, 54, layer); - this.builder.drawJEIButton(this, 150, 4, mouseX, mouseY, layer); + this.builder.drawJEIButton(this, 150, 4, layer); } @Override diff --git a/src/main/java/techreborn/client/gui/GuiGrinder.java b/src/main/java/techreborn/client/gui/GuiGrinder.java index c2e444468..3e784f679 100644 --- a/src/main/java/techreborn/client/gui/GuiGrinder.java +++ b/src/main/java/techreborn/client/gui/GuiGrinder.java @@ -1,53 +1,36 @@ package techreborn.client.gui; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.translation.I18n; - import techreborn.tiles.teir1.TileGrinder; -public class GuiGrinder extends GuiContainer { +public class GuiGrinder extends GuiBase { - public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/grinder.png"); + TileGrinder tile; - TileGrinder grinder; - - public GuiGrinder(final EntityPlayer player, final TileGrinder grinder) { - super(grinder.createContainer(player)); - this.xSize = 176; - this.ySize = 167; - this.grinder = grinder; + public GuiGrinder(final EntityPlayer player, final TileGrinder tile) { + super(player, tile, tile.createContainer(player)); + this.tile = tile; } @Override - protected void drawGuiContainerBackgroundLayer(final float p_146976_1_, final int p_146976_2_, final int p_146976_3_) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(GuiGrinder.texture); - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + protected void drawGuiContainerBackgroundLayer(final float f, final int mouseX, final int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND; - int j = 0; + //this.drawSlot(8, 72, layer); - j = this.grinder.getProgressScaled(24); - if (j > 0) { - this.drawTexturedModalRect(k + 80, l + 36, 176, 14, j + 1, 16); - } + this.drawSlot(55, 45, layer); + this.drawOutputSlot(101, 45, layer); - j = this.grinder.getEnergyScaled(12); - if (j > 0) { - this.drawTexturedModalRect(k + 24, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + this.builder.drawJEIButton(this, 150, 4, layer); } @Override - protected void drawGuiContainerForegroundLayer(final int p_146979_1_, final int p_146979_2_) { - final String name = I18n.translateToLocal("tile.techreborn.grinder.name"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, - 4210752); - this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory", new Object[0]), 8, - this.ySize - 96 + 2, 4210752); + protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; + + this.builder.drawProgressBar(this, this.tile.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, TRBuilder.ProgressDirection.RIGHT, layer); + this.builder.drawMultiEnergyBar(this, 9, 18, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiMFE.java b/src/main/java/techreborn/client/gui/GuiMFE.java index 1cb8ca4a5..9634b8129 100644 --- a/src/main/java/techreborn/client/gui/GuiMFE.java +++ b/src/main/java/techreborn/client/gui/GuiMFE.java @@ -2,9 +2,7 @@ package techreborn.client.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; - import reborncore.common.powerSystem.PowerSystem; - import techreborn.tiles.storage.TileMFE; public class GuiMFE extends GuiBase { @@ -31,9 +29,11 @@ public class GuiMFE extends GuiBase { super.drawGuiContainerForegroundLayer(mouseX, mouseY); final Layer layer = Layer.FOREGROUND; - this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.mfe.getEnergy(), (int) this.mfe.getMaxPower(), mouseX, mouseY, 0, layer); - GlStateManager.scale(0.6, 0.6, 5); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6, 0.6, 1); this.drawCentredString(PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.mfe.getEnergy()) + "/" + PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.mfe.getMaxPower()) + " " + PowerSystem.getDisplayPower().abbreviation, 35, 0, 58, layer); - GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + + this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.mfe.getEnergy(), (int) this.mfe.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiMFSU.java b/src/main/java/techreborn/client/gui/GuiMFSU.java index 0af1425c4..0d8489789 100644 --- a/src/main/java/techreborn/client/gui/GuiMFSU.java +++ b/src/main/java/techreborn/client/gui/GuiMFSU.java @@ -2,9 +2,7 @@ package techreborn.client.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; - import reborncore.common.powerSystem.PowerSystem; - import techreborn.tiles.storage.TileMFSU; public class GuiMFSU extends GuiBase { @@ -31,9 +29,11 @@ public class GuiMFSU extends GuiBase { super.drawGuiContainerForegroundLayer(mouseX, mouseY); final Layer layer = Layer.FOREGROUND; - this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.mfsu.getEnergy(), (int) this.mfsu.getMaxPower(), mouseX, mouseY, 0, layer); - GlStateManager.scale(0.6, 0.6, 5); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6, 0.6, 1); this.drawCentredString(PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.mfsu.getEnergy()) + "/" + PowerSystem.getLocaliszedPowerFormattedNoSuffix((int) this.mfsu.getMaxPower()) + " " + PowerSystem.getDisplayPower().abbreviation, 35, 0, 58, layer); - GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + + this.builder.drawMultiEnergyBar(this, 81, 28, (int) this.mfsu.getEnergy(), (int) this.mfsu.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java b/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java index ea36a0913..665db5c29 100644 --- a/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java +++ b/src/main/java/techreborn/client/gui/GuiVacuumFreezer.java @@ -1,59 +1,37 @@ package techreborn.client.gui; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.translation.I18n; - import techreborn.tiles.multiblock.TileVacuumFreezer; -public class GuiVacuumFreezer extends GuiContainer { +public class GuiVacuumFreezer extends GuiBase { - public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/vacuum_freezer.png"); + TileVacuumFreezer tile; - TileVacuumFreezer freezer; - - public GuiVacuumFreezer(final EntityPlayer player, final TileVacuumFreezer freezer) { - super(freezer.createContainer(player)); - this.xSize = 176; - this.ySize = 167; - this.freezer = freezer; + public GuiVacuumFreezer(final EntityPlayer player, final TileVacuumFreezer tile) { + super(player, tile, tile.createContainer(player)); + this.tile = tile; } @Override - protected void drawGuiContainerBackgroundLayer(final float partialTicks, final int mouseX, final int mouseY) { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(GuiVacuumFreezer.texture); - final int k = (this.width - this.xSize) / 2; - final int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + protected void drawGuiContainerBackgroundLayer(final float f, final int mouseX, final int mouseY) { + super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.BACKGROUND; - int j = this.freezer.getProgressScaled(24); - if (j > 0) { - this.drawTexturedModalRect(k + 80, l + 37, 176, 14, j + 1, 16); - } + //this.drawSlot(8, 72, layer); - j = (int) (this.freezer.getEnergy() * 12f / this.freezer.getMaxPower()); - if (j > 0) { - this.drawTexturedModalRect(k + 26, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + this.drawSlot(55, 45, layer); + this.drawOutputSlot(101, 45, layer); - if (!this.freezer.getMultiBlock()) { - this.fontRendererObj.drawString(I18n.translateToLocal("techreborn.message.missingmultiblock"), k + 38, l + 52 + 12, -1); - } - - j = this.freezer.getEnergyScaled(12); - if (j > 0) { - this.drawTexturedModalRect(k + 26, l + 36 + 12 - j, 176, 12 - j, 14, j + 2); - } + this.builder.drawJEIButton(this, 150, 4, layer); } @Override protected void drawGuiContainerForegroundLayer(final int mouseX, final int mouseY) { - final String name = I18n.translateToLocal("tile.techreborn.vacuumfreezer.name"); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.translateToLocalFormatted("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + final GuiBase.Layer layer = GuiBase.Layer.FOREGROUND; + + this.builder.drawProgressBar(this, this.tile.getProgressScaled(100), 100, 76, 48, mouseX, mouseY, TRBuilder.ProgressDirection.RIGHT, layer); + this.builder.drawMultiEnergyBar(this, 9, 18, (int) this.tile.getEnergy(), (int) this.tile.getMaxPower(), mouseX, mouseY, 0, layer); } } diff --git a/src/main/java/techreborn/client/gui/TRBuilder.java b/src/main/java/techreborn/client/gui/TRBuilder.java index c9b5e79b0..9177ce8d9 100644 --- a/src/main/java/techreborn/client/gui/TRBuilder.java +++ b/src/main/java/techreborn/client/gui/TRBuilder.java @@ -5,11 +5,13 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; import net.minecraftforge.fml.client.config.GuiUtils; import net.minecraftforge.fml.common.Loader; import reborncore.client.guibuilder.GuiBuilder; import reborncore.common.powerSystem.PowerSystem; import techreborn.lib.ModInfo; +import techreborn.proxies.ClientProxy; import java.util.ArrayList; import java.util.List; @@ -92,26 +94,18 @@ public class TRBuilder extends GuiBuilder { } } - public void drawJEIButton(GuiBase gui, int x, int y, int mouseX, int mouseY, GuiBase.Layer layer) { + public void drawJEIButton(GuiBase gui, int x, int y, GuiBase.Layer layer) { if (Loader.isModLoaded("jei")) { if (layer == GuiBase.Layer.BACKGROUND) { x += gui.getGuiLeft(); y += gui.getGuiTop(); } - if (layer == GuiBase.Layer.FOREGROUND) { - mouseX -= gui.getGuiLeft(); - mouseY -= gui.getGuiTop(); - } gui.mc.getTextureManager().bindTexture(GUI_SHEET); - if (isInRect(x, y, 20, 12, mouseX, mouseY)) { - gui.drawTexturedModalRect(x, y, 184, 82, 20, 12); - } else { - gui.drawTexturedModalRect(x, y, 184, 70, 20, 12); - } + gui.drawTexturedModalRect(x, y, 184, 70, 20, 12); } } - public void drawBigBlueBar(GuiBase gui, int x, int y, int value, int max, int mouseX, int mouseY, String suffix, GuiBase.Layer layer) { + public void drawHologramButton(GuiBase gui, int x, int y, int mouseX, int mouseY, GuiBase.Layer layer) { if (layer == GuiBase.Layer.BACKGROUND) { x += gui.getGuiLeft(); y += gui.getGuiTop(); @@ -121,6 +115,26 @@ public class TRBuilder extends GuiBuilder { mouseY -= gui.getGuiTop(); } gui.mc.getTextureManager().bindTexture(GUI_SHEET); + if (ClientProxy.multiblockRenderEvent.currentMultiblock == null) { + gui.drawTexturedModalRect(x, y, 184, 94, 20, 12); + } else { + gui.drawTexturedModalRect(x, y, 184, 106, 20, 12); + } + if (isInRect(x, y, 20, 12, mouseX, mouseY)) { + List list = new ArrayList<>(); + list.add("Toggle Multiblock Hologram"); + GlStateManager.pushMatrix(); + net.minecraftforge.fml.client.config.GuiUtils.drawHoveringText(list, mouseX, mouseY, gui.width, gui.height, -1, gui.mc.fontRendererObj); + GlStateManager.popMatrix(); + } + } + + public void drawBigBlueBar(GuiBase gui, int x, int y, int value, int max, int mouseX, int mouseY, String suffix, GuiBase.Layer layer) { + if (layer == GuiBase.Layer.BACKGROUND) { + x += gui.getGuiLeft(); + y += gui.getGuiTop(); + } + gui.mc.getTextureManager().bindTexture(GUI_SHEET); if (!suffix.equals("")) { suffix = " " + suffix; } @@ -147,6 +161,25 @@ public class TRBuilder extends GuiBuilder { } } + public void drawBigHeatBar(GuiBase gui, int x, int y, int value, int max, GuiBase.Layer layer) { + if (layer == GuiBase.Layer.BACKGROUND) { + x += gui.getGuiLeft(); + y += gui.getGuiTop(); + } + gui.mc.getTextureManager().bindTexture(GUI_SHEET); + gui.drawTexturedModalRect(x, y, 0, 218, 114, 18); + if (value != 0) { + int j = (int) ((double) value / (double) max * 106); + if (j < 0) + j = 0; + gui.drawTexturedModalRect(x + 4, y + 4, 0, 246, j, 10); + gui.drawCentredString(value + " Heat", y + 5, 0xFFFFFF, layer); + + } else { + gui.drawCentredString(I18n.translateToLocal("techreborn.message.missingmultiblock"), y + 5, 0xC60000, layer); + } + } + public void drawBigBlueBar(GuiBase gui, int x, int y, int value, int max, int mouseX, int mouseY, GuiBase.Layer layer) { drawBigBlueBar(gui, x, y, value, max, mouseX, mouseY, "", layer); } diff --git a/src/main/java/techreborn/client/gui/widget/GuiButtonHologram.java b/src/main/java/techreborn/client/gui/widget/GuiButtonHologram.java new file mode 100644 index 000000000..761974142 --- /dev/null +++ b/src/main/java/techreborn/client/gui/widget/GuiButtonHologram.java @@ -0,0 +1,51 @@ +package techreborn.client.gui.widget; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.math.BlockPos; +import reborncore.client.multiblock.Multiblock; +import techreborn.client.gui.GuiBase; + +/** + * Created by Prospector + */ +public class GuiButtonHologram extends GuiButton { + + GuiBase.Layer layer; + GuiBase gui; + + public GuiButtonHologram(int buttonId, int x, int y, GuiBase gui, GuiBase.Layer layer) { + super(buttonId, x, y, 20, 12, ""); + this.layer = layer; + this.gui = gui; + } + + @Override + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) { + + if (layer == GuiBase.Layer.FOREGROUND) { + mouseX -= gui.getGuiLeft(); + mouseY -= gui.getGuiTop(); + } + + if (this.enabled && this.visible && mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height) { + return true; + } + return false; + } + + public void addComponent(final int x, final int y, final int z, final IBlockState blockState, final Multiblock multiblock) { + multiblock.addComponent(new BlockPos(x, y, z), blockState); + } + + @Override + public void drawButtonForegroundLayer(int mouseX, int mouseY) { + + } + + @Override + public void drawButton(Minecraft mc, int mouseX, int mouseY) { + + } +} diff --git a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java index 787337c90..63abb5139 100644 --- a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java +++ b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java @@ -206,13 +206,17 @@ public class TechRebornJeiPlugin extends BlankModPlugin { registry.addRecipeClickArea(GuiCentrifuge.class, 150, 4, 20, 12, RecipeCategoryUids.CENTRIFUGE); registry.addRecipeClickArea(GuiElectricFurnace.class, 150, 4, 20, 12, VanillaRecipeCategoryUid.SMELTING); registry.addRecipeClickArea(GuiGenerator.class, 150, 4, 20, 12, VanillaRecipeCategoryUid.FUEL); + registry.addRecipeClickArea(GuiExtractor.class, 150, 4, 20, 12, RecipeCategoryUids.EXTRACTOR); + registry.addRecipeClickArea(GuiCompressor.class, 150, 4, 20, 12, RecipeCategoryUids.COMPRESSOR); + registry.addRecipeClickArea(GuiGrinder.class, 150, 4, 20, 12, RecipeCategoryUids.GRINDER); + registry.addRecipeClickArea(GuiVacuumFreezer.class, 150, 4, 20, 12, RecipeCategoryUids.VACUUM_FREEZER); + registry.addRecipeClickArea(GuiBlastFurnace.class, 150, 4, 20, 12, RecipeCategoryUids.BLAST_FURNACE); //OLD ONES registry.addRecipeClickArea(GuiAlloyFurnace.class, 80, 35, 26, 20, RecipeCategoryUids.ALLOY_SMELTER, VanillaRecipeCategoryUid.FUEL); registry.addRecipeClickArea(GuiAlloySmelter.class, 80, 35, 26, 20, RecipeCategoryUids.ALLOY_SMELTER); registry.addRecipeClickArea(GuiAssemblingMachine.class, 85, 34, 24, 20, RecipeCategoryUids.ASSEMBLING_MACHINE); - registry.addRecipeClickArea(GuiBlastFurnace.class, 63, 36, 24, 15, RecipeCategoryUids.BLAST_FURNACE); registry.addRecipeClickArea(GuiChemicalReactor.class, 73, 39, 32, 12, RecipeCategoryUids.CHEMICAL_REACTOR); registry.addRecipeClickArea(GuiFusionReactor.class, 111, 34, 27, 19, RecipeCategoryUids.FUSION_REACTOR); registry.addRecipeClickArea(GuiIndustrialGrinder.class, 50, 35, 25, 16, RecipeCategoryUids.INDUSTRIAL_GRINDER); @@ -221,10 +225,6 @@ public class TechRebornJeiPlugin extends BlankModPlugin { registry.addRecipeClickArea(GuiIndustrialElectrolyzer.class, 72, 37, 33, 14, RecipeCategoryUids.INDUSTRIAL_ELECTROLYZER); registry.addRecipeClickArea(GuiRollingMachine.class, 89, 32, 26, 25, RecipeCategoryUids.ROLLING_MACHINE); - registry.addRecipeClickArea(GuiVacuumFreezer.class, 78, 36, 24, 16, RecipeCategoryUids.VACUUM_FREEZER); - registry.addRecipeClickArea(GuiGrinder.class, 78, 36, 24, 16, RecipeCategoryUids.GRINDER); - registry.addRecipeClickArea(GuiExtractor.class, 78, 36, 24, 16, RecipeCategoryUids.EXTRACTOR); - registry.addRecipeClickArea(GuiCompressor.class, 78, 36, 24, 16, RecipeCategoryUids.COMPRESSOR); registry.addRecipeClickArea(GuiIronFurnace.class, 78, 36, 24, 16, VanillaRecipeCategoryUid.SMELTING, VanillaRecipeCategoryUid.FUEL); @@ -237,8 +237,14 @@ public class TechRebornJeiPlugin extends BlankModPlugin { registry.addRecipeClickArea(GuiThermalGenerator.class, 79, 34, 18, 18, EFluidGenerator.THERMAL.getRecipeID()); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.IRON_FURNACE), VanillaRecipeCategoryUid.SMELTING, VanillaRecipeCategoryUid.FUEL); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.IRON_ALLOY_FURNACE), RecipeCategoryUids.ALLOY_SMELTER, VanillaRecipeCategoryUid.FUEL); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.SOLID_FUEL_GENEREATOR), VanillaRecipeCategoryUid.FUEL); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.COMPRESSOR), RecipeCategoryUids.COMPRESSOR); - registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.IRON_ALLOY_FURNACE), RecipeCategoryUids.ALLOY_SMELTER); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.EXTRACTOR), RecipeCategoryUids.EXTRACTOR); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.GRINDER), RecipeCategoryUids.GRINDER); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.VACUUM_FREEZER), RecipeCategoryUids.VACUUM_FREEZER); + registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.ELECTRIC_FURNACE), VanillaRecipeCategoryUid.SMELTING); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.ALLOY_SMELTER), RecipeCategoryUids.ALLOY_SMELTER); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.ASSEMBLY_MACHINE), RecipeCategoryUids.ASSEMBLING_MACHINE); @@ -246,10 +252,8 @@ public class TechRebornJeiPlugin extends BlankModPlugin { registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.INDUSTRIAL_CENTRIFUGE), RecipeCategoryUids.CENTRIFUGE); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.CHEMICAL_REACTOR), RecipeCategoryUids.CHEMICAL_REACTOR); - registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.EXTRACTOR), RecipeCategoryUids.EXTRACTOR); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.FUSION_CONTROL_COMPUTER), RecipeCategoryUids.FUSION_REACTOR); - registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.GRINDER), RecipeCategoryUids.GRINDER); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.IMPLOSION_COMPRESSOR), RecipeCategoryUids.IMPLOSION_COMPRESSOR); registry.addRecipeCategoryCraftingItem(new ItemStack(ModBlocks.INDUSTRIAL_ELECTROLYZER), diff --git a/src/main/java/techreborn/compat/jei/blastFurnace/BlastFurnaceRecipeCategory.java b/src/main/java/techreborn/compat/jei/blastFurnace/BlastFurnaceRecipeCategory.java index 68f82db64..831235314 100644 --- a/src/main/java/techreborn/compat/jei/blastFurnace/BlastFurnaceRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/blastFurnace/BlastFurnaceRecipeCategory.java @@ -6,14 +6,15 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; -import techreborn.client.gui.GuiBlastFurnace; import techreborn.compat.jei.RecipeCategoryUids; import techreborn.compat.jei.RecipeUtil; import javax.annotation.Nonnull; public class BlastFurnaceRecipeCategory extends BlankRecipeCategory { + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/jei.png"); private static final int[] INPUT_SLOTS = { 0, 1 }; private static final int[] OUTPUT_SLOTS = { 2, 3 }; @@ -21,7 +22,7 @@ public class BlastFurnaceRecipeCategory extends BlankRecipeCategory { + private static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/industrial_blast_furnace.png"); private final IDrawableAnimated progress; + private final IDrawable heat; public BlastFurnaceRecipeWrapper( @Nonnull @@ -21,22 +26,30 @@ public class BlastFurnaceRecipeWrapper extends BaseRecipeWrapper { - private final IDrawableAnimated progressRight; + private final IDrawableAnimated progress; public CentrifugeRecipeWrapper( @Nonnull @@ -26,14 +26,13 @@ public class CentrifugeRecipeWrapper extends BaseRecipeWrapper int ticksPerCycle = baseRecipe.tickTime() / 4; // speed up the animation - this.progressRight = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, - IDrawableAnimated.StartDirection.LEFT, false); + this.progress = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, IDrawableAnimated.StartDirection.LEFT, false); } @Override public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); - progressRight.draw(minecraft, 25, 26); + progress.draw(minecraft, 25, 26); int x = -10; int y1 = 1; diff --git a/src/main/java/techreborn/compat/jei/compressor/CompressorRecipeCategory.java b/src/main/java/techreborn/compat/jei/compressor/CompressorRecipeCategory.java index 172055240..7fa748d77 100644 --- a/src/main/java/techreborn/compat/jei/compressor/CompressorRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/compressor/CompressorRecipeCategory.java @@ -6,6 +6,7 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; import techreborn.client.gui.GuiCompressor; import techreborn.compat.jei.RecipeCategoryUids; @@ -17,11 +18,12 @@ public class CompressorRecipeCategory extends BlankRecipeCategory CompressorRecipe baseRecipe) { super(baseRecipe); IGuiHelper guiHelper = jeiHelpers.getGuiHelper(); - IDrawableStatic progressStatic = guiHelper.createDrawable(GuiCompressor.texture, 176, 14, 20, 11); + IDrawableStatic progressStatic = guiHelper.createDrawable(TRBuilder.GUI_SHEET, 100, 151, 16, 10); + + int ticksPerCycle = baseRecipe.tickTime(); // speed up the animation - int ticksPerCycle = baseRecipe.tickTime(); this.progress = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, IDrawableAnimated.StartDirection.LEFT, false); } @@ -31,13 +32,6 @@ public class CompressorRecipeWrapper extends BaseRecipeWrapper @Override public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); - progress.draw(minecraft, 25, 7); - - int x = -45; - int y = 4; - int lineHeight = minecraft.fontRendererObj.FONT_HEIGHT; - - minecraft.fontRendererObj.drawString("Time: " + baseRecipe.tickTime / 20 + " s", x, y, 0x444444); - minecraft.fontRendererObj.drawString("EU: " + baseRecipe.euPerTick + " EU/t", x, y += lineHeight, 0x444444); + progress.draw(minecraft, 25, 11); } } diff --git a/src/main/java/techreborn/compat/jei/extractor/ExtractorRecipeCategory.java b/src/main/java/techreborn/compat/jei/extractor/ExtractorRecipeCategory.java index c6ee59019..cd28c0c1b 100644 --- a/src/main/java/techreborn/compat/jei/extractor/ExtractorRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/extractor/ExtractorRecipeCategory.java @@ -6,14 +6,15 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; -import techreborn.client.gui.GuiExtractor; import techreborn.compat.jei.RecipeCategoryUids; import techreborn.compat.jei.RecipeUtil; import javax.annotation.Nonnull; public class ExtractorRecipeCategory extends BlankRecipeCategory { + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/jei.png"); private static final int[] INPUT_SLOTS = { 0 }; private static final int[] OUTPUT_SLOTS = { 1 }; @@ -21,7 +22,7 @@ public class ExtractorRecipeCategory extends BlankRecipeCategory { ExtractorRecipe baseRecipe) { super(baseRecipe); IGuiHelper guiHelper = jeiHelpers.getGuiHelper(); - IDrawableStatic progressStatic = guiHelper.createDrawable(GuiExtractor.texture, 176, 17, 22, 11); + IDrawableStatic progressStatic = guiHelper.createDrawable(TRBuilder.GUI_SHEET, 100, 151, 16, 10); + + int ticksPerCycle = baseRecipe.tickTime(); // speed up the animation - int ticksPerCycle = baseRecipe.tickTime(); this.progress = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, IDrawableAnimated.StartDirection.LEFT, false); } @@ -31,13 +32,6 @@ public class ExtractorRecipeWrapper extends BaseRecipeWrapper { @Override public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); - progress.draw(minecraft, 25, 7); - - int x = -45; - int y = 4; - int lineHeight = minecraft.fontRendererObj.FONT_HEIGHT; - - minecraft.fontRendererObj.drawString("Time: " + baseRecipe.tickTime / 20 + " s", x, y, 0x444444); - minecraft.fontRendererObj.drawString("EU: " + baseRecipe.euPerTick + " EU/t", x, y += lineHeight, 0x444444); + progress.draw(minecraft, 25, 11); } } diff --git a/src/main/java/techreborn/compat/jei/grinder/GrinderRecipeCategory.java b/src/main/java/techreborn/compat/jei/grinder/GrinderRecipeCategory.java index 584d3735a..e5d6f2293 100644 --- a/src/main/java/techreborn/compat/jei/grinder/GrinderRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/grinder/GrinderRecipeCategory.java @@ -6,14 +6,15 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; -import techreborn.client.gui.GuiGrinder; import techreborn.compat.jei.RecipeCategoryUids; import techreborn.compat.jei.RecipeUtil; import javax.annotation.Nonnull; public class GrinderRecipeCategory extends BlankRecipeCategory { + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/jei.png"); private static final int[] INPUT_SLOTS = { 0 }; private static final int[] OUTPUT_SLOTS = { 1 }; @@ -21,7 +22,7 @@ public class GrinderRecipeCategory extends BlankRecipeCategory { GrinderRecipe baseRecipe) { super(baseRecipe); IGuiHelper guiHelper = jeiHelpers.getGuiHelper(); - IDrawableStatic progressStatic = guiHelper.createDrawable(GuiGrinder.texture, 176, 14, 20, 11); + IDrawableStatic progressStatic = guiHelper.createDrawable(TRBuilder.GUI_SHEET, 100, 151, 16, 10); + + int ticksPerCycle = baseRecipe.tickTime(); // speed up the animation - int ticksPerCycle = baseRecipe.tickTime(); this.progress = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, IDrawableAnimated.StartDirection.LEFT, false); } @@ -31,13 +32,6 @@ public class GrinderRecipeWrapper extends BaseRecipeWrapper { @Override public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); - progress.draw(minecraft, 25, 7); - - int x = -45; - int y = 4; - int lineHeight = minecraft.fontRendererObj.FONT_HEIGHT; - - minecraft.fontRendererObj.drawString("Time: " + baseRecipe.tickTime / 20 + " s", x, y, 0x444444); - minecraft.fontRendererObj.drawString("EU: " + baseRecipe.euPerTick + " EU/t", x, y += lineHeight, 0x444444); + progress.draw(minecraft, 25, 11); } } diff --git a/src/main/java/techreborn/compat/jei/scrapbox/ScrapboxRecipeCategory.java b/src/main/java/techreborn/compat/jei/scrapbox/ScrapboxRecipeCategory.java index c4673a99e..fad667242 100644 --- a/src/main/java/techreborn/compat/jei/scrapbox/ScrapboxRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/scrapbox/ScrapboxRecipeCategory.java @@ -6,14 +6,15 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; -import techreborn.client.gui.GuiCompressor; import techreborn.compat.jei.RecipeCategoryUids; import techreborn.compat.jei.RecipeUtil; import javax.annotation.Nonnull; public class ScrapboxRecipeCategory extends BlankRecipeCategory { + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/jei.png"); private static final int[] INPUT_SLOTS = { 0 }; private static final int[] OUTPUT_SLOTS = { 1 }; @@ -21,7 +22,7 @@ public class ScrapboxRecipeCategory extends BlankRecipeCategory { - private final IDrawableAnimated progress; - public ScrapboxRecipeWrapper( @Nonnull IJeiHelpers jeiHelpers, @Nonnull ScrapboxRecipe baseRecipe) { super(baseRecipe); - IGuiHelper guiHelper = jeiHelpers.getGuiHelper(); - IDrawableStatic progressStatic = guiHelper.createDrawable(GuiCompressor.texture, 176, 14, 20, 11); - - int ticksPerCycle = baseRecipe.tickTime(); - this.progress = guiHelper.createAnimatedDrawable(progressStatic, ticksPerCycle, - IDrawableAnimated.StartDirection.LEFT, false); - } - - @Override - public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) { - super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); - progress.draw(minecraft, 25, 7); } } diff --git a/src/main/java/techreborn/compat/jei/vacuumFreezer/VacuumFreezerRecipeCategory.java b/src/main/java/techreborn/compat/jei/vacuumFreezer/VacuumFreezerRecipeCategory.java index f6cd4d63b..4c6ce4b24 100644 --- a/src/main/java/techreborn/compat/jei/vacuumFreezer/VacuumFreezerRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/vacuumFreezer/VacuumFreezerRecipeCategory.java @@ -6,14 +6,15 @@ import mezz.jei.api.gui.IGuiItemStackGroup; import mezz.jei.api.gui.IRecipeLayout; import mezz.jei.api.ingredients.IIngredients; import mezz.jei.api.recipe.BlankRecipeCategory; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; -import techreborn.client.gui.GuiVacuumFreezer; import techreborn.compat.jei.RecipeCategoryUids; import techreborn.compat.jei.RecipeUtil; import javax.annotation.Nonnull; public class VacuumFreezerRecipeCategory extends BlankRecipeCategory { + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/jei.png"); private static final int[] INPUT_SLOTS = { 0 }; private static final int[] OUTPUT_SLOTS = { 1 }; @@ -21,7 +22,7 @@ public class VacuumFreezerRecipeCategory extends BlankRecipeCategory info, final boolean isRealTile) { - info.add("Batbox"); - } - @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("batbox").player(player.inventory).inventory(8, 84).hotbar(8, 142).addInventory() - .tile(this).energySlot(0, 80, 17).energySlot(1, 80, 53).syncEnergyValue().addInventory().create(); + return new ContainerBuilder("batbox").player(player.inventory).inventory().hotbar().addInventory() + .tile(this).energySlot(0, 62, 45).energySlot(1, 98, 45).syncEnergyValue().addInventory().create(); } } diff --git a/src/main/java/techreborn/tiles/storage/TileMFE.java b/src/main/java/techreborn/tiles/storage/TileMFE.java index 50b4c5191..5c759eb60 100644 --- a/src/main/java/techreborn/tiles/storage/TileMFE.java +++ b/src/main/java/techreborn/tiles/storage/TileMFE.java @@ -1,9 +1,7 @@ package techreborn.tiles.storage; import net.minecraft.entity.player.EntityPlayer; - import reborncore.api.power.EnumPowerTier; - import techreborn.client.container.IContainerProvider; import techreborn.client.container.builder.BuiltContainer; import techreborn.client.container.builder.ContainerBuilder; @@ -20,9 +18,9 @@ public class TileMFE extends TileEnergyStorage implements IContainerProvider { @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("mfe").player(player.inventory).inventory(8, 84).hotbar(8, 142).armor() - .complete(44, 6).addArmor().addInventory().tile(this).energySlot(0, 80, 17).energySlot(1, 80, 53) - .syncEnergyValue().addInventory().create(); + return new ContainerBuilder("mfe").player(player.inventory).inventory().hotbar().armor() + .complete(8, 18).addArmor().addInventory().tile(this).energySlot(0, 62, 45).energySlot(1, 98, 45) + .syncEnergyValue().addInventory().create(); } } \ No newline at end of file diff --git a/src/main/java/techreborn/tiles/storage/TileMFSU.java b/src/main/java/techreborn/tiles/storage/TileMFSU.java index cf09f74a1..726b0a700 100644 --- a/src/main/java/techreborn/tiles/storage/TileMFSU.java +++ b/src/main/java/techreborn/tiles/storage/TileMFSU.java @@ -1,9 +1,7 @@ package techreborn.tiles.storage; import net.minecraft.entity.player.EntityPlayer; - import reborncore.api.power.EnumPowerTier; - import techreborn.client.container.IContainerProvider; import techreborn.client.container.builder.BuiltContainer; import techreborn.client.container.builder.ContainerBuilder; @@ -20,8 +18,8 @@ public class TileMFSU extends TileEnergyStorage implements IContainerProvider { @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("mfsu").player(player.inventory).inventory(8, 84).hotbar(8, 142).armor() - .complete(44, 6).addArmor().addInventory().tile(this).energySlot(0, 80, 17).energySlot(1, 80, 53) - .syncEnergyValue().addInventory().create(); + return new ContainerBuilder("mfsu").player(player.inventory).inventory().hotbar().armor() + .complete(8, 18).addArmor().addInventory().tile(this).energySlot(0, 62, 45).energySlot(1, 98, 45) + .syncEnergyValue().addInventory().create(); } } \ No newline at end of file diff --git a/src/main/java/techreborn/tiles/teir1/TileCompressor.java b/src/main/java/techreborn/tiles/teir1/TileCompressor.java index 7397dfa71..c63fff7b2 100644 --- a/src/main/java/techreborn/tiles/teir1/TileCompressor.java +++ b/src/main/java/techreborn/tiles/teir1/TileCompressor.java @@ -3,7 +3,6 @@ package techreborn.tiles.teir1; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; - import reborncore.api.power.EnumPowerTier; import reborncore.api.recipe.IRecipeCrafterProvider; import reborncore.api.tile.IInventoryProvider; @@ -11,7 +10,6 @@ import reborncore.common.IWrenchable; import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.Inventory; - import techreborn.api.Reference; import techreborn.client.container.IContainerProvider; import techreborn.client.container.builder.BuiltContainer; @@ -19,8 +17,7 @@ import techreborn.client.container.builder.ContainerBuilder; import techreborn.init.ModBlocks; import techreborn.utils.upgrade.UpgradeHandler; -public class TileCompressor extends TilePowerAcceptor -implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerProvider { +public class TileCompressor extends TilePowerAcceptor implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerProvider { public Inventory inventory = new Inventory(6, "TileCompressor", 64, this); @@ -145,9 +142,8 @@ implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerPr @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("compressor").player(player.inventory).inventory(8, 84).hotbar(8, 142) - .addInventory().tile(this).slot(0, 56, 34).outputSlot(1, 116, 34).upgradeSlot(2, 152, 8) - .upgradeSlot(3, 152, 26).upgradeSlot(4, 152, 44).upgradeSlot(5, 152, 62).syncEnergyValue() - .syncCrafterValue().addInventory().create(); + return new ContainerBuilder("compressor").player(player.inventory).inventory().hotbar().addInventory() + .tile(this).slot(0, 55, 45).outputSlot(1, 101, 45).syncEnergyValue().syncCrafterValue().addInventory() + .create(); } } diff --git a/src/main/java/techreborn/tiles/teir1/TileExtractor.java b/src/main/java/techreborn/tiles/teir1/TileExtractor.java index 868eef701..0fec7d940 100644 --- a/src/main/java/techreborn/tiles/teir1/TileExtractor.java +++ b/src/main/java/techreborn/tiles/teir1/TileExtractor.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; - import reborncore.api.power.EnumPowerTier; import reborncore.api.recipe.IRecipeCrafterProvider; import reborncore.api.tile.IInventoryProvider; @@ -12,7 +11,6 @@ import reborncore.common.IWrenchable; import reborncore.common.powerSystem.TilePowerAcceptor; import reborncore.common.recipes.RecipeCrafter; import reborncore.common.util.Inventory; - import techreborn.api.Reference; import techreborn.client.container.IContainerProvider; import techreborn.client.container.builder.BuiltContainer; @@ -21,7 +19,7 @@ import techreborn.init.ModBlocks; import techreborn.utils.upgrade.UpgradeHandler; public class TileExtractor extends TilePowerAcceptor -implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerProvider { + implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerProvider { public Inventory inventory = new Inventory(6, "TileExtractor", 64, this); @@ -160,10 +158,9 @@ implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerPr @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("extractor").player(player.inventory).inventory(8, 84).hotbar(8, 142).addInventory() - .tile(this).slot(0, 56, 34).outputSlot(1, 116, 34).upgradeSlot(2, 152, 8).upgradeSlot(3, 152, 26) - .upgradeSlot(4, 152, 44).upgradeSlot(5, 152, 62).syncEnergyValue().syncCrafterValue().addInventory() - .create(); + return new ContainerBuilder("extractor").player(player.inventory).inventory().hotbar().addInventory() + .tile(this).slot(0, 55, 45).outputSlot(1, 101, 45).syncEnergyValue().syncCrafterValue().addInventory() + .create(); } } diff --git a/src/main/java/techreborn/tiles/teir1/TileGrinder.java b/src/main/java/techreborn/tiles/teir1/TileGrinder.java index a0604af28..1fd823dbc 100644 --- a/src/main/java/techreborn/tiles/teir1/TileGrinder.java +++ b/src/main/java/techreborn/tiles/teir1/TileGrinder.java @@ -168,9 +168,8 @@ implements IWrenchable, IInventoryProvider, IRecipeCrafterProvider, IContainerPr @Override public BuiltContainer createContainer(final EntityPlayer player) { - return new ContainerBuilder("grinder").player(player.inventory).inventory(8, 84).hotbar(8, 142).addInventory() - .tile(this).slot(0, 56, 34).outputSlot(1, 116, 34).upgradeSlot(2, 152, 8).upgradeSlot(3, 152, 26) - .upgradeSlot(4, 152, 44).upgradeSlot(5, 152, 62).syncEnergyValue().syncCrafterValue().addInventory() - .create(); + return new ContainerBuilder("grinder").player(player.inventory).inventory().hotbar().addInventory() + .tile(this).slot(0, 55, 45).outputSlot(1, 101, 45).syncEnergyValue().syncCrafterValue().addInventory() + .create(); } } diff --git a/src/main/resources/assets/techreborn/lang/en_us.lang b/src/main/resources/assets/techreborn/lang/en_us.lang index 78d901d8b..50623b9ee 100644 --- a/src/main/resources/assets/techreborn/lang/en_us.lang +++ b/src/main/resources/assets/techreborn/lang/en_us.lang @@ -16,7 +16,7 @@ tile.techreborn.rollingmachine.name=Rolling Machine tile.techreborn.machineCasing.standard.name=Standard Machine Casing tile.techreborn.machineCasing.reinforced.name=Reinforced Machine Casing tile.techreborn.machineCasing.advanced.name=Advanced Machine Casing -tile.techreborn.blastfurnace.name=Industrial Blast Furnace +tile.techreborn.blastfurnace.name=Blast Furnace tile.techreborn.alloysmelter.name=Electric Alloy Furnace tile.techreborn.matterfabricator.name=Matter Fabricator tile.techreborn.implosioncompressor.name=Implosion Compressor diff --git a/src/main/resources/assets/techreborn/textures/gui/gui_sheet.png b/src/main/resources/assets/techreborn/textures/gui/gui_sheet.png index 904d3c8ddcca90152a3b2ab25684f6ce8736d217..b56382f1cf67d7df4a9a358040e57a60352c6a22 100644 GIT binary patch literal 12776 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 literal 1898 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6Kav4M@OO4qV9awC zctjR6FbEZbFyrStReeA~_7YEDSM~>7g8Tx;ZKv0QiWSKc*NBqf{Irtt#G+J&g2c?c z61}|C5(N`I13g27wOm{W7#NuLc)B=-RK&fVbujO?fyjYfYyST~J@ayb*K^AVp~bCf zlf=V8dGecXJXaGkrL>fI(+X!o3oagqzWfH-0T(xNd9T zVt3$WEibn=*a91_&&wX~WT?@+cjHf5%G+a4HJ|w&pUha1u;J&EXTfJ?_c7hM{Xy*< z!)e}iOBn4$C$Q}hwa93wuRpER{^NrqbI##s?9;1RA5<0eFx0HS`{S>1{sx&xhuwJ( z*s;G(*4@5N{1U@y*>!Umr%A_nGS@6(urbhJ;I1!tz|jBqU-oB^WyOqT2ll+YA={9@ zT)Mv2H8$~H$s7Iy*3H)X#z4<*c(axvr#7JB^*s4S410`$nnCWK&d~p_ws^8K%MDjX zi|;T$HvHY|gUUT4_|N-IG|2xAe`_s)zA<03lp(^Kal