From 91b1909427bb0cab0f72505c325b07f8fb39c62e Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Sat, 25 May 2024 14:13:58 +0100 Subject: Move GoodGen sources --- .../api/recipe/ComponentAssemblyLineFrontend.java | 44 + .../api/recipe/ExtremeHeatExchangerBackend.java | 25 + .../api/recipe/ExtremeHeatExchangerFrontend.java | 58 + .../api/recipe/ExtremeHeatExchangerRecipe.java | 66 + .../api/recipe/GoodGeneratorRecipeMaps.java | 78 + .../api/recipe/PreciseAssemblerFrontend.java | 39 + .../goodgenerator/blocks/myFluids/BaseFluid.java | 54 + .../blocks/myFluids/FluidsBuilder.java | 203 +++ .../goodgenerator/blocks/regularBlock/Casing.java | 124 ++ .../blocks/regularBlock/ComplexTextureCasing.java | 58 + .../goodgenerator/blocks/regularBlock/Frame.java | 37 + .../blocks/regularBlock/ITextureBlock.java | 18 + .../goodgenerator/blocks/regularBlock/TEBlock.java | 207 +++ .../blocks/regularBlock/TurbineCasing.java | 103 ++ .../blocks/tileEntity/ComponentAssemblyLine.java | 403 +++++ .../blocks/tileEntity/CoolantTower.java | 225 +++ .../blocks/tileEntity/EssentiaHatch.java | 244 +++ .../blocks/tileEntity/EssentiaOutputHatch.java | 179 ++ .../blocks/tileEntity/EssentiaOutputHatch_ME.java | 150 ++ .../blocks/tileEntity/ExtremeHeatExchanger.java | 416 +++++ .../blocks/tileEntity/FuelRefineFactory.java | 376 +++++ .../GTMetaTileEntity/DieselGenerator.java | 214 +++ .../GTMetaTileEntity/NeutronAccelerator.java | 48 + .../tileEntity/GTMetaTileEntity/NeutronSensor.java | 277 +++ .../tileEntity/GTMetaTileEntity/YOTTAHatch.java | 470 ++++++ .../blocks/tileEntity/LargeEssentiaGenerator.java | 511 ++++++ .../blocks/tileEntity/LargeEssentiaSmeltery.java | 558 ++++++ .../blocks/tileEntity/LargeFusionComputer1.java | 170 ++ .../blocks/tileEntity/LargeFusionComputer2.java | 171 ++ .../blocks/tileEntity/LargeFusionComputer3.java | 172 ++ .../blocks/tileEntity/LargeFusionComputer4.java | 227 +++ .../blocks/tileEntity/LargeFusionComputer5.java | 231 +++ .../blocks/tileEntity/MultiNqGenerator.java | 471 ++++++ .../blocks/tileEntity/NeutronActivator.java | 515 ++++++ .../blocks/tileEntity/PreciseAssembler.java | 491 ++++++ .../tileEntity/SupercriticalFluidTurbine.java | 184 ++ .../tileEntity/UniversalChemicalFuelEngine.java | 393 +++++ .../blocks/tileEntity/YottaFluidTank.java | 709 ++++++++ .../base/GT_MetaTileEntity_LargeTurbineBase.java | 345 ++++ ...GT_MetaTileEntity_TooltipMultiBlockBase_EM.java | 62 + .../tileEntity/base/LargeFusionComputer.java | 733 ++++++++ .../tileEntity/base/LargeFusionComputerPP.java | 53 + .../java/goodgenerator/client/ClientProxy.java | 24 + .../goodgenerator/client/GUI/GG_UITextures.java | 22 + .../client/render/BlockRenderHandler.java | 135 ++ .../java/goodgenerator/common/CommonProxy.java | 14 + .../goodgenerator/crossmod/ic2/CropsLoader.java | 10 + .../crossmod/ic2/GGCropsSaltyRoot.java | 129 ++ .../goodgenerator/crossmod/nei/NEI_Config.java | 38 + .../thaumcraft/LargeEssentiaEnergyData.java | 146 ++ .../crossmod/thaumcraft/Research.java | 673 ++++++++ .../java/goodgenerator/items/DepletedFuelRod.java | 54 + src/main/java/goodgenerator/items/FuelRod.java | 215 +++ .../java/goodgenerator/items/MyItemBlocks.java | 105 ++ src/main/java/goodgenerator/items/MyItems.java | 127 ++ src/main/java/goodgenerator/items/MyMaterial.java | 1524 +++++++++++++++++ .../java/goodgenerator/items/RadioactiveItem.java | 40 + .../items/nuclear/IsotopeMaterial.java | 60 + .../items/nuclear/IsotopeMaterialLoader.java | 177 ++ .../items/nuclear/NuclearMetaItemGenerator.java | 110 ++ .../items/nuclear/NuclearTextures.java | 31 + .../goodgenerator/loader/AchievementLoader.java | 4 + .../loader/ComponentAssemblyLineMiscRecipes.java | 503 ++++++ .../loader/ComponentAssemblyLineRecipeLoader.java | 484 ++++++ .../goodgenerator/loader/FuelRecipeLoader.java | 168 ++ .../java/goodgenerator/loader/FuelRodLoader.java | 248 +++ src/main/java/goodgenerator/loader/Loaders.java | 489 ++++++ .../loader/NaquadahReworkRecipeLoader.java | 1376 +++++++++++++++ .../loader/NeutronActivatorLoader.java | 46 + .../java/goodgenerator/loader/RecipeLoader.java | 1466 ++++++++++++++++ .../java/goodgenerator/loader/RecipeLoader_02.java | 1772 ++++++++++++++++++++ .../java/goodgenerator/main/GG_Config_Loader.java | 118 ++ .../java/goodgenerator/main/GoodGenerator.java | 86 + .../java/goodgenerator/network/MessageMTEBase.java | 88 + src/main/java/goodgenerator/tabs/MyTabs.java | 18 + src/main/java/goodgenerator/tabs/NuclearTab.java | 16 + .../java/goodgenerator/util/CharExchanger.java | 52 + .../java/goodgenerator/util/CrackRecipeAdder.java | 624 +++++++ .../goodgenerator/util/DescTextLocalization.java | 22 + src/main/java/goodgenerator/util/ItemRefer.java | 221 +++ src/main/java/goodgenerator/util/Log.java | 9 + src/main/java/goodgenerator/util/MaterialFix.java | 393 +++++ .../java/goodgenerator/util/MyRecipeAdder.java | 72 + src/main/java/goodgenerator/util/StackUtils.java | 143 ++ .../java/goodgenerator/util/StructureHelper.java | 117 ++ 85 files changed, 22281 insertions(+) create mode 100644 src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java create mode 100644 src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java create mode 100644 src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java create mode 100644 src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java create mode 100644 src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java create mode 100644 src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java create mode 100644 src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java create mode 100644 src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/Casing.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/Frame.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java create mode 100644 src/main/java/goodgenerator/client/ClientProxy.java create mode 100644 src/main/java/goodgenerator/client/GUI/GG_UITextures.java create mode 100644 src/main/java/goodgenerator/client/render/BlockRenderHandler.java create mode 100644 src/main/java/goodgenerator/common/CommonProxy.java create mode 100644 src/main/java/goodgenerator/crossmod/ic2/CropsLoader.java create mode 100644 src/main/java/goodgenerator/crossmod/ic2/GGCropsSaltyRoot.java create mode 100644 src/main/java/goodgenerator/crossmod/nei/NEI_Config.java create mode 100644 src/main/java/goodgenerator/crossmod/thaumcraft/LargeEssentiaEnergyData.java create mode 100644 src/main/java/goodgenerator/crossmod/thaumcraft/Research.java create mode 100644 src/main/java/goodgenerator/items/DepletedFuelRod.java create mode 100644 src/main/java/goodgenerator/items/FuelRod.java create mode 100644 src/main/java/goodgenerator/items/MyItemBlocks.java create mode 100644 src/main/java/goodgenerator/items/MyItems.java create mode 100644 src/main/java/goodgenerator/items/MyMaterial.java create mode 100644 src/main/java/goodgenerator/items/RadioactiveItem.java create mode 100644 src/main/java/goodgenerator/items/nuclear/IsotopeMaterial.java create mode 100644 src/main/java/goodgenerator/items/nuclear/IsotopeMaterialLoader.java create mode 100644 src/main/java/goodgenerator/items/nuclear/NuclearMetaItemGenerator.java create mode 100644 src/main/java/goodgenerator/items/nuclear/NuclearTextures.java create mode 100644 src/main/java/goodgenerator/loader/AchievementLoader.java create mode 100644 src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java create mode 100644 src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java create mode 100644 src/main/java/goodgenerator/loader/FuelRecipeLoader.java create mode 100644 src/main/java/goodgenerator/loader/FuelRodLoader.java create mode 100644 src/main/java/goodgenerator/loader/Loaders.java create mode 100644 src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java create mode 100644 src/main/java/goodgenerator/loader/NeutronActivatorLoader.java create mode 100644 src/main/java/goodgenerator/loader/RecipeLoader.java create mode 100644 src/main/java/goodgenerator/loader/RecipeLoader_02.java create mode 100644 src/main/java/goodgenerator/main/GG_Config_Loader.java create mode 100644 src/main/java/goodgenerator/main/GoodGenerator.java create mode 100644 src/main/java/goodgenerator/network/MessageMTEBase.java create mode 100644 src/main/java/goodgenerator/tabs/MyTabs.java create mode 100644 src/main/java/goodgenerator/tabs/NuclearTab.java create mode 100644 src/main/java/goodgenerator/util/CharExchanger.java create mode 100644 src/main/java/goodgenerator/util/CrackRecipeAdder.java create mode 100644 src/main/java/goodgenerator/util/DescTextLocalization.java create mode 100644 src/main/java/goodgenerator/util/ItemRefer.java create mode 100644 src/main/java/goodgenerator/util/Log.java create mode 100644 src/main/java/goodgenerator/util/MaterialFix.java create mode 100644 src/main/java/goodgenerator/util/MyRecipeAdder.java create mode 100644 src/main/java/goodgenerator/util/StackUtils.java create mode 100644 src/main/java/goodgenerator/util/StructureHelper.java (limited to 'src/main/java/goodgenerator') diff --git a/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java b/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java new file mode 100644 index 0000000000..b645c8e8f9 --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java @@ -0,0 +1,44 @@ +package goodgenerator.api.recipe; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ComponentAssemblyLineFrontend extends RecipeMapFrontend { + + public ComponentAssemblyLineFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 16, 8, 3); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(142, 8)); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + + return UIHelper.getGridPositions(fluidInputCount, 88, 26, 4); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) {} +} diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java new file mode 100644 index 0000000000..cdd3a4d57f --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java @@ -0,0 +1,25 @@ +package goodgenerator.api.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ExtremeHeatExchangerBackend extends FuelBackend { + + public ExtremeHeatExchangerBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) { + super(propertiesBuilder); + } + + @Override + public GT_Recipe compileRecipe(GT_Recipe recipe) { + if (!(recipe instanceof ExtremeHeatExchangerRecipe)) { + throw new RuntimeException("Recipe must be instance of ExtremeHeatExchangerRecipe"); + } + return super.compileRecipe(recipe); + } +} diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java new file mode 100644 index 0000000000..b933802fc2 --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java @@ -0,0 +1,58 @@ +package goodgenerator.api.recipe; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ExtremeHeatExchangerFrontend extends RecipeMapFrontend { + + public ExtremeHeatExchangerFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder.neiSpecialInfoFormatter(new EHESpecialValueFormatter())); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + return Arrays.asList(new Pos2d(26, 13), new Pos2d(26, 37)); + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + return Arrays.asList(new Pos2d(128, 13), new Pos2d(128, 31), new Pos2d(128, 54)); + } + + private static class EHESpecialValueFormatter implements INEISpecialInfoFormatter { + + @Override + public List format(RecipeDisplayInfo recipeInfo) { + FluidStack[] Inputs = recipeInfo.recipe.mFluidInputs; + FluidStack[] Outputs = recipeInfo.recipe.mFluidOutputs; + int threshold = recipeInfo.recipe.mSpecialValue; + return Arrays.asList( + StatCollector.translateToLocal("value.extreme_heat_exchanger.0") + " " + + GT_Utility.formatNumbers(Inputs[0].amount) + + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.1"), + GT_Utility.formatNumbers(Outputs[0].amount / 160) + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.2"), + GT_Utility.formatNumbers(Outputs[1].amount / 160) + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.4") + " " + threshold + " L/s"); + } + } +} diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java new file mode 100644 index 0000000000..4a32e882f8 --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java @@ -0,0 +1,66 @@ +package goodgenerator.api.recipe; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.util.GT_Recipe; + +public class ExtremeHeatExchangerRecipe extends GT_Recipe { + + public ExtremeHeatExchangerRecipe(FluidStack[] input, FluidStack[] output, int special) { + super(false, null, null, null, null, input, output, 0, 0, special); + } + + public int getMaxHotFluidConsume() { + if (this.mFluidInputs != null) { + return this.mFluidInputs[0].amount; + } + return 0; + } + + public Fluid getNormalSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[0].getFluid(); + } + return null; + } + + public Fluid getHeatedSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[1].getFluid(); + } + return null; + } + + public Fluid getCooledFluid() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[2].getFluid(); + } + return null; + } + + public int getEUt() { + if (getNormalSteam() != null) { + switch (getNormalSteam().getName()) { + case "steam": { + int tVal = this.mFluidInputs[1].amount * 4; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "ic2superheatedsteam": { + int tVal = this.mFluidInputs[1].amount * 8; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "supercriticalsteam": { + int tVal = this.mFluidInputs[1].amount * 800; + if (tVal < 0) tVal = -tVal; + return tVal; + } + default: + return 0; + } + } + return 0; + } +} diff --git a/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java b/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java new file mode 100644 index 0000000000..85e4ebca1d --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java @@ -0,0 +1,78 @@ +package goodgenerator.api.recipe; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; + +import net.minecraft.util.StatCollector; + +import goodgenerator.client.GUI.GG_UITextures; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.util.GT_Utility; +import gregtech.nei.formatter.SimpleSpecialValueFormatter; + +public class GoodGeneratorRecipeMaps { + + public static final RecipeMap naquadahReactorFuels = RecipeMapBuilder + .of("gg.recipe.naquadah_reactor") + .maxIO(0, 0, 1, 1) + .minInputs(0, 1) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.naquadah_reactor")) + .neiRecipeComparator(Comparator.comparing(recipe -> recipe.mSpecialValue)) + .dontUseProgressBar() + .addSpecialTexture(59, 20, 58, 42, GG_UITextures.PICTURE_NAQUADAH_REACTOR) + .build(); + public static final RecipeMap naquadahFuelRefineFactoryRecipes = RecipeMapBuilder + .of("gg.recipe.naquadah_fuel_refine_factory") + .maxIO(6, 0, 2, 1) + .minInputs(0, 1) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.naquadah_fuel_refine_factory")) + .build(); + public static final RecipeMap neutronActivatorRecipes = RecipeMapBuilder.of("gg.recipe.neutron_activator") + .maxIO(9, 9, 1, 1) + .dontUseProgressBar() + .addSpecialTexture(73, 22, 31, 21, GG_UITextures.PICTURE_NEUTRON_ACTIVATOR) + .neiSpecialInfoFormatter(recipeInfo -> { + int minNKE = recipeInfo.recipe.mSpecialValue % 10000; + int maxNKE = recipeInfo.recipe.mSpecialValue / 10000; + return Arrays.asList( + StatCollector.translateToLocal("value.neutron_activator.0"), + GT_Utility.formatNumbers(minNKE) + StatCollector.translateToLocal("value.neutron_activator.2"), + StatCollector.translateToLocal("value.neutron_activator.1"), + GT_Utility.formatNumbers(maxNKE) + StatCollector.translateToLocal("value.neutron_activator.2")); + }) + .build(); + public static final RecipeMap extremeHeatExchangerFuels = RecipeMapBuilder + .of("gg.recipe.extreme_heat_exchanger", ExtremeHeatExchangerBackend::new) + .maxIO(0, 0, 2, 3) + .dontUseProgressBar() + .addSpecialTexture(47, 13, 78, 59, GG_UITextures.PICTURE_EXTREME_HEAT_EXCHANGER) + .frontend(ExtremeHeatExchangerFrontend::new) + .build(); + public static final RecipeMap preciseAssemblerRecipes = RecipeMapBuilder + .of("gg.recipe.precise_assembler") + .maxIO(4, 1, 4, 0) + .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBarPos(85, 30) + .neiTransferRect(80, 30, 35, 18) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.precise_assembler")) + .frontend(PreciseAssemblerFrontend::new) + .build(); + public static final RecipeMap componentAssemblyLineRecipes = RecipeMapBuilder + .of("gg.recipe.componentassemblyline") + .maxIO(12, 1, 12, 0) + .neiTransferRect(70, 15, 18, 54) + .neiSpecialInfoFormatter( + recipeInfo -> Collections.singletonList( + StatCollector.translateToLocalFormatted( + "value.component_assembly_line", + GT_Values.VN[recipeInfo.recipe.mSpecialValue]))) + .dontUseProgressBar() + .addSpecialTexture(70, 11, 72, 40, GG_UITextures.PICTURE_COMPONENT_ASSLINE) + .frontend(ComponentAssemblyLineFrontend::new) + .build(); +} diff --git a/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java b/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java new file mode 100644 index 0000000000..2f4f0e308b --- /dev/null +++ b/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java @@ -0,0 +1,39 @@ +package goodgenerator.api.recipe; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PreciseAssemblerFrontend extends RecipeMapFrontend { + + public PreciseAssemblerFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 8, 13, itemInputCount); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(115, 30)); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + return UIHelper.getGridPositions(fluidInputCount, 8, 48, fluidInputCount); + } +} diff --git a/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java b/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java new file mode 100644 index 0000000000..47f73b186b --- /dev/null +++ b/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java @@ -0,0 +1,54 @@ +package goodgenerator.blocks.myFluids; + +import static goodgenerator.main.GoodGenerator.MOD_ID; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BaseFluid extends BlockFluidClassic { + + @SideOnly(Side.CLIENT) + protected IIcon stillIcon; + + @SideOnly(Side.CLIENT) + protected IIcon flowingIcon; + + private String stillTexture; + private String flowingTexture; + + public BaseFluid(Fluid fluid, Material material) { + super(fluid, material); + } + + public void SetTexture(String fluidName) { + stillTexture = MOD_ID + ":fluids/" + fluidName + ".still"; + flowingTexture = MOD_ID + ":fluids/" + fluidName + ".flowing"; + } + + public static Fluid BuildFluid(String fluidName) { + Fluid tFluid = new Fluid(fluidName); + FluidRegistry.registerFluid(tFluid); + return tFluid; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister register) { + stillIcon = register.registerIcon(stillTexture); + flowingIcon = register.registerIcon(flowingTexture); + + super.getFluid().setIcons(stillIcon, flowingIcon); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side == 0 || side == 1) ? stillIcon : flowingIcon; + } +} diff --git a/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java new file mode 100644 index 0000000000..de8cca2b43 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java @@ -0,0 +1,203 @@ +package goodgenerator.blocks.myFluids; + +import net.minecraft.block.material.Material; +import net.minecraftforge.fluids.Fluid; + +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.crossmod.nei.NEI_Config; + +public class FluidsBuilder { + + public FluidsBuilder() {} + + public static void Register() { + crackedNaquadahGas_Lightly(); + crackedNaquadahGas_Moderately(); + crackedNaquadahGas_Heavily(); + crackedLightNaquadahFuel_Lightly(); + crackedLightNaquadahFuel_Moderately(); + crackedLightNaquadahFuel_Heavily(); + crackedHeavyNaquadahFuel_Lightly(); + crackedHeavyNaquadahFuel_Moderately(); + crackedHeavyNaquadahFuel_Heavily(); + crackedNaquadahAsphalt_Lightly(); + crackedNaquadahAsphalt_Moderately(); + crackedNaquadahAsphalt_Heavily(); + combustionPromotor(); + coalTar(); + supercriticalSteam(); + } + + public static void crackedNaquadahGas_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedNaquadahGas"); + tmp2.setBlockName("lightlyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahGas_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedNaquadahGas"); + tmp2.setBlockName("moderatelyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahGas_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedNaquadahGas"); + tmp2.setBlockName("heavilyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedLightNaquadahFuel"); + tmp2.setBlockName("lightlyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedLightNaquadahFuel"); + tmp2.setBlockName("moderatelyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedLightNaquadahFuel"); + tmp2.setBlockName("heavilyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("lightlyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("moderatelyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("heavilyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedNaquadahAsphalt"); + tmp2.setBlockName("lightlyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedNaquadahAsphalt"); + tmp2.setBlockName("moderatelyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedNaquadahAsphalt"); + tmp2.setBlockName("heavilyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void combustionPromotor() { + Fluid tmp = BaseFluid.BuildFluid("combustionPromotor"); + tmp.setGaseous(false) + .setTemperature(300); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("combustionPromotor"); + tmp2.setBlockName("combustionPromotor"); + GameRegistry.registerBlock(tmp2, "combustionPromotor"); + NEI_Config.hide(tmp2); + } + + public static void coalTar() { + Fluid tmp = BaseFluid.BuildFluid("fluid.coalTar"); + tmp.setGaseous(false) + .setTemperature(450) + .setUnlocalizedName("fluid.coalTar"); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("coalTar"); + tmp2.setBlockTextureName("coalTar"); + GameRegistry.registerBlock(tmp2, "coalTar"); + NEI_Config.hide(tmp2); + } + + public static void supercriticalSteam() { + Fluid tmp = BaseFluid.BuildFluid("supercriticalSteam"); + tmp.setGaseous(true) + .setTemperature(648) + .setUnlocalizedName("supercriticalSteam"); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("supercriticalSteam"); + tmp2.setBlockTextureName("supercriticalSteam"); + GameRegistry.registerBlock(tmp2, "supercriticalSteam"); + NEI_Config.hide(tmp2); + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/Casing.java b/src/main/java/goodgenerator/blocks/regularBlock/Casing.java new file mode 100644 index 0000000000..9e01d783d2 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/Casing.java @@ -0,0 +1,124 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTech_API; + +public class Casing extends Block { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + + public Casing(String name) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public Casing(String name, String[] texture) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public Casing(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java new file mode 100644 index 0000000000..0a0169d0b4 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java @@ -0,0 +1,58 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ComplexTextureCasing extends Casing { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture1, texture2; + String[] textureSide; + String[] textureTopAndDown; + + public ComplexTextureCasing(String name, String[] textureSide, String[] textureTopAndDown) { + super(name); + this.textureSide = textureSide; + this.textureTopAndDown = textureTopAndDown; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if (side < 2) { + return meta < this.texture2.length ? this.texture2[meta] : this.texture2[0]; + } else { + return meta < this.texture1.length ? this.texture1[meta] : this.texture1[0]; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture1 = new IIcon[this.textureSide.length]; + for (int i = 0; i < this.textureSide.length; i++) { + this.texture1[i] = par1IconRegister.registerIcon(this.textureSide[i]); + } + this.texture2 = new IIcon[this.textureTopAndDown.length]; + for (int i = 0; i < this.textureTopAndDown.length; i++) { + this.texture2[i] = par1IconRegister.registerIcon(this.textureTopAndDown[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < Math.max(this.textureSide.length, this.textureTopAndDown.length); i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/Frame.java b/src/main/java/goodgenerator/blocks/regularBlock/Frame.java new file mode 100644 index 0000000000..b4acb03518 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/Frame.java @@ -0,0 +1,37 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class Frame extends Casing { + + public Frame(String name, String[] texture) { + super(name, texture, Material.iron); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof Frame) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java b/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java new file mode 100644 index 0000000000..fae196a64b --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java @@ -0,0 +1,18 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.Block; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; + +public interface ITextureBlock { + + default ITexture[] getTexture(Block aBlock, ForgeDirection side) { + return getTexture(aBlock, 0, side); + } + + ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, int zCoord); + + ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side); +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java b/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java new file mode 100644 index 0000000000..6c13a9c680 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java @@ -0,0 +1,207 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.tileEntity.EssentiaHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch_ME; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTech_API; +import gregtech.api.util.GT_Utility; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.IEssentiaContainerItem; + +public class TEBlock extends BlockContainer { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + protected int index; + + public TEBlock(String name, String[] texture, CreativeTabs Tab) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public TEBlock(String name, String[] texture, int index) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.index = index; + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public TEBlock(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public int getIndex() { + return this.index; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + aWorld.removeTileEntity(aX, aY, aZ); + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public TileEntity createTileEntity(World world, int meta) { + switch (index) { + case 1: + return new EssentiaHatch(); + case 2: + return new EssentiaOutputHatch(); + case 3: + return new EssentiaOutputHatch_ME(); + default: + return null; + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + if (world.isRemote) { + return false; + } else { + TileEntity tile = world.getTileEntity(x, y, z); + if (index == 1) { + if (tile instanceof EssentiaHatch) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack != null) { + Item tItem = tItemStack.getItem(); + if (tItem instanceof IEssentiaContainerItem + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .size() > 0) { + Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .getAspects()[0]; + ((EssentiaHatch) tile).setLockedAspect(tLocked); + GT_Utility.sendChatToPlayer( + player, + String.format( + StatCollector.translateToLocal("essentiahatch.chat.0"), + tLocked.getLocalizedDescription())); + } + } else { + ((EssentiaHatch) tile).setLockedAspect(null); + GT_Utility.sendChatToPlayer(player, StatCollector.translateToLocal("essentiahatch.chat.1")); + } + world.markBlockForUpdate(x, y, z); + return true; + } else return false; + } else if (index == 2) { + if (tile instanceof EssentiaOutputHatch && player.isSneaking()) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack == null) { + ((EssentiaOutputHatch) tile).clear(); + GT_Utility + .sendChatToPlayer(player, StatCollector.translateToLocal("essentiaoutputhatch.chat.0")); + } + return true; + } else return false; + } else return false; + } + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return null; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java new file mode 100644 index 0000000000..986ab4e0c8 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java @@ -0,0 +1,103 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LargeTurbineBase; +import goodgenerator.client.render.BlockRenderHandler; +import goodgenerator.main.GoodGenerator; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; + +public class TurbineCasing extends Casing implements ITextureBlock { + + public static IIconContainer[][] turbineShape = new IIconContainer[3][9]; + public IIconContainer base; + + static { + for (int i = 0; i < 3; i++) for (int j = 1; j <= 9; j++) + turbineShape[i][j - 1] = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_" + i + "" + j); + } + + public TurbineCasing(String name, String texture) { + super(name, new String[] { GoodGenerator.MOD_ID + ":" + texture }); + base = new Textures.BlockIcons.CustomIcon("icons/" + texture); + } + + private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity)) return 0; + IGregTechTileEntity tTile = (IGregTechTileEntity) tTileEntity; + if (tTile.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbineBase && tTile.getFrontFacing() == side) { + if (tTile.isActive()) return 1; + return ((GT_MetaTileEntity_LargeTurbineBase) tTile.getMetaTileEntity()).hasTurbine() ? 2 : 3; + } + return 0; + } + + public ITexture[] getTurbineCasing(int iconIndex, boolean active, boolean hasTurbine) { + int states = active ? 0 : hasTurbine ? 1 : 2; + return new ITexture[] { TextureFactory.of(base), TextureFactory.of(turbineShape[states][iconIndex]) }; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, + int zCoord) { + final int ordinalSide = side.ordinal(); + int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; + switch (ordinalSide / 2) { + case 0: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, side)) != 0) { + return getTurbineCasing(4 - i * 3 - j, tState == 1, tState == 2); + } + } + } + break; + case 1: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, side)) != 0) { + return getTurbineCasing(4 + i * 3 - j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + case 2: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, side)) != 0) { + return getTurbineCasing(4 + i * 3 + j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + } + return getTexture(aBlock, side); + } + + @Override + public ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side) { + return new ITexture[] { TextureFactory.of(base) }; + } + + @Override + public int getRenderType() { + if (BlockRenderHandler.INSTANCE == null) { + return super.getRenderType(); + } + return BlockRenderHandler.INSTANCE.mRenderID; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java new file mode 100644 index 0000000000..618477d09c --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java @@ -0,0 +1,403 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GT_HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.*; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.loader.Loaders; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_StructureUtility; +import gregtech.api.util.GT_Utility; + +public class ComponentAssemblyLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private int casingTier; + protected static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + new String[][] { + { " ", " III ", " HHI~IHH ", "HH III HH", "H H", "H H", "H JJJ H", + "H JJJ H", "H N N H", "HHHHHHHHH" }, + { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "