From 34d56d76f961d426872ddaa331bed9de1df65e44 Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 01:56:32 -0500 Subject: [PATCH 1/8] pyrolyse bonuses --- .../electric/MetaTileEntityPyrolyseOven.java | 69 ++++++++++++++++++- .../resources/assets/gregtech/lang/en_us.lang | 5 +- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java index e243109f777..63c8cadda98 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java @@ -1,11 +1,14 @@ package gregtech.common.metatileentities.multi.electric; +import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.multiblock.IMultiblockPart; import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; import gregtech.api.pattern.BlockPattern; import gregtech.api.pattern.FactoryBlockPattern; +import gregtech.api.pattern.PatternMatchContext; +import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMaps; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; @@ -13,14 +16,24 @@ import gregtech.common.blocks.BlockWireCoil.CoilType; import gregtech.common.blocks.MetaBlocks; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; public class MetaTileEntityPyrolyseOven extends RecipeMapMultiblockController { + private int coilTier; + public MetaTileEntityPyrolyseOven(ResourceLocation metaTileEntityId) { super(metaTileEntityId, RecipeMaps.PYROLYSE_RECIPES); + this.recipeMapWorkable = new PyrolyseOvenWorkableHandler(this); } @Override @@ -37,7 +50,7 @@ protected BlockPattern createStructurePattern() { .aisle("XXX", "XSX", "XXX") .where('S', selfPredicate()) .where('X', states(getCasingState()).or(autoAbilities())) - .where('C', states(MetaBlocks.WIRE_COIL.getState(CoilType.CUPRONICKEL))) + .where('C', heatingCoils()) .where('#', air()) .build(); } @@ -57,6 +70,39 @@ protected ICubeRenderer getFrontOverlay() { return Textures.PYROLYSE_OVEN_OVERLAY; } + @Override + protected void formStructure(PatternMatchContext context) { + super.formStructure(context); + Object type = context.get("CoilType"); + if (type instanceof CoilType) + this.coilTier = ((CoilType) type).ordinal(); + else + this.coilTier = 0; + } + + @Override + protected void addDisplayText(List textList) { + super.addDisplayText(textList); + if (isStructureFormed()) + textList.add(new TextComponentTranslation("gregtech.multiblock.pyrolyse_oven.speed", coilTier == 0 ? 75 : 50 * (coilTier + 1))); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + tooltip.add(I18n.format("gregtech.machine.pyrolyse_oven.tooltip.1")); + } + + @Override + public void invalidateStructure() { + super.invalidateStructure(); + this.coilTier = -1; + } + + protected int getCoilTier() { + return this.coilTier; + } + @Override public boolean hasMufflerMechanics() { return true; @@ -66,4 +112,25 @@ public boolean hasMufflerMechanics() { public boolean canBeDistinct() { return true; } + + @SuppressWarnings("InnerClassMayBeStatic") + public class PyrolyseOvenWorkableHandler extends MultiblockRecipeLogic { + + public PyrolyseOvenWorkableHandler(RecipeMapMultiblockController tileEntity) { + super(tileEntity); + } + + @Override + protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { + int[] overclock = super.performOverclocking(recipe, negativeEU); + + int coilTier = ((MetaTileEntityPyrolyseOven) metaTileEntity).getCoilTier(); + if (coilTier == 0) overclock[1] *= 5.0 / 4; // 25% slower with cupronickel (coilTier = 0) + else overclock[1] *= 2.0f / (coilTier + 1); // each coil above kanthal (coilTier = 1) is 50% faster + + overclock[1] = Math.max(1, overclock[1]); + + return overclock; + } + } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index afdaa122a77..a0044a1086c 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -47,7 +47,7 @@ gregtech.multiblock.primitive_blast_furnace.bronze.description=The Primitive Bla gregtech.multiblock.coke_oven.description=The Coke Oven is a multiblock structure used for getting coke and creosote in the early game. It doesn't require fuel and has an internal tank of 32 buckets for creosote. Its inventory can be accessed via its Coke Oven Hatch. gregtech.multiblock.vacuum_freezer.description=The Vacuum Freezer is a multiblock structure mainly used for freezing Hot Ingots into regular Ingots. However, it can also freeze other substances, such as Water. gregtech.multiblock.implosion_compressor.description=The Implosion Compressor is a multiblock structure that uses explosives to turn gem dusts into their corresponding gems. -gregtech.multiblock.pyrolyse_oven.description=The Pyrolyze Oven is a multiblock structure used for turning Logs into Charcoal and Creosote Oil, or Ash and Heavy Oil. +gregtech.multiblock.pyrolyse_oven.description=The Pyrolyse Oven is a multiblock structure used for turning Logs into Charcoal and Creosote Oil, or Ash and Heavy Oil. gregtech.multiblock.cracker.description=The Cracker Unit is a multiblock structure used for turning Light and Heavy Fuel into their Cracked variants. gregtech.multiblock.large_combustion_engine.description=The Large Combustion Engine is a multiblock structure that acts as a Combustion Generator for EV power. gregtech.multiblock.distillation_tower.description=The Distillation Tower is a multiblock structure used for distilling the various types of Oil and some of their byproducts. Each layer must have exactly one output hatch, starting from the second one. The bottom layer can output items and insert fluids in any position. @@ -3654,6 +3654,7 @@ gregtech.machine.electric_blast_furnace.tooltip.3=For every voltage tier above gregtech.machine.vacuum_freezer.name=Vacuum Freezer gregtech.machine.implosion_compressor.name=Implosion Compressor gregtech.machine.pyrolyse_oven.name=Pyrolyse Oven +gregtech.machine.pyrolyse_oven.tooltip.1=§aCupronickel Coils§7 are §a25%%§7 slower. Every coil after §aKanthal§7 increases speed by §a50%%§7. gregtech.machine.distillation_tower.name=Distillation Tower gregtech.machine.multi_furnace.name=Multi Smelter gregtech.machine.cracker.name=Cracker Unit @@ -4085,6 +4086,8 @@ gregtech.multiblock.large_miner.radius=Radius: %d Blocks gregtech.multiblock.large_miner.errorradius=Cannot change radius while working! gregtech.multiblock.large_miner.needsfluid=Needs Drilling Fluid +gregtech.multiblock.pyrolyse_oven.speed=Current Speed: §a%s%% + gregtech.command.usage=Usage: /gregtech gregtech.command.worldgen.usage=Usage: /gregtech worldgen gregtech.command.worldgen.reload.usage=Usage: /gregtech worldgen reload From d35821dfeab4eb2605cf5f6adfe35166922faa0a Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 02:13:28 -0500 Subject: [PATCH 2/8] cracker bonuses --- .../electric/MetaTileEntityCrackingUnit.java | 74 +++++++++++++++++-- .../resources/assets/gregtech/lang/en_us.lang | 7 +- 2 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java index cbf9fe9ff42..c9001a56738 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java @@ -1,11 +1,14 @@ package gregtech.common.metatileentities.multi.electric; +import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.multiblock.IMultiblockPart; import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; import gregtech.api.pattern.BlockPattern; import gregtech.api.pattern.FactoryBlockPattern; +import gregtech.api.pattern.PatternMatchContext; +import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMaps; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; @@ -13,14 +16,24 @@ import gregtech.common.blocks.BlockWireCoil.CoilType; import gregtech.common.blocks.MetaBlocks; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; public class MetaTileEntityCrackingUnit extends RecipeMapMultiblockController { + private int coilTier; + public MetaTileEntityCrackingUnit(ResourceLocation metaTileEntityId) { super(metaTileEntityId, RecipeMaps.CRACKING_RECIPES); + this.recipeMapWorkable = new CrackingUnitWorkableHandler(this); } @Override @@ -35,9 +48,9 @@ protected BlockPattern createStructurePattern() { .aisle("HCHCH", "H###H", "HCHCH") .aisle("HCHCH", "HCOCH", "HCHCH") .where('O', selfPredicate()) - .where('H', states(getCasingState()).setMinGlobalLimited(20).or(autoAbilities())) + .where('H', states(getCasingState()).setMinGlobalLimited(12).or(autoAbilities())) .where('#', air()) - .where('C', states(getCoilState())) + .where('C', heatingCoils()) .build(); } @@ -46,17 +59,66 @@ public ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) { return Textures.CLEAN_STAINLESS_STEEL_CASING; } - protected IBlockState getCoilState() { - return MetaBlocks.WIRE_COIL.getState(CoilType.CUPRONICKEL); - } - protected IBlockState getCasingState() { return MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.STAINLESS_CLEAN); } + @Override + protected void addDisplayText(List textList) { + super.addDisplayText(textList); + if (isStructureFormed()) + textList.add(new TextComponentTranslation("gregtech.multiblock.cracking_unit.energy", 100 - 5 * coilTier)); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + tooltip.add(I18n.format("gregtech.machine.cracker.tooltip.1")); + } + @Nonnull @Override protected ICubeRenderer getFrontOverlay() { return Textures.CRACKING_UNIT_OVERLAY; } + + @Override + protected void formStructure(PatternMatchContext context) { + super.formStructure(context); + Object type = context.get("CoilType"); + if (type instanceof CoilType) + this.coilTier = ((CoilType) type).ordinal(); + else + this.coilTier = 0; + } + + @Override + public void invalidateStructure() { + super.invalidateStructure(); + this.coilTier = -1; + } + + protected int getCoilTier() { + return this.coilTier; + } + + @SuppressWarnings("InnerClassMayBeStatic") + public class CrackingUnitWorkableHandler extends MultiblockRecipeLogic { + + public CrackingUnitWorkableHandler(RecipeMapMultiblockController tileEntity) { + super(tileEntity); + } + + @Override + protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { + int[] overclock = super.performOverclocking(recipe, negativeEU); + + int coilTier = ((MetaTileEntityCrackingUnit) metaTileEntity).getCoilTier(); + overclock[0] *= 1.0f - coilTier / 20; // each coil above cupronickel (coilTier = 0) uses 5% less energy + + overclock[0] = Math.max(1, overclock[0]); + + return overclock; + } + } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index a0044a1086c..c70d83e1806 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -3657,7 +3657,8 @@ gregtech.machine.pyrolyse_oven.name=Pyrolyse Oven gregtech.machine.pyrolyse_oven.tooltip.1=§aCupronickel Coils§7 are §a25%%§7 slower. Every coil after §aKanthal§7 increases speed by §a50%%§7. gregtech.machine.distillation_tower.name=Distillation Tower gregtech.machine.multi_furnace.name=Multi Smelter -gregtech.machine.cracker.name=Cracker Unit +gregtech.machine.cracker.name=Crackering Unit +gregtech.machine.cracker.tooltip.1=Every coil after §aCupronickel§7 reduces energy usage by §a5%%§7. gregtech.machine.coke_oven.name=Coke Oven gregtech.machine.coke_oven_hatch.name=Coke Oven Hatch gregtech.machine.coke_oven_hatch.tooltip=Allows automation access to coke oven. Must be centered on coke oven side. @@ -4086,7 +4087,9 @@ gregtech.multiblock.large_miner.radius=Radius: %d Blocks gregtech.multiblock.large_miner.errorradius=Cannot change radius while working! gregtech.multiblock.large_miner.needsfluid=Needs Drilling Fluid -gregtech.multiblock.pyrolyse_oven.speed=Current Speed: §a%s%% +gregtech.multiblock.pyrolyse_oven.speed=Processing Speed: %s%% + +gregtech.multiblock.cracking_unit.energy=Energy Usage: %s%% gregtech.command.usage=Usage: /gregtech gregtech.command.worldgen.usage=Usage: /gregtech worldgen From 698c33998e12b9e3dbd06ff5f8997b6872a19e84 Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 02:54:27 -0500 Subject: [PATCH 3/8] lcr bonuses --- .../impl/MultiblockRecipeLogic.java | 2 +- .../electric/MetaTileEntityCrackingUnit.java | 6 +- .../MetaTileEntityLargeChemicalReactor.java | 154 ++++++++++++------ .../electric/MetaTileEntityPyrolyseOven.java | 5 +- .../resources/assets/gregtech/lang/en_us.lang | 11 +- .../impl/MultiblockRecipeLogicTest.java | 4 +- .../logic/IParallelableRecipeLogicTest.java | 8 +- 7 files changed, 129 insertions(+), 61 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index e8ed3ea4870..67d8c58ee44 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -298,7 +298,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return Math.max(getEnergyContainer().getInputVoltage(), getEnergyContainer().getOutputVoltage()); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java index c9001a56738..74b32aee3fa 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityCrackingUnit.java @@ -103,7 +103,7 @@ protected int getCoilTier() { } @SuppressWarnings("InnerClassMayBeStatic") - public class CrackingUnitWorkableHandler extends MultiblockRecipeLogic { + private class CrackingUnitWorkableHandler extends MultiblockRecipeLogic { public CrackingUnitWorkableHandler(RecipeMapMultiblockController tileEntity) { super(tileEntity); @@ -114,8 +114,10 @@ protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { int[] overclock = super.performOverclocking(recipe, negativeEU); int coilTier = ((MetaTileEntityCrackingUnit) metaTileEntity).getCoilTier(); - overclock[0] *= 1.0f - coilTier / 20; // each coil above cupronickel (coilTier = 0) uses 5% less energy + if (coilTier == -1) + return overclock; + overclock[0] *= 1.0f - coilTier / 20; // each coil above cupronickel (coilTier = 0) uses 5% less energy overclock[0] = Math.max(1, overclock[0]); return overclock; diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java index e952c51d819..606f72402ea 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java @@ -1,15 +1,14 @@ package gregtech.common.metatileentities.multi.electric; +import gregtech.api.GTValues; import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.multiblock.IMultiblockPart; import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; -import gregtech.api.pattern.BlockPattern; -import gregtech.api.pattern.FactoryBlockPattern; -import gregtech.api.pattern.MultiblockShapeInfo; -import gregtech.api.pattern.TraceabilityPredicate; +import gregtech.api.pattern.*; import gregtech.api.recipes.RecipeMaps; +import gregtech.api.util.GTUtility; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; import gregtech.common.ConfigHolder; @@ -23,6 +22,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import javax.annotation.Nonnull; @@ -32,9 +33,11 @@ public class MetaTileEntityLargeChemicalReactor extends RecipeMapMultiblockController { + private int coilTier; + public MetaTileEntityLargeChemicalReactor(ResourceLocation metaTileEntityId) { super(metaTileEntityId, RecipeMaps.LARGE_CHEMICAL_RECIPES); - this.recipeMapWorkable = new MultiblockRecipeLogic(this, true); + this.recipeMapWorkable = new LargeChemicalReactorWorkableHandler(this); } @Override @@ -53,7 +56,7 @@ protected BlockPattern createStructurePattern() { .where('S', selfPredicate()) .where('X', casing.or(abilities)) .where('P', states(getPipeCasingState())) - .where('C', states(MetaBlocks.WIRE_COIL.getState(BlockWireCoil.CoilType.CUPRONICKEL)).setMinGlobalLimited(1).setMaxGlobalLimited(1) + .where('C', heatingCoils().setMinGlobalLimited(1).setMaxGlobalLimited(1) .or(abilities) .or(casing)) .build(); @@ -62,47 +65,50 @@ protected BlockPattern createStructurePattern() { @Override public List getMatchingShapes() { ArrayList shapeInfo = new ArrayList<>(); - MultiblockShapeInfo.Builder baseBuilder = MultiblockShapeInfo.builder() - .where('S', MetaTileEntities.LARGE_CHEMICAL_REACTOR, EnumFacing.SOUTH) - .where('X', MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING)) - .where('P', MetaBlocks.BOILER_CASING.getState(BlockBoilerCasing.BoilerCasingType.POLYTETRAFLUOROETHYLENE_PIPE)) - .where('C', MetaBlocks.WIRE_COIL.getState(BlockWireCoil.CoilType.CUPRONICKEL)) - .where('I', MetaTileEntities.ITEM_IMPORT_BUS[3], EnumFacing.SOUTH) - .where('E', MetaTileEntities.ENERGY_INPUT_HATCH[3], EnumFacing.NORTH) - .where('O', MetaTileEntities.ITEM_EXPORT_BUS[3], EnumFacing.SOUTH) - .where('F', MetaTileEntities.FLUID_IMPORT_HATCH[3], EnumFacing.SOUTH) - .where('H', MetaTileEntities.FLUID_EXPORT_HATCH[3], EnumFacing.SOUTH) - .where('M', () -> ConfigHolder.machines.enableMaintenance ? MetaTileEntities.MAINTENANCE_HATCH : MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING), EnumFacing.SOUTH); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XCX", "XXX") - .aisle("XXX", "XPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "XPX", "XCX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XCX", "XPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "CPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "XPC", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); + for (BlockWireCoil.CoilType coilType : BlockWireCoil.CoilType.values()) { + MultiblockShapeInfo.Builder baseBuilder = MultiblockShapeInfo.builder() + .where('S', MetaTileEntities.LARGE_CHEMICAL_REACTOR, EnumFacing.SOUTH) + .where('X', MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING)) + .where('P', MetaBlocks.BOILER_CASING.getState(BlockBoilerCasing.BoilerCasingType.POLYTETRAFLUOROETHYLENE_PIPE)) + .where('C', MetaBlocks.WIRE_COIL.getState(coilType)) + .where('I', MetaTileEntities.ITEM_IMPORT_BUS[3], EnumFacing.SOUTH) + .where('E', MetaTileEntities.ENERGY_INPUT_HATCH[3], EnumFacing.NORTH) + .where('O', MetaTileEntities.ITEM_EXPORT_BUS[3], EnumFacing.SOUTH) + .where('F', MetaTileEntities.FLUID_IMPORT_HATCH[3], EnumFacing.SOUTH) + .where('H', MetaTileEntities.FLUID_EXPORT_HATCH[3], EnumFacing.SOUTH) + .where('M', () -> ConfigHolder.machines.enableMaintenance ? MetaTileEntities.MAINTENANCE_HATCH : MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING), EnumFacing.SOUTH); + + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XCX", "XXX") + .aisle("XXX", "XPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "XPX", "XCX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XCX", "XPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "CPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "XPC", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + } return shapeInfo; } @@ -124,6 +130,7 @@ protected IBlockState getPipeCasingState() { public void addInformation(ItemStack stack, @Nullable World player, List tooltip, boolean advanced) { super.addInformation(stack, player, tooltip, advanced); tooltip.add(I18n.format("gregtech.machine.perfect_oc")); + tooltip.add(I18n.format("gregtech.machine.large_chemical_reactor.tooltip.1")); } @Nonnull @@ -132,4 +139,57 @@ protected ICubeRenderer getFrontOverlay() { return Textures.LARGE_CHEMICAL_REACTOR_OVERLAY; } + @Override + protected void formStructure(PatternMatchContext context) { + super.formStructure(context); + Object type = context.get("CoilType"); + if (type instanceof BlockWireCoil.CoilType) + this.coilTier = ((BlockWireCoil.CoilType) type).ordinal(); + else + this.coilTier = 0; + } + + @Override + protected void addDisplayText(List textList) { + super.addDisplayText(textList); + if (isStructureFormed() && coilTier != -1) { + long maxVoltage = this.recipeMapWorkable.getMaxVoltage(); + textList.add(new TextComponentTranslation("gregtech.multiblock.large_chemical_reactor.voltage_tier", maxVoltage, GTValues.VN[GTUtility.getTierByVoltage(maxVoltage)])); + if (GTValues.HT) + textList.add(new TextComponentTranslation("gregtech.machine.large_chemical_reactor.tooltip.ht")); + } + } + + @Override + public void invalidateStructure() { + super.invalidateStructure(); + this.coilTier = -1; + } + + private int getCoilTier() { + return this.coilTier; + } + + @SuppressWarnings("InnerClassMayBeStatic") + private static class LargeChemicalReactorWorkableHandler extends MultiblockRecipeLogic { + + public LargeChemicalReactorWorkableHandler(RecipeMapMultiblockController tileEntity) { + super(tileEntity, true); + } + + @Override + public long getMaxVoltage() { + int coilTier = ((MetaTileEntityLargeChemicalReactor) metaTileEntity).getCoilTier(); + if (coilTier == -1) + return 0; + + // for GTValues.HT = true, allow any voltage with the best coil + long maxVoltage = super.getMaxVoltage(); + if (GTValues.HT && coilTier == BlockWireCoil.CoilType.TRITANIUM.ordinal()) + return maxVoltage; + + // coil tier is equal to the maximum allowed voltage, + 1 to avoid ULV + return Math.min(maxVoltage, GTValues.V[coilTier + 1]); + } + } } diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java index 63c8cadda98..62a32ae2db1 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPyrolyseOven.java @@ -114,7 +114,7 @@ public boolean canBeDistinct() { } @SuppressWarnings("InnerClassMayBeStatic") - public class PyrolyseOvenWorkableHandler extends MultiblockRecipeLogic { + private class PyrolyseOvenWorkableHandler extends MultiblockRecipeLogic { public PyrolyseOvenWorkableHandler(RecipeMapMultiblockController tileEntity) { super(tileEntity); @@ -125,6 +125,9 @@ protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { int[] overclock = super.performOverclocking(recipe, negativeEU); int coilTier = ((MetaTileEntityPyrolyseOven) metaTileEntity).getCoilTier(); + if (coilTier == -1) + return overclock; + if (coilTier == 0) overclock[1] *= 5.0 / 4; // 25% slower with cupronickel (coilTier = 0) else overclock[1] *= 2.0f / (coilTier + 1); // each coil above kanthal (coilTier = 1) is 50% faster diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index c70d83e1806..fdb756ba6d5 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -2220,7 +2220,7 @@ tile.boiler_casing.bronze_pipe.name=Bronze Pipe Casing tile.boiler_casing.steel_pipe.name=Steel Pipe Casing tile.boiler_casing.titanium_pipe.name=Titanium Pipe Casing tile.boiler_casing.tungstensteel_pipe.name=Tungstensteel Pipe Casing -tile.boiler_casing.polytetrafluoroethylene_pipe.name=Polytetrafluoroethylene (PTFE) Pipe Casing +tile.boiler_casing.polytetrafluoroethylene_pipe.name=PTFE Pipe Casing #Firebox casing blocks tile.boiler_casing.bronze_firebox.name=Bronze Firebox Casing @@ -2238,7 +2238,7 @@ tile.metal_casing.steel_solid.name=Solid Steel Machine Casing tile.metal_casing.stainless_clean.name=Clean Stainless Steel Casing tile.metal_casing.titanium_stable.name=Stable Titanium Machine Casing tile.metal_casing.tungstensteel_robust.name=Robust Tungstensteel Machine Casing -tile.metal_casing.ptfe_inert.name=Chemically Inert Polytetrafluoroethylene (PTFE) Machine Casing +tile.metal_casing.ptfe_inert.name=Chemically Inert PTFE Machine Casing # Machine casing blocks tile.machine_casing.ultra_low_voltage.name=ULV Machine Casing @@ -3662,6 +3662,9 @@ gregtech.machine.cracker.tooltip.1=Every coil after §aCupronickel§7 reduces en gregtech.machine.coke_oven.name=Coke Oven gregtech.machine.coke_oven_hatch.name=Coke Oven Hatch gregtech.machine.coke_oven_hatch.tooltip=Allows automation access to coke oven. Must be centered on coke oven side. +gregtech.machine.large_chemical_reactor.name=Large Chemical Reactor +gregtech.machine.large_chemical_reactor.tooltip.1=§aMaximum voltage§7 is equal to the multiblock's coil tier. +gregtech.machine.large_chemical_reactor.tooltip.ht=§Tritanium Coils§7 coils allow any voltage. @@ -3698,8 +3701,6 @@ gregtech.machine.miner.multi.description=A multiblock mining machine that covers gregtech.machine.miner.fluid_usage=Consumes §b%dmb§7 of §e%s§7 per tick. Each overclock doubles the fluid consumption. gregtech.machine.miner.overclock=Requires §e%s§7 power. Overclocks up to §e%s§7. -gregtech.machine.large_chemical_reactor.name=Large Chemical Reactor - gregtech.machine.central_monitor.name=Central Monitor gregtech.multiblock.central_monitor.low_power=Low Power gregtech.multiblock.central_monitor.height=Screen Height: @@ -4091,6 +4092,8 @@ gregtech.multiblock.pyrolyse_oven.speed=Processing Speed: %s%% gregtech.multiblock.cracking_unit.energy=Energy Usage: %s%% +gregtech.multiblock.large_chemical_reactor.voltage_tier=Energy Limit: %s EU/t (%s) + gregtech.command.usage=Usage: /gregtech gregtech.command.worldgen.usage=Usage: /gregtech worldgen gregtech.command.worldgen.reload.usage=Usage: /gregtech worldgen reload diff --git a/src/test/java/gregtech/api/capability/impl/MultiblockRecipeLogicTest.java b/src/test/java/gregtech/api/capability/impl/MultiblockRecipeLogicTest.java index bc39950346c..a09dc476ca0 100644 --- a/src/test/java/gregtech/api/capability/impl/MultiblockRecipeLogicTest.java +++ b/src/test/java/gregtech/api/capability/impl/MultiblockRecipeLogicTest.java @@ -201,7 +201,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } @@ -457,7 +457,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } diff --git a/src/test/java/gregtech/api/recipes/logic/IParallelableRecipeLogicTest.java b/src/test/java/gregtech/api/recipes/logic/IParallelableRecipeLogicTest.java index e21b9c5d036..2e5f49eea71 100644 --- a/src/test/java/gregtech/api/recipes/logic/IParallelableRecipeLogicTest.java +++ b/src/test/java/gregtech/api/recipes/logic/IParallelableRecipeLogicTest.java @@ -417,7 +417,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } }; @@ -489,7 +489,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } }; @@ -550,7 +550,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } }; @@ -614,7 +614,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - protected long getMaxVoltage() { + public long getMaxVoltage() { return 32; } }; From 28a245d379fa3ffc6784e9415ddfbfc3cfaea795 Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 03:38:46 -0500 Subject: [PATCH 4/8] better coil tooltip --- .../gregtech/common/blocks/BlockWireCoil.java | 27 +++++++++++++++---- .../resources/assets/gregtech/lang/en_us.lang | 18 +++++++++---- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/main/java/gregtech/common/blocks/BlockWireCoil.java b/src/main/java/gregtech/common/blocks/BlockWireCoil.java index 8eb5d2845fb..1e60bd64264 100644 --- a/src/main/java/gregtech/common/blocks/BlockWireCoil.java +++ b/src/main/java/gregtech/common/blocks/BlockWireCoil.java @@ -1,5 +1,6 @@ package gregtech.common.blocks; +import gregtech.api.GTValues; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; import net.minecraft.block.SoundType; @@ -14,6 +15,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -36,16 +38,31 @@ public BlockWireCoil() { public void addInformation(@Nonnull ItemStack itemStack, @Nullable World worldIn, List lines, @Nonnull ITooltipFlag tooltipFlag) { super.addInformation(itemStack, worldIn, lines, tooltipFlag); + // noinspection rawtypes, unchecked VariantItemBlock itemBlock = (VariantItemBlock) itemStack.getItem(); IBlockState stackState = itemBlock.getBlockState(itemStack); CoilType coilType = getState(stackState); - lines.add(I18n.format("tile.wire_coil.tooltip_ebf")); lines.add(I18n.format("tile.wire_coil.tooltip_heat", coilType.coilTemperature)); - lines.add(""); - lines.add(I18n.format("tile.wire_coil.tooltip_smelter")); - lines.add(I18n.format("tile.wire_coil.tooltip_level", coilType.level)); - lines.add(I18n.format("tile.wire_coil.tooltip_discount", coilType.energyDiscount)); + + if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + int coilTier = coilType.ordinal(); + lines.add(I18n.format("tile.wire_coil.tooltip_smelter")); + lines.add(I18n.format("tile.wire_coil.tooltip_parallel_smelter", coilType.level * 32)); + lines.add(I18n.format("tile.wire_coil.tooltip_energy_smelter", Math.max(1, 16 / coilType.energyDiscount))); + lines.add(I18n.format("tile.wire_coil.tooltip_pyro")); + lines.add(I18n.format("tile.wire_coil.tooltip_speed_pyro", coilTier == 0 ? 75 : 50 * (coilTier + 1))); + lines.add(I18n.format("tile.wire_coil.tooltip_cracking")); + lines.add(I18n.format("tile.wire_coil.tooltip_energy_cracking", 100 - 5 * coilTier)); + lines.add(I18n.format("tile.wire_coil.tooltip_reactor")); + if (GTValues.HT && coilType == CoilType.TRITANIUM) { + lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor_any")); + } else { + lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor", GTValues.VN[coilTier + 1])); + } + } else { + lines.add(I18n.format("gregtech.tooltip.hold_shift")); + } } @Override diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index fdb756ba6d5..41bf7c0aa4c 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -68,6 +68,8 @@ gregtech.multiblock.primitive_water_pump.extra2=Hatch Multipliers:/n Pump Hatch item.invalid.name=Invalid item fluid.empty=Empty +gregtech.tooltip.hold_shift=Hold §aShift§7 for more info + metaitem.generic.fluid_container.tooltip=%,d/%,dL %s metaitem.generic.fluid_container.tooltip_empty=§9No Fluids Contained metaitem.generic.electric_item.tooltip=%,d/%,d EU - Tier §e%s @@ -2184,11 +2186,17 @@ tile.casing.ev=EV Machine Casing tile.casing.iv=IV Machine Casing # Wire coil blocks -tile.wire_coil.tooltip_ebf=When used in §aElectric Blast Furnace§7: -tile.wire_coil.tooltip_heat= Base Heating Capacity: §e%,dK -tile.wire_coil.tooltip_smelter=When used in §aMulti Smelter§7: -tile.wire_coil.tooltip_level= Level: §e%,d -tile.wire_coil.tooltip_discount= Energy Discount: §a%,dx +tile.wire_coil.tooltip_heat=Base Heat Capacity: §e%,dK +tile.wire_coil.tooltip_smelter=§aMulti Smelter§7: +tile.wire_coil.tooltip_parallel_smelter= Max Parallel: §e%s§7 +tile.wire_coil.tooltip_energy_smelter= Energy Usage: §e%s EU/t per recipe§7 +tile.wire_coil.tooltip_pyro=§aPyrolyse Oven§7: +tile.wire_coil.tooltip_speed_pyro= Processing Speed: §e%s%%§7 +tile.wire_coil.tooltip_cracking=§aCracking Unit§7: +tile.wire_coil.tooltip_energy_cracking= Energy Usage: §e%s%%§7 +tile.wire_coil.tooltip_reactor=§aLarge Chemical Reactor§7: +tile.wire_coil.tooltip_energy_reactor= Max Perfect Overclock Tier: §e%s§7 +tile.wire_coil.tooltip_energy_reactor_any= All Voltages Allowed tile.wire_coil.cupronickel.name=Cupronickel Coil Block tile.wire_coil.kanthal.name=Kanthal Coil Block From b2d340e7b2a5579d8269b7d5b91e80c7f8b13b6d Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 19:47:45 -0500 Subject: [PATCH 5/8] lcr coils limit perfect oc tier --- .../capability/impl/AbstractRecipeLogic.java | 27 +++++++++++-- .../impl/HeatingCoilRecipeLogic.java | 12 ++++-- .../impl/MultiblockRecipeLogic.java | 40 ++++++++++++++----- .../java/gregtech/api/recipes/Recipe.java | 4 ++ .../gregtech/common/blocks/BlockWireCoil.java | 7 ++-- .../MetaTileEntityLargeChemicalReactor.java | 39 +++++++++++------- .../resources/assets/gregtech/lang/en_us.lang | 8 ++-- 7 files changed, 96 insertions(+), 41 deletions(-) diff --git a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java index 600d1abb2fc..58a0736c278 100644 --- a/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/AbstractRecipeLogic.java @@ -11,6 +11,7 @@ import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; import gregtech.api.recipes.logic.IParallelableRecipeLogic; +import gregtech.api.recipes.recipeproperties.RecipePropertyStorage; import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; import net.minecraft.item.ItemStack; @@ -445,7 +446,7 @@ protected boolean checkCanOverclock(int recipeEUt) { } /** - * performs the actual overclocking of voltage and duration + * determines the maximum amount of overclocks for the recipe * * @param recipe the recipe to overclock * @return an int array of {OverclockedEUt, OverclockedDuration} @@ -457,15 +458,35 @@ protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { } /** - * actually runs the overclocking logic + * converts the recipe's values into ones used for overclocking * @param recipe the recipe to overclock * @param maxOverclocks the maximum amount of overclocks to perform * @return an int array of {OverclockedEUt, OverclockedDuration} */ protected int[] runOverclockingLogic(@Nonnull Recipe recipe, boolean negativeEU, int maxOverclocks) { - return standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), + return overclockRecipe(recipe.getRecipePropertyStorage(), + recipe.getEUt(), + negativeEU, getMaxVoltage(), recipe.getDuration(), + maxOverclocks + ); + } + + /** + * actually runs the overclocking logic + * @param propertyStorage the recipe's property storage + * @param recipeEUt the EUt of the recipe + * @param negativeEU whether the EU is negative or not + * @param maxVoltage the maximum voltage the recipe is allowed to be run at + * @param duration the duration of the recipe + * @param maxOverclocks the maximum amount of overclocks to perform + * @return an int array of {OverclockedEUt, OverclockedDuration} + */ + protected int[] overclockRecipe(RecipePropertyStorage propertyStorage, int recipeEUt, boolean negativeEU, long maxVoltage, int duration, int maxOverclocks) { + return standardOverclockingLogic(recipeEUt * (negativeEU ? -1 : 1), + maxVoltage, + duration, getOverclockingDurationDivisor(), getOverclockingVoltageMultiplier(), maxOverclocks diff --git a/src/main/java/gregtech/api/capability/impl/HeatingCoilRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/HeatingCoilRecipeLogic.java index 2f9e79e79cc..bd5532d7160 100644 --- a/src/main/java/gregtech/api/capability/impl/HeatingCoilRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/HeatingCoilRecipeLogic.java @@ -2,7 +2,7 @@ import gregtech.api.capability.IHeatingCoil; import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; -import gregtech.api.recipes.Recipe; +import gregtech.api.recipes.recipeproperties.RecipePropertyStorage; import gregtech.api.recipes.recipeproperties.TemperatureProperty; import javax.annotation.Nonnull; @@ -18,10 +18,14 @@ public HeatingCoilRecipeLogic(RecipeMapMultiblockController metaTileEntity) { } @Override - protected int[] runOverclockingLogic(@Nonnull Recipe recipe, boolean negativeEU, int maxOverclocks) { - return heatingCoilOverclockingLogic(recipe.getEUt(), getMaxVoltage(), recipe.getDuration(), maxOverclocks, + protected int[] overclockRecipe(@Nonnull RecipePropertyStorage propertyStorage, int recipeEUt, boolean negativeEU, long maxVoltage, int duration, int maxOverclocks) { + return heatingCoilOverclockingLogic(recipeEUt * (negativeEU ? -1 : 1), + maxVoltage, + duration, + maxOverclocks, ((IHeatingCoil) metaTileEntity).getCurrentTemperature(), - recipe.getProperty(TemperatureProperty.getInstance(), 0)); + propertyStorage.getRecipePropertyValue(TemperatureProperty.getInstance(), 0) + ); } @Nonnull diff --git a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java index 67d8c58ee44..96098d204c8 100644 --- a/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java +++ b/src/main/java/gregtech/api/capability/impl/MultiblockRecipeLogic.java @@ -10,6 +10,7 @@ import gregtech.api.recipes.MatchingMode; import gregtech.api.recipes.Recipe; import gregtech.api.recipes.RecipeMap; +import net.minecraft.util.Tuple; import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nonnull; @@ -223,21 +224,38 @@ protected boolean prepareRecipeDistinct(Recipe recipe) { @Override protected int[] runOverclockingLogic(@Nonnull Recipe recipe, boolean negativeEU, int maxOverclocks) { // apply maintenance penalties - MultiblockWithDisplayBase displayBase = this.metaTileEntity instanceof MultiblockWithDisplayBase ? (MultiblockWithDisplayBase) metaTileEntity : null; - int numMaintenanceProblems = displayBase == null ? 0 : displayBase.getNumMaintenanceProblems(); + Tuple maintenanceValues = getMaintenanceValues(); int[] overclock = null; + if (maintenanceValues.getSecond() != 1.0) + overclock = overclockRecipe(recipe.getRecipePropertyStorage(), recipe.getEUt(), negativeEU, getMaxVoltage(), + (int) Math.round(recipe.getDuration() * maintenanceValues.getSecond()), maxOverclocks); + + if (overclock == null) + overclock = overclockRecipe(recipe.getRecipePropertyStorage(), recipe.getEUt(), negativeEU, getMaxVoltage(), recipe.getDuration(), maxOverclocks); + + if (maintenanceValues.getFirst() > 0) + overclock[1] = (int) (overclock[1] * (1 + 0.1 * maintenanceValues.getFirst())); + + return overclock; + } + + @Override + protected int[] performOverclocking(Recipe recipe, boolean negativeEU) { + int maxOverclocks = getOverclockingTier(getMaxVoltage()) - 1; // exclude ULV overclocking + + return runOverclockingLogic(recipe, negativeEU, maxOverclocks); + } + + protected Tuple getMaintenanceValues() { + MultiblockWithDisplayBase displayBase = this.metaTileEntity instanceof MultiblockWithDisplayBase ? (MultiblockWithDisplayBase) metaTileEntity : null; + int numMaintenanceProblems = displayBase == null ? 0 : displayBase.getNumMaintenanceProblems(); + double durationMultiplier = 1.0D; if (displayBase != null && displayBase.hasMaintenanceMechanics()) { IMaintenanceHatch hatch = displayBase.getAbilities(MultiblockAbility.MAINTENANCE_HATCH).get(0); - double durationMultiplier = hatch.getDurationMultiplier(); - if (durationMultiplier != 1.0) { - overclock = standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), getMaxVoltage(), (int) Math.round(recipe.getDuration() * durationMultiplier), getOverclockingDurationDivisor(), getOverclockingVoltageMultiplier(), maxOverclocks); - } + durationMultiplier = hatch.getDurationMultiplier(); } - if (overclock == null) overclock = super.runOverclockingLogic(recipe, negativeEU, maxOverclocks); - overclock[1] = (int) (overclock[1] * (1 + 0.1 * numMaintenanceProblems)); - - return overclock; + return new Tuple<>(numMaintenanceProblems, durationMultiplier); } @Override @@ -298,7 +316,7 @@ protected boolean drawEnergy(int recipeEUt) { } @Override - public long getMaxVoltage() { + protected long getMaxVoltage() { return Math.max(getEnergyContainer().getInputVoltage(), getEnergyContainer().getOutputVoltage()); } diff --git a/src/main/java/gregtech/api/recipes/Recipe.java b/src/main/java/gregtech/api/recipes/Recipe.java index 06f5ade9bf6..7c4ae9fa0a6 100644 --- a/src/main/java/gregtech/api/recipes/Recipe.java +++ b/src/main/java/gregtech/api/recipes/Recipe.java @@ -502,6 +502,10 @@ public int getPropertyCount() { return recipePropertyStorage.getSize(); } + public RecipePropertyStorage getRecipePropertyStorage() { + return recipePropertyStorage; + } + /////////////////////////////////////////////////////////// // Chanced Output // /////////////////////////////////////////////////////////// diff --git a/src/main/java/gregtech/common/blocks/BlockWireCoil.java b/src/main/java/gregtech/common/blocks/BlockWireCoil.java index 1e60bd64264..90859f712db 100644 --- a/src/main/java/gregtech/common/blocks/BlockWireCoil.java +++ b/src/main/java/gregtech/common/blocks/BlockWireCoil.java @@ -55,11 +55,10 @@ public void addInformation(@Nonnull ItemStack itemStack, @Nullable World worldIn lines.add(I18n.format("tile.wire_coil.tooltip_cracking")); lines.add(I18n.format("tile.wire_coil.tooltip_energy_cracking", 100 - 5 * coilTier)); lines.add(I18n.format("tile.wire_coil.tooltip_reactor")); - if (GTValues.HT && coilType == CoilType.TRITANIUM) { - lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor_any")); - } else { + if (coilType == CoilType.TRITANIUM) + lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor", GTValues.VN[GTValues.MAX])); + else lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor", GTValues.VN[coilTier + 1])); - } } else { lines.add(I18n.format("gregtech.tooltip.hold_shift")); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java index 606f72402ea..840b7516892 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java @@ -8,7 +8,7 @@ import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; import gregtech.api.pattern.*; import gregtech.api.recipes.RecipeMaps; -import gregtech.api.util.GTUtility; +import gregtech.api.recipes.recipeproperties.RecipePropertyStorage; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; import gregtech.common.ConfigHolder; @@ -153,10 +153,8 @@ protected void formStructure(PatternMatchContext context) { protected void addDisplayText(List textList) { super.addDisplayText(textList); if (isStructureFormed() && coilTier != -1) { - long maxVoltage = this.recipeMapWorkable.getMaxVoltage(); - textList.add(new TextComponentTranslation("gregtech.multiblock.large_chemical_reactor.voltage_tier", maxVoltage, GTValues.VN[GTUtility.getTierByVoltage(maxVoltage)])); - if (GTValues.HT) - textList.add(new TextComponentTranslation("gregtech.machine.large_chemical_reactor.tooltip.ht")); + textList.add(new TextComponentTranslation("gregtech.multiblock.large_chemical_reactor.voltage_tier", + GTValues.VN[coilTier == BlockWireCoil.CoilType.TRITANIUM.ordinal() ? GTValues.MAX : coilTier + 1])); } } @@ -170,7 +168,6 @@ private int getCoilTier() { return this.coilTier; } - @SuppressWarnings("InnerClassMayBeStatic") private static class LargeChemicalReactorWorkableHandler extends MultiblockRecipeLogic { public LargeChemicalReactorWorkableHandler(RecipeMapMultiblockController tileEntity) { @@ -178,18 +175,32 @@ public LargeChemicalReactorWorkableHandler(RecipeMapMultiblockController tileEnt } @Override - public long getMaxVoltage() { + protected int[] overclockRecipe(RecipePropertyStorage propertyStorage, int recipeEUt, boolean negativeEU, long maxVoltage, int duration, int maxOverclocks) { int coilTier = ((MetaTileEntityLargeChemicalReactor) metaTileEntity).getCoilTier(); if (coilTier == -1) - return 0; + return super.overclockRecipe(propertyStorage, recipeEUt, negativeEU, maxVoltage, duration, maxOverclocks); - // for GTValues.HT = true, allow any voltage with the best coil - long maxVoltage = super.getMaxVoltage(); - if (GTValues.HT && coilTier == BlockWireCoil.CoilType.TRITANIUM.ordinal()) - return maxVoltage; + return lcrOverclockingLogic(recipeEUt * (negativeEU ? -1 : 1), + maxVoltage, + duration, + maxOverclocks, + coilTier + ); + } + + @Nonnull + public static int[] lcrOverclockingLogic(int recipeEUt, long maximumVoltage, int recipeDuration, int maxOverclocks, int coilTier) { + // perfect overclock until the voltage reaches the coil limit, skip cupronickel since LV cannot OC + if (coilTier > 0) { + // use the normal overclock logic to do perfect OCs up to the coil tier voltage, +1 to avoid ULV + int[] overclock = standardOverclockingLogic(recipeEUt, GTValues.V[coilTier + 1], recipeDuration, PERFECT_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); + + // overclock normally as much as possible after perfects are exhausted + return standardOverclockingLogic(overclock[0], maximumVoltage, overclock[1], STANDARD_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); + } - // coil tier is equal to the maximum allowed voltage, + 1 to avoid ULV - return Math.min(maxVoltage, GTValues.V[coilTier + 1]); + // no perfects are performed, do normal overclocking + return standardOverclockingLogic(recipeEUt, maximumVoltage, recipeDuration, STANDARD_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); } } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 41bf7c0aa4c..95b02116959 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -2196,7 +2196,6 @@ tile.wire_coil.tooltip_cracking=§aCracking Unit§7: tile.wire_coil.tooltip_energy_cracking= Energy Usage: §e%s%%§7 tile.wire_coil.tooltip_reactor=§aLarge Chemical Reactor§7: tile.wire_coil.tooltip_energy_reactor= Max Perfect Overclock Tier: §e%s§7 -tile.wire_coil.tooltip_energy_reactor_any= All Voltages Allowed tile.wire_coil.cupronickel.name=Cupronickel Coil Block tile.wire_coil.kanthal.name=Kanthal Coil Block @@ -3665,14 +3664,13 @@ gregtech.machine.pyrolyse_oven.name=Pyrolyse Oven gregtech.machine.pyrolyse_oven.tooltip.1=§aCupronickel Coils§7 are §a25%%§7 slower. Every coil after §aKanthal§7 increases speed by §a50%%§7. gregtech.machine.distillation_tower.name=Distillation Tower gregtech.machine.multi_furnace.name=Multi Smelter -gregtech.machine.cracker.name=Crackering Unit +gregtech.machine.cracker.name=Cracking Unit gregtech.machine.cracker.tooltip.1=Every coil after §aCupronickel§7 reduces energy usage by §a5%%§7. gregtech.machine.coke_oven.name=Coke Oven gregtech.machine.coke_oven_hatch.name=Coke Oven Hatch gregtech.machine.coke_oven_hatch.tooltip=Allows automation access to coke oven. Must be centered on coke oven side. gregtech.machine.large_chemical_reactor.name=Large Chemical Reactor -gregtech.machine.large_chemical_reactor.tooltip.1=§aMaximum voltage§7 is equal to the multiblock's coil tier. -gregtech.machine.large_chemical_reactor.tooltip.ht=§Tritanium Coils§7 coils allow any voltage. +gregtech.machine.large_chemical_reactor.tooltip.1=§aMaximum lossless OC tier§7 is equal to the coil tier. @@ -4100,7 +4098,7 @@ gregtech.multiblock.pyrolyse_oven.speed=Processing Speed: %s%% gregtech.multiblock.cracking_unit.energy=Energy Usage: %s%% -gregtech.multiblock.large_chemical_reactor.voltage_tier=Energy Limit: %s EU/t (%s) +gregtech.multiblock.large_chemical_reactor.voltage_tier=Perfect OC Limit: %s gregtech.command.usage=Usage: /gregtech gregtech.command.worldgen.usage=Usage: /gregtech worldgen From d6bd38d06a10f5193141a3176a39020a5c00ff82 Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 19:54:07 -0500 Subject: [PATCH 6/8] fix coil advancements --- ...ctrum_coil.json => 79_tritanium_coil.json} | 56 +++++++++---------- .../80_diamericium_titanium_coil.json | 29 ---------- ...h_alloy_coil.json => 73_trinium_coil.json} | 56 +++++++++---------- .../resources/assets/gregtech/lang/en_us.lang | 13 ++--- 4 files changed, 60 insertions(+), 94 deletions(-) rename src/main/resources/assets/gregtech/advancements/ultimate_voltage/{79_fluxed_electrum_coil.json => 79_tritanium_coil.json} (68%) delete mode 100644 src/main/resources/assets/gregtech/advancements/ultimate_voltage/80_diamericium_titanium_coil.json rename src/main/resources/assets/gregtech/advancements/zero_point_module/{73_naquadah_alloy_coil.json => 73_trinium_coil.json} (68%) diff --git a/src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_fluxed_electrum_coil.json b/src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_tritanium_coil.json similarity index 68% rename from src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_fluxed_electrum_coil.json rename to src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_tritanium_coil.json index 41a522ca4b8..fdb807aeb05 100644 --- a/src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_fluxed_electrum_coil.json +++ b/src/main/resources/assets/gregtech/advancements/ultimate_voltage/79_tritanium_coil.json @@ -1,28 +1,28 @@ -{ - "display": { - "description": { - "translate": "gregtech.advancement.ultimate_voltage.79_fluxed_electrum_coil.desc" - }, - "title": { - "translate": "gregtech.advancement.ultimate_voltage.79_fluxed_electrum_coil.name" - }, - "icon": { - "item": "gregtech:wire_coil", - "data": 7 - } - }, - "criteria": { - "location": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "gregtech:wire_coil", - "data": 7 - } - ] - } - } - }, - "parent": "gregtech:ultimate_voltage/root_uv" -} +{ + "display": { + "description": { + "translate": "gregtech.advancement.ultimate_voltage.79_tritanium_coil.desc" + }, + "title": { + "translate": "gregtech.advancement.ultimate_voltage.79_tritanium_coil.name" + }, + "icon": { + "item": "gregtech:wire_coil", + "data": 7 + } + }, + "criteria": { + "location": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "gregtech:wire_coil", + "data": 7 + } + ] + } + } + }, + "parent": "gregtech:ultimate_voltage/root_uv" +} diff --git a/src/main/resources/assets/gregtech/advancements/ultimate_voltage/80_diamericium_titanium_coil.json b/src/main/resources/assets/gregtech/advancements/ultimate_voltage/80_diamericium_titanium_coil.json deleted file mode 100644 index af03f2a7dc1..00000000000 --- a/src/main/resources/assets/gregtech/advancements/ultimate_voltage/80_diamericium_titanium_coil.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "display": { - "description": { - "translate": "gregtech.advancement.ultimate_voltage.80_diamericium_titanium_coil.desc" - }, - "title": { - "translate": "gregtech.advancement.ultimate_voltage.80_diamericium_titanium_coil.name" - }, - "icon": { - "item": "gregtech:wire_coil", - "data": 8 - }, - "frame": "challenge" - }, - "criteria": { - "location": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "gregtech:wire_coil", - "data": 8 - } - ] - } - } - }, - "parent": "gregtech:ultimate_voltage/79_fluxed_electrum_coil" -} diff --git a/src/main/resources/assets/gregtech/advancements/zero_point_module/73_naquadah_alloy_coil.json b/src/main/resources/assets/gregtech/advancements/zero_point_module/73_trinium_coil.json similarity index 68% rename from src/main/resources/assets/gregtech/advancements/zero_point_module/73_naquadah_alloy_coil.json rename to src/main/resources/assets/gregtech/advancements/zero_point_module/73_trinium_coil.json index b80624d111e..bd1bc15896d 100644 --- a/src/main/resources/assets/gregtech/advancements/zero_point_module/73_naquadah_alloy_coil.json +++ b/src/main/resources/assets/gregtech/advancements/zero_point_module/73_trinium_coil.json @@ -1,28 +1,28 @@ -{ - "display": { - "description": { - "translate": "gregtech.advancement.zero_point_module.73_naquadah_alloy_coil.desc" - }, - "title": { - "translate": "gregtech.advancement.zero_point_module.73_naquadah_alloy_coil.name" - }, - "icon": { - "item": "gregtech:wire_coil", - "data": 6 - } - }, - "criteria": { - "location": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { - "item": "gregtech:wire_coil", - "data": 6 - } - ] - } - } - }, - "parent": "gregtech:zero_point_module/root_zpm" -} +{ + "display": { + "description": { + "translate": "gregtech.advancement.zero_point_module.73_trinium_coil.desc" + }, + "title": { + "translate": "gregtech.advancement.zero_point_module.73_trinium_coil.name" + }, + "icon": { + "item": "gregtech:wire_coil", + "data": 6 + } + }, + "criteria": { + "location": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "gregtech:wire_coil", + "data": 6 + } + ] + } + } + }, + "parent": "gregtech:zero_point_module/root_zpm" +} diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 95b02116959..aab2e6de5c9 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1719,9 +1719,6 @@ material.naquadria=Naquadria material.tritanium=Tritanium material.duranium=Duranium -material.diamericium_titanium=Diamericium Titanium -material.fluxed_electrum=Fluxed Electrum - material.milk=Milk material.cocoa=Cocoa material.wheat=Wheat @@ -3608,8 +3605,8 @@ gregtech.advancement.zero_point_module.71_neuro_processing_unit.name=Neuro Proce gregtech.advancement.zero_point_module.71_neuro_processing_unit.desc=Produce a Neuro Processing Unit. gregtech.advancement.zero_point_module.72_wetware_processor.name=Wetware Processor gregtech.advancement.zero_point_module.72_wetware_processor.desc=Get Wetware Processors. -gregtech.advancement.zero_point_module.73_naquadah_alloy_coil.name=Over 9000! -gregtech.advancement.zero_point_module.73_naquadah_alloy_coil.desc=Craft a Naquadah Alloy Heating Coil. +gregtech.advancement.zero_point_module.73_trinium_coil.name=Over 9000! +gregtech.advancement.zero_point_module.73_trinium_coil.desc=Craft a Trinium Heating Coil. gregtech.advancement.root_uv.name=Ultimate Voltage gregtech.advancement.root_uv.desc=Produce Tritanium. gregtech.advancement.ultimate_voltage.74_wetware_mainframe.name=Wetware Mainframe @@ -3622,10 +3619,8 @@ gregtech.advancement.ultimate_voltage.77_ultimate_battery.name=What Now? gregtech.advancement.ultimate_voltage.77_ultimate_battery.desc=Craft an Ultimate Battery. gregtech.advancement.ultimate_voltage.78_hasoc_wafer.name=HASoC Wafer gregtech.advancement.ultimate_voltage.78_hasoc_wafer.desc=Produce an HASoC Wafer to make cheaper Master Circuits. -gregtech.advancement.ultimate_voltage.79_fluxed_electrum_coil.name=The Formula is Too Long -gregtech.advancement.ultimate_voltage.79_fluxed_electrum_coil.desc=Craft a Fluxed Electrum Heating Coil. -gregtech.advancement.ultimate_voltage.80_diamericium_titanium_coil.name=The Final Coil -gregtech.advancement.ultimate_voltage.80_diamericium_titanium_coil.desc=Craft a Diamericium Titanium Heating Coil. +gregtech.advancement.ultimate_voltage.79_tritanium_coil.name=The Final Coil +gregtech.advancement.ultimate_voltage.79_tritanium_coil.desc=Craft a Tritanium Heating Coil. behaviour.softhammer=Activates and Deactivates Machines From e0c38ef8116675031765b303e503aac60801986b Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 23:12:03 -0500 Subject: [PATCH 7/8] remove LCR coil mechanincs --- .../gregtech/common/blocks/BlockWireCoil.java | 6 - .../MetaTileEntityLargeChemicalReactor.java | 167 +++++------------- .../resources/assets/gregtech/lang/en_us.lang | 5 - 3 files changed, 47 insertions(+), 131 deletions(-) diff --git a/src/main/java/gregtech/common/blocks/BlockWireCoil.java b/src/main/java/gregtech/common/blocks/BlockWireCoil.java index 90859f712db..65afb6d9fda 100644 --- a/src/main/java/gregtech/common/blocks/BlockWireCoil.java +++ b/src/main/java/gregtech/common/blocks/BlockWireCoil.java @@ -1,6 +1,5 @@ package gregtech.common.blocks; -import gregtech.api.GTValues; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; import net.minecraft.block.SoundType; @@ -54,11 +53,6 @@ public void addInformation(@Nonnull ItemStack itemStack, @Nullable World worldIn lines.add(I18n.format("tile.wire_coil.tooltip_speed_pyro", coilTier == 0 ? 75 : 50 * (coilTier + 1))); lines.add(I18n.format("tile.wire_coil.tooltip_cracking")); lines.add(I18n.format("tile.wire_coil.tooltip_energy_cracking", 100 - 5 * coilTier)); - lines.add(I18n.format("tile.wire_coil.tooltip_reactor")); - if (coilType == CoilType.TRITANIUM) - lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor", GTValues.VN[GTValues.MAX])); - else - lines.add(I18n.format("tile.wire_coil.tooltip_energy_reactor", GTValues.VN[coilTier + 1])); } else { lines.add(I18n.format("gregtech.tooltip.hold_shift")); } diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java index 840b7516892..21ac7e98bae 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java @@ -1,14 +1,14 @@ package gregtech.common.metatileentities.multi.electric; -import gregtech.api.GTValues; -import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.multiblock.IMultiblockPart; import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController; -import gregtech.api.pattern.*; +import gregtech.api.pattern.BlockPattern; +import gregtech.api.pattern.FactoryBlockPattern; +import gregtech.api.pattern.MultiblockShapeInfo; +import gregtech.api.pattern.TraceabilityPredicate; import gregtech.api.recipes.RecipeMaps; -import gregtech.api.recipes.recipeproperties.RecipePropertyStorage; import gregtech.client.renderer.ICubeRenderer; import gregtech.client.renderer.texture.Textures; import gregtech.common.ConfigHolder; @@ -22,8 +22,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import javax.annotation.Nonnull; @@ -33,11 +31,8 @@ public class MetaTileEntityLargeChemicalReactor extends RecipeMapMultiblockController { - private int coilTier; - public MetaTileEntityLargeChemicalReactor(ResourceLocation metaTileEntityId) { super(metaTileEntityId, RecipeMaps.LARGE_CHEMICAL_RECIPES); - this.recipeMapWorkable = new LargeChemicalReactorWorkableHandler(this); } @Override @@ -56,7 +51,7 @@ protected BlockPattern createStructurePattern() { .where('S', selfPredicate()) .where('X', casing.or(abilities)) .where('P', states(getPipeCasingState())) - .where('C', heatingCoils().setMinGlobalLimited(1).setMaxGlobalLimited(1) + .where('C', states(MetaBlocks.WIRE_COIL.getState(BlockWireCoil.CoilType.CUPRONICKEL)).setMinGlobalLimited(1).setMaxGlobalLimited(1) .or(abilities) .or(casing)) .build(); @@ -65,50 +60,48 @@ protected BlockPattern createStructurePattern() { @Override public List getMatchingShapes() { ArrayList shapeInfo = new ArrayList<>(); - for (BlockWireCoil.CoilType coilType : BlockWireCoil.CoilType.values()) { - MultiblockShapeInfo.Builder baseBuilder = MultiblockShapeInfo.builder() - .where('S', MetaTileEntities.LARGE_CHEMICAL_REACTOR, EnumFacing.SOUTH) - .where('X', MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING)) - .where('P', MetaBlocks.BOILER_CASING.getState(BlockBoilerCasing.BoilerCasingType.POLYTETRAFLUOROETHYLENE_PIPE)) - .where('C', MetaBlocks.WIRE_COIL.getState(coilType)) - .where('I', MetaTileEntities.ITEM_IMPORT_BUS[3], EnumFacing.SOUTH) - .where('E', MetaTileEntities.ENERGY_INPUT_HATCH[3], EnumFacing.NORTH) - .where('O', MetaTileEntities.ITEM_EXPORT_BUS[3], EnumFacing.SOUTH) - .where('F', MetaTileEntities.FLUID_IMPORT_HATCH[3], EnumFacing.SOUTH) - .where('H', MetaTileEntities.FLUID_EXPORT_HATCH[3], EnumFacing.SOUTH) - .where('M', () -> ConfigHolder.machines.enableMaintenance ? MetaTileEntities.MAINTENANCE_HATCH : MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING), EnumFacing.SOUTH); - - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XCX", "XXX") - .aisle("XXX", "XPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "XPX", "XCX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XCX", "XPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "CPX", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - shapeInfo.add(baseBuilder.shallowCopy() - .aisle("XEX", "XXX", "XXX") - .aisle("XXX", "XPC", "XXX") - .aisle("IMO", "FSH", "XXX") - .build() - ); - } + MultiblockShapeInfo.Builder baseBuilder = MultiblockShapeInfo.builder() + .where('S', MetaTileEntities.LARGE_CHEMICAL_REACTOR, EnumFacing.SOUTH) + .where('X', MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING)) + .where('P', MetaBlocks.BOILER_CASING.getState(BlockBoilerCasing.BoilerCasingType.POLYTETRAFLUOROETHYLENE_PIPE)) + .where('C', MetaBlocks.WIRE_COIL.getState(BlockWireCoil.CoilType.CUPRONICKEL)) + .where('I', MetaTileEntities.ITEM_IMPORT_BUS[3], EnumFacing.SOUTH) + .where('E', MetaTileEntities.ENERGY_INPUT_HATCH[3], EnumFacing.NORTH) + .where('O', MetaTileEntities.ITEM_EXPORT_BUS[3], EnumFacing.SOUTH) + .where('F', MetaTileEntities.FLUID_IMPORT_HATCH[3], EnumFacing.SOUTH) + .where('H', MetaTileEntities.FLUID_EXPORT_HATCH[3], EnumFacing.SOUTH) + .where('M', () -> ConfigHolder.machines.enableMaintenance ? MetaTileEntities.MAINTENANCE_HATCH : MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING), EnumFacing.SOUTH); + + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XCX", "XXX") + .aisle("XXX", "XPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "XPX", "XCX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XCX", "XPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "CPX", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); + shapeInfo.add(baseBuilder.shallowCopy() + .aisle("XEX", "XXX", "XXX") + .aisle("XXX", "XPC", "XXX") + .aisle("IMO", "FSH", "XXX") + .build() + ); return shapeInfo; } @@ -130,7 +123,6 @@ protected IBlockState getPipeCasingState() { public void addInformation(ItemStack stack, @Nullable World player, List tooltip, boolean advanced) { super.addInformation(stack, player, tooltip, advanced); tooltip.add(I18n.format("gregtech.machine.perfect_oc")); - tooltip.add(I18n.format("gregtech.machine.large_chemical_reactor.tooltip.1")); } @Nonnull @@ -138,69 +130,4 @@ public void addInformation(ItemStack stack, @Nullable World player, List protected ICubeRenderer getFrontOverlay() { return Textures.LARGE_CHEMICAL_REACTOR_OVERLAY; } - - @Override - protected void formStructure(PatternMatchContext context) { - super.formStructure(context); - Object type = context.get("CoilType"); - if (type instanceof BlockWireCoil.CoilType) - this.coilTier = ((BlockWireCoil.CoilType) type).ordinal(); - else - this.coilTier = 0; - } - - @Override - protected void addDisplayText(List textList) { - super.addDisplayText(textList); - if (isStructureFormed() && coilTier != -1) { - textList.add(new TextComponentTranslation("gregtech.multiblock.large_chemical_reactor.voltage_tier", - GTValues.VN[coilTier == BlockWireCoil.CoilType.TRITANIUM.ordinal() ? GTValues.MAX : coilTier + 1])); - } - } - - @Override - public void invalidateStructure() { - super.invalidateStructure(); - this.coilTier = -1; - } - - private int getCoilTier() { - return this.coilTier; - } - - private static class LargeChemicalReactorWorkableHandler extends MultiblockRecipeLogic { - - public LargeChemicalReactorWorkableHandler(RecipeMapMultiblockController tileEntity) { - super(tileEntity, true); - } - - @Override - protected int[] overclockRecipe(RecipePropertyStorage propertyStorage, int recipeEUt, boolean negativeEU, long maxVoltage, int duration, int maxOverclocks) { - int coilTier = ((MetaTileEntityLargeChemicalReactor) metaTileEntity).getCoilTier(); - if (coilTier == -1) - return super.overclockRecipe(propertyStorage, recipeEUt, negativeEU, maxVoltage, duration, maxOverclocks); - - return lcrOverclockingLogic(recipeEUt * (negativeEU ? -1 : 1), - maxVoltage, - duration, - maxOverclocks, - coilTier - ); - } - - @Nonnull - public static int[] lcrOverclockingLogic(int recipeEUt, long maximumVoltage, int recipeDuration, int maxOverclocks, int coilTier) { - // perfect overclock until the voltage reaches the coil limit, skip cupronickel since LV cannot OC - if (coilTier > 0) { - // use the normal overclock logic to do perfect OCs up to the coil tier voltage, +1 to avoid ULV - int[] overclock = standardOverclockingLogic(recipeEUt, GTValues.V[coilTier + 1], recipeDuration, PERFECT_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); - - // overclock normally as much as possible after perfects are exhausted - return standardOverclockingLogic(overclock[0], maximumVoltage, overclock[1], STANDARD_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); - } - - // no perfects are performed, do normal overclocking - return standardOverclockingLogic(recipeEUt, maximumVoltage, recipeDuration, STANDARD_OVERCLOCK_DURATION_DIVISOR, STANDARD_OVERCLOCK_VOLTAGE_MULTIPLIER, maxOverclocks); - } - } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index aab2e6de5c9..c18da6634d8 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -2191,8 +2191,6 @@ tile.wire_coil.tooltip_pyro=§aPyrolyse Oven§7: tile.wire_coil.tooltip_speed_pyro= Processing Speed: §e%s%%§7 tile.wire_coil.tooltip_cracking=§aCracking Unit§7: tile.wire_coil.tooltip_energy_cracking= Energy Usage: §e%s%%§7 -tile.wire_coil.tooltip_reactor=§aLarge Chemical Reactor§7: -tile.wire_coil.tooltip_energy_reactor= Max Perfect Overclock Tier: §e%s§7 tile.wire_coil.cupronickel.name=Cupronickel Coil Block tile.wire_coil.kanthal.name=Kanthal Coil Block @@ -3665,7 +3663,6 @@ gregtech.machine.coke_oven.name=Coke Oven gregtech.machine.coke_oven_hatch.name=Coke Oven Hatch gregtech.machine.coke_oven_hatch.tooltip=Allows automation access to coke oven. Must be centered on coke oven side. gregtech.machine.large_chemical_reactor.name=Large Chemical Reactor -gregtech.machine.large_chemical_reactor.tooltip.1=§aMaximum lossless OC tier§7 is equal to the coil tier. @@ -4093,8 +4090,6 @@ gregtech.multiblock.pyrolyse_oven.speed=Processing Speed: %s%% gregtech.multiblock.cracking_unit.energy=Energy Usage: %s%% -gregtech.multiblock.large_chemical_reactor.voltage_tier=Perfect OC Limit: %s - gregtech.command.usage=Usage: /gregtech gregtech.command.worldgen.usage=Usage: /gregtech worldgen gregtech.command.worldgen.reload.usage=Usage: /gregtech worldgen reload From 49df205d359e38d6b00c7ca1c865dae046ceb49a Mon Sep 17 00:00:00 2001 From: tech22 <37029404+TechLord22@users.noreply.github.com> Date: Thu, 16 Dec 2021 23:17:12 -0500 Subject: [PATCH 8/8] add back missing lcr recipe logic --- .../multi/electric/MetaTileEntityLargeChemicalReactor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java index 21ac7e98bae..e952c51d819 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityLargeChemicalReactor.java @@ -1,5 +1,6 @@ package gregtech.common.metatileentities.multi.electric; +import gregtech.api.capability.impl.MultiblockRecipeLogic; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.MetaTileEntityHolder; import gregtech.api.metatileentity.multiblock.IMultiblockPart; @@ -33,6 +34,7 @@ public class MetaTileEntityLargeChemicalReactor extends RecipeMapMultiblockContr public MetaTileEntityLargeChemicalReactor(ResourceLocation metaTileEntityId) { super(metaTileEntityId, RecipeMaps.LARGE_CHEMICAL_RECIPES); + this.recipeMapWorkable = new MultiblockRecipeLogic(this, true); } @Override @@ -71,7 +73,6 @@ public List getMatchingShapes() { .where('F', MetaTileEntities.FLUID_IMPORT_HATCH[3], EnumFacing.SOUTH) .where('H', MetaTileEntities.FLUID_EXPORT_HATCH[3], EnumFacing.SOUTH) .where('M', () -> ConfigHolder.machines.enableMaintenance ? MetaTileEntities.MAINTENANCE_HATCH : MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.PTFE_INERT_CASING), EnumFacing.SOUTH); - shapeInfo.add(baseBuilder.shallowCopy() .aisle("XEX", "XCX", "XXX") .aisle("XXX", "XPX", "XXX") @@ -130,4 +131,5 @@ public void addInformation(ItemStack stack, @Nullable World player, List protected ICubeRenderer getFrontOverlay() { return Textures.LARGE_CHEMICAL_REACTOR_OVERLAY; } + }