From e3e8a30e7d40dbbcf3f7426b580c5b9c4e7e5218 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Sat, 28 Oct 2023 12:29:23 +0200 Subject: Start working on moving DEFC from EMT --- src/main/java/kubatech/api/enums/ItemList.java | 15 +- src/main/java/kubatech/kubatech.java | 17 +- src/main/java/kubatech/loaders/BlockLoader.java | 10 +- src/main/java/kubatech/loaders/DEFCRecipes.java | 205 ++++++++++++++++ src/main/java/kubatech/loaders/ItemLoader.java | 28 ++- src/main/java/kubatech/loaders/RecipeLoader.java | 12 + .../java/kubatech/loaders/block/BlockProxy.java | 111 --------- .../loaders/block/IProxyTileEntityProvider.java | 29 --- .../java/kubatech/loaders/block/KubaBlock.java | 198 --------------- .../java/kubatech/loaders/block/KubaItemBlock.java | 73 ------ .../kubatech/loaders/block/blocks/TeaAcceptor.java | 64 ----- .../kubatech/loaders/block/blocks/TeaStorage.java | 66 ----- .../loaders/block/defc/DEFCCasingBlock.java | 62 +++++ .../loaders/block/defc/DEFCCasingItemBlock.java | 36 +++ .../loaders/block/kubablock/BlockProxy.java | 111 +++++++++ .../block/kubablock/IProxyTileEntityProvider.java | 29 +++ .../loaders/block/kubablock/KubaBlock.java | 198 +++++++++++++++ .../loaders/block/kubablock/KubaItemBlock.java | 73 ++++++ .../block/kubablock/blocks/TeaAcceptor.java | 64 +++++ .../loaders/block/kubablock/blocks/TeaStorage.java | 66 +++++ src/main/java/kubatech/loaders/item/ItemProxy.java | 4 + .../java/kubatech/tileentity/TeaAcceptorTile.java | 2 +- .../GT_MetaTileEntity_DEFusionCrafter.java | 266 +++++++++++++++++++++ 23 files changed, 1188 insertions(+), 551 deletions(-) create mode 100644 src/main/java/kubatech/loaders/DEFCRecipes.java delete mode 100644 src/main/java/kubatech/loaders/block/BlockProxy.java delete mode 100644 src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java delete mode 100644 src/main/java/kubatech/loaders/block/KubaBlock.java delete mode 100644 src/main/java/kubatech/loaders/block/KubaItemBlock.java delete mode 100644 src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java delete mode 100644 src/main/java/kubatech/loaders/block/blocks/TeaStorage.java create mode 100644 src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java create mode 100644 src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/BlockProxy.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/IProxyTileEntityProvider.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/KubaBlock.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/KubaItemBlock.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java create mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java (limited to 'src/main/java/kubatech') diff --git a/src/main/java/kubatech/api/enums/ItemList.java b/src/main/java/kubatech/api/enums/ItemList.java index 41a57f988f..2eb4a3d889 100644 --- a/src/main/java/kubatech/api/enums/ItemList.java +++ b/src/main/java/kubatech/api/enums/ItemList.java @@ -20,6 +20,7 @@ public enum ItemList implements IItemContainer { ExtremeExterminationChamber, ExtremeIndustrialApiary, ExtremeIndustrialGreenhouse, + DraconicEvolutionFusionCrafter, LegendaryBlackTea, LegendaryButterflyTea, LegendaryEarlGrayTea, @@ -59,7 +60,19 @@ public enum ItemList implements IItemContainer { TeaAcceptorResearchNote, TeaAcceptor, TeaStorage, - Beeeeee; + Beeeeee, + DEFCCasingBase, + DEFCCasingT1, + DEFCCasingT2, + DEFCCasingT3, + DEFCCasingT4, + DEFCCasingT5, + DEFCDraconicSchematic, + DEFCWyvernSchematic, + DEFCAwakenedSchematic, + DEFCChaoticSchematic, + + ; private ItemStack mStack; private boolean mHasNotBeenSet = true; diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index 5bc38d189e..673e8c0c89 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -26,6 +26,8 @@ import java.io.IOException; import java.util.Collection; import java.util.List; +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; +import cpw.mods.fml.common.event.FMLModIdMappingEvent; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -101,9 +103,13 @@ public class kubatech { @Override public void displayAllReleventItems(List p_78018_1_) { super.displayAllReleventItems(p_78018_1_); - p_78018_1_.add(ItemList.ExtremeExterminationChamber.get(1)); - p_78018_1_.add(ItemList.ExtremeIndustrialApiary.get(1)); - p_78018_1_.add(ItemList.ExtremeIndustrialGreenhouse.get(1)); + if (ItemList.ExtremeExterminationChamber.hasBeenSet()) + p_78018_1_.add(ItemList.ExtremeExterminationChamber.get(1)); + if (ItemList.ExtremeIndustrialApiary.hasBeenSet()) p_78018_1_.add(ItemList.ExtremeIndustrialApiary.get(1)); + if (ItemList.ExtremeIndustrialGreenhouse.hasBeenSet()) + p_78018_1_.add(ItemList.ExtremeIndustrialGreenhouse.get(1)); + if (ItemList.DraconicEvolutionFusionCrafter.hasBeenSet()) + p_78018_1_.add(ItemList.DraconicEvolutionFusionCrafter.get(1)); } }; @@ -176,6 +182,11 @@ public class kubatech { proxy.loadComplete(event); } + @Mod.EventHandler + public void mapping(FMLMissingMappingsEvent){ + + } + public static void debug(String message) { LOG.debug(message); } diff --git a/src/main/java/kubatech/loaders/BlockLoader.java b/src/main/java/kubatech/loaders/BlockLoader.java index e6f8d5b8ed..89a760d5ef 100644 --- a/src/main/java/kubatech/loaders/BlockLoader.java +++ b/src/main/java/kubatech/loaders/BlockLoader.java @@ -25,10 +25,11 @@ import net.minecraft.item.ItemBlock; import cpw.mods.fml.common.registry.GameRegistry; import kubatech.api.enums.ItemList; -import kubatech.loaders.block.KubaBlock; -import kubatech.loaders.block.KubaItemBlock; -import kubatech.loaders.block.blocks.TeaAcceptor; -import kubatech.loaders.block.blocks.TeaStorage; +import kubatech.loaders.block.defc.DEFCCasingBlock; +import kubatech.loaders.block.kubablock.KubaBlock; +import kubatech.loaders.block.kubablock.KubaItemBlock; +import kubatech.loaders.block.kubablock.blocks.TeaAcceptor; +import kubatech.loaders.block.kubablock.blocks.TeaStorage; import kubatech.tileentity.TeaAcceptorTile; import kubatech.tileentity.TeaStorageTile; @@ -36,6 +37,7 @@ public class BlockLoader { public static final KubaBlock kubaBlock = new KubaBlock(Material.anvil); public static final ItemBlock kubaItemBlock = new KubaItemBlock(kubaBlock); + public static final DEFCCasingBlock defcCasingBlock = new DEFCCasingBlock(); public static void registerBlocks() { GameRegistry.registerTileEntity(TeaAcceptorTile.class, "KT_TeaAcceptor"); diff --git a/src/main/java/kubatech/loaders/DEFCRecipes.java b/src/main/java/kubatech/loaders/DEFCRecipes.java new file mode 100644 index 0000000000..6ba505d57b --- /dev/null +++ b/src/main/java/kubatech/loaders/DEFCRecipes.java @@ -0,0 +1,205 @@ +package kubatech.loaders; + +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.Mods.GregTech; + +import java.util.HashSet; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import cpw.mods.fml.common.Loader; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; +import kubatech.Tags; +import kubatech.api.LoaderReference; + +public class DEFCRecipes { + + public static final GT_Recipe.GT_Recipe_Map sFusionCraftingRecipes = new GT_Recipe.GT_Recipe_Map( + new HashSet<>(16), + "emt.recipe.fusioncrafting", + "Draconic Evolution Fusion Crafter", + null, + GregTech.getResourcePath("textures/gui/basicmachines", "FusionCrafter"), + 9, + 1, + 1, + 0, + 1, + "Tier Casing: ", + 1, + E, + false, + true).setSlotOverlay(false, false, UITexture.fullImage(Tags.MODID, "gui/slot/fusion_crafter")); + + public static void addFusionCraftingRecipe(ItemStack[] inputs, FluidStack[] fluidinputs, ItemStack[] outputs, + FluidStack[] fluidoutputs, int aDuration, int aEUt, int aTier) { + sFusionCraftingRecipes + .addRecipe(true, inputs, outputs, null, fluidinputs, fluidoutputs, aDuration, aEUt, aTier); + } + + public static void addFusionCraftingRecipeNonOptimized(ItemStack[] inputs, FluidStack[] fluidinputs, + ItemStack[] outputs, FluidStack[] fluidoutputs, int aDuration, int aEUt, int aTier) { + sFusionCraftingRecipes + .addRecipe(false, inputs, outputs, null, fluidinputs, fluidoutputs, aDuration, aEUt, aTier); + } + + public static void addFusionCraftingRecipe(ItemStack[] inputs, ItemStack output, int aDuration, int aEUt, + int aTier) { + addFusionCraftingRecipe(inputs, null, new ItemStack[] { output }, null, aDuration, aEUt, aTier); + } + + // Use this if you don't want your recipes quantity to be splitted + public static void addFusionCraftingRecipeNonOptimized(ItemStack[] inputs, FluidStack fluidinput, ItemStack output, + FluidStack fluidoutput, int aDuration, int aEUt, int aTier) { + addFusionCraftingRecipeNonOptimized( + inputs, + new FluidStack[] { fluidinput }, + new ItemStack[] { output }, + new FluidStack[] { fluidoutput }, + aDuration, + aEUt, + aTier); + } + + public static void addRecipes() { + + // CORES + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1), + ItemList.QuantumEye.get(1L), + kubatech.api.enums.ItemList.DEFCDraconicSchematic.get(0L)) + .fluidInputs(Materials.Sunnarium.getMolten(1440)) + .itemOutputs(GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0)) + .eut(500_000) + .duration(400) + .specialValue(1) + .addTo(sFusionCraftingRecipes); + + /* + * addFusionCraftingRecipeNonOptimized( + * new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + * GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1), ItemList.QuantumEye.get(1L), + * kubatech.api.enums.ItemList.DEFCDraconicSchematic.get(0L) }, + * Materials.Sunnarium.getMolten(1440), + * GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0), + * GT_Values.NF, + * 400, + * 500000, + * 1); + */ + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4), + GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 4, 0), ItemList.QuantumStar.get(1L), + kubatech.api.enums.ItemList.DEFCWyvernSchematic.get(0L), }, + Materials.Neutronium.getMolten(1440), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 1, 0), + GT_Values.NF, + 800, + 2_000_000, + 2); + if (Loader.isModLoaded("supersolarpanel")) { + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 4, 0), + GT_ModHandler.getModItem("supersolarpanel", "enderquantumcomponent", 1, 0), + kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L) }, + Materials.Infinity.getMolten(1440), + GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 1, 0), + GT_Values.NF, + 1600, + 8_000_000, + 3); + } else { + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 4, 0), + GT_ModHandler.getModItem("dreamcraft", "item.ManyullynCrystal", 1, 0), + kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L) }, + Materials.Infinity.getMolten(1440), + GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 1, 0), + GT_Values.NF, + 1600, + 8_000_000, + 3); + } + + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 16), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4), + GT_ModHandler.getModItem("DraconicEvolution", "awakenedCore", 4, 0), + GT_ModHandler.getModItem("DraconicEvolution", "chaosFragment", 2, 2), + kubatech.api.enums.ItemList.DEFCChaoticSchematic.get(0L) }, + MaterialsUEVplus.SpaceTime.getMolten(1440), + GT_ModHandler.getModItem("DraconicEvolution", "chaoticCore", 1, 0), + GT_Values.NF, + 3200, + 24_000_000, + 4); + + // ENERGY CORES + + addFusionCraftingRecipe( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 4), + GT_ModHandler.getModItem("AdvancedSolarPanel", "asp_crafting_items", 4, 1), + GT_ModHandler.getModItem("DraconicEvolution", "draconicCore", 1, 0), + kubatech.api.enums.ItemList.DEFCWyvernSchematic.get(0L) }, + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 1, 0), + 1000, + 500_000, + 2); + + addFusionCraftingRecipe( + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 8), + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 4, 0), + GT_ModHandler.getModItem("AdvancedSolarPanel", "asp_crafting_items", 4, 4), + GT_ModHandler.getModItem("DraconicEvolution", "wyvernCore", 1, 0), + kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L) }, + GT_ModHandler.getModItem("DraconicEvolution", "draconiumEnergyCore", 1, 1), + 2000, + 2_000_000, + 3); + + // Dragon Blood + if (LoaderReference.GTPlusPlus) { + + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { new ItemStack(Blocks.dragon_egg, 0), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64) }, + Materials.Radon.getPlasma(144), + null, + new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 288), + 4200, + 1_966_080, + 3); + + addFusionCraftingRecipeNonOptimized( + new ItemStack[] { GT_ModHandler.getModItem("witchery", "infinityegg", 0), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64) }, + Materials.Radon.getPlasma(72), + null, + new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 432), + 3600, + 1_966_080, + 3); + } + } +} diff --git a/src/main/java/kubatech/loaders/ItemLoader.java b/src/main/java/kubatech/loaders/ItemLoader.java index 5c3ec6cc02..c9d2a769d8 100644 --- a/src/main/java/kubatech/loaders/ItemLoader.java +++ b/src/main/java/kubatech/loaders/ItemLoader.java @@ -24,6 +24,10 @@ import static kubatech.api.enums.ItemList.Beeeeee; import static kubatech.api.enums.ItemList.BlackTea; import static kubatech.api.enums.ItemList.BlackTeaLeaf; import static kubatech.api.enums.ItemList.BruisedTeaLeaf; +import static kubatech.api.enums.ItemList.DEFCAwakenedSchematic; +import static kubatech.api.enums.ItemList.DEFCChaoticSchematic; +import static kubatech.api.enums.ItemList.DEFCDraconicSchematic; +import static kubatech.api.enums.ItemList.DEFCWyvernSchematic; import static kubatech.api.enums.ItemList.EarlGrayTea; import static kubatech.api.enums.ItemList.FermentedTeaLeaf; import static kubatech.api.enums.ItemList.GreenTea; @@ -59,6 +63,13 @@ import static kubatech.api.enums.ItemList.WhiteTeaLeaf; import static kubatech.api.enums.ItemList.YellowTea; import static kubatech.api.enums.ItemList.YellowTeaLeaf; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + import cpw.mods.fml.common.registry.GameRegistry; import kubatech.loaders.item.ItemProxy; import kubatech.loaders.item.KubaItems; @@ -118,6 +129,21 @@ public class ItemLoader { TeaAcceptorResearchNote .set(kubaitems.registerProxyItem(new ItemProxy("tea_acceptor_research_note", "research_note"))); - Beeeeee.set(kubaitems.registerProxyItem(new ItemProxy("beeeeee", "beeeeee"))); + Beeeeee.set(kubaitems.registerProxyItem(new ItemProxy("beeeeee"))); + + // DEFC stuff + DEFCDraconicSchematic.set(kubaitems.registerProxyItem(new ItemProxy("defc_schematic_t1") { + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, + boolean showDebugInfo) { + tooltipList + .add(EnumChatFormatting.GOLD + StatCollector.translateToLocal("kubaitem.defc_schematic_t1.tip")); + } + })); + DEFCWyvernSchematic.set(kubaitems.registerProxyItem(new ItemProxy("defc_schematic_t2"))); + DEFCAwakenedSchematic.set(kubaitems.registerProxyItem(new ItemProxy("defc_schematic_t3"))); + DEFCChaoticSchematic.set(kubaitems.registerProxyItem(new ItemProxy("defc_schematic_t4"))); + } } diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java index 8b52707e32..c9925e1f8a 100644 --- a/src/main/java/kubatech/loaders/RecipeLoader.java +++ b/src/main/java/kubatech/loaders/RecipeLoader.java @@ -33,6 +33,7 @@ import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; import static kubatech.api.enums.ItemList.BlackTea; import static kubatech.api.enums.ItemList.BlackTeaLeaf; import static kubatech.api.enums.ItemList.BruisedTeaLeaf; +import static kubatech.api.enums.ItemList.DraconicEvolutionFusionCrafter; import static kubatech.api.enums.ItemList.EarlGrayTea; import static kubatech.api.enums.ItemList.ExtremeExterminationChamber; import static kubatech.api.enums.ItemList.ExtremeIndustrialApiary; @@ -79,6 +80,7 @@ import gregtech.api.util.GT_Utility; import gtPlusPlus.core.lib.CORE; import kubatech.api.LoaderReference; import kubatech.api.enums.ItemList; +import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_DEFusionCrafter; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_MegaIndustrialApiary; @@ -148,6 +150,16 @@ public class RecipeLoader { : gregtech.api.enums.ItemList.Robot_Arm_IV, 'Z', OrePrefixes.circuit.get(Materials.Ultimate) }); } + if (registerMTEUsingID( + 5_001, + DraconicEvolutionFusionCrafter, + GT_MetaTileEntity_DEFusionCrafter.class, + "multimachine.defusioncrafter", + "Draconic Evolution Fusion Crafter", + LoaderReference.DraconicEvolution)) { + // Controller recipe added in TecTech + DEFCRecipes.addRecipes(); + } RegisterTeaLine(); if (MTEID > MTEIDMax + 1) throw new RuntimeException("MTE ID's"); } diff --git a/src/main/java/kubatech/loaders/block/BlockProxy.java b/src/main/java/kubatech/loaders/block/BlockProxy.java deleted file mode 100644 index 86f403a0c8..0000000000 --- a/src/main/java/kubatech/loaders/block/BlockProxy.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block; - -import static kubatech.loaders.block.KubaBlock.defaultTileEntityUI; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; - -import kubatech.Tags; - -public class BlockProxy { - - private final String unlocalizedName; - private final String sideTexturePath; - private final String topBottomTexturePath; - private IIcon sideIcon; - private IIcon topBottomIcon; - - public BlockProxy(String unlocalizedName, String texture) { - this.unlocalizedName = "kubablock." + unlocalizedName; - sideTexturePath = topBottomTexturePath = Tags.MODID + ":" + texture; - } - - public BlockProxy(String unlocalizedName, String sideTexture, String topBottomTexture) { - this.unlocalizedName = "kubablock." + unlocalizedName; - sideTexturePath = Tags.MODID + ":" + sideTexture; - topBottomTexturePath = Tags.MODID + ":" + topBottomTexture; - } - - public void itemInit(int ID) {} - - public boolean onActivated(World world, int x, int y, int z, EntityPlayer player) { - if (this instanceof IProxyTileEntityProvider) { - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof ITileWithModularUI) { - if (world.isRemote) return true; - if (te instanceof KubaBlock.IModularUIProvider) ((KubaBlock.IModularUIProvider) te).getUI() - .open(player, world, x, y, z); - else defaultTileEntityUI.open(player, world, x, y, z); - return true; - } - } - return false; - } - - public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {} - - public void registerIcon(IIconRegister iconRegister) { - sideIcon = iconRegister.registerIcon(sideTexturePath); - if (sideTexturePath.equals(topBottomTexturePath)) topBottomIcon = sideIcon; - else topBottomIcon = iconRegister.registerIcon(topBottomTexturePath); - } - - public IIcon getIcon(int side) { - if (side <= 1) return topBottomIcon; - else return sideIcon; - } - - public String getUnlocalizedName() { - return this.unlocalizedName; - } - - public String getDisplayName(ItemStack stack) { - return StatCollector.translateToLocal(this.unlocalizedName + ".name") - .trim(); - } - - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) {} - - public float getHardness() { - return 10.f; - } - - public Material getMaterial() { - return Material.anvil; - } - - public float getResistance() { - return 5.f; - } -} diff --git a/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java b/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java deleted file mode 100644 index a7b2f79e88..0000000000 --- a/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public interface IProxyTileEntityProvider { - - TileEntity createTileEntity(World world); -} diff --git a/src/main/java/kubatech/loaders/block/KubaBlock.java b/src/main/java/kubatech/loaders/block/KubaBlock.java deleted file mode 100644 index ac722358e1..0000000000 --- a/src/main/java/kubatech/loaders/block/KubaBlock.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block; - -import static kubatech.kubatech.KT; - -import java.lang.ref.WeakReference; -import java.util.HashMap; -import java.util.List; -import java.util.function.Function; - -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.EntityLivingBase; -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.world.World; - -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; -import com.gtnewhorizons.modularui.api.screen.ModularUIContext; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.builder.UIBuilder; -import com.gtnewhorizons.modularui.common.builder.UIInfo; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; - -import kubatech.loaders.BlockLoader; - -public class KubaBlock extends Block { - - public static final Function> TileEntityUIFactory = containerConstructor -> UIBuilder - .of() - .container((player, world, x, y, z) -> { - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof ITileWithModularUI) { - final UIBuildContext buildContext = new UIBuildContext(player); - final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); - return containerConstructor - .createUIContainer(new ModularUIContext(buildContext, te::markDirty), window); - } - return null; - }) - .gui(((player, world, x, y, z) -> { - if (!world.isRemote) return null; - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof ITileWithModularUI) { - final UIBuildContext buildContext = new UIBuildContext(player); - final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); - return new ModularGui( - containerConstructor.createUIContainer(new ModularUIContext(buildContext, null), window)); - } - return null; - })) - .build(); - - public static final UIInfo defaultTileEntityUI = TileEntityUIFactory.apply(ModularUIContainer::new); - - static final HashMap blocks = new HashMap<>(); - private static int idCounter = 0; - - public KubaBlock(Material p_i45394_1_) { - super(p_i45394_1_); - setCreativeTab(KT); - } - - public ItemStack registerProxyBlock(BlockProxy block) { - blocks.put(idCounter, block); - block.itemInit(idCounter); - return new ItemStack(BlockLoader.kubaItemBlock, 1, idCounter++); - } - - private BlockProxy getBlock(int id) { - return blocks.get(id); - } - - WeakReference lastAccessor = null; - int X, Y, Z; - - public void setLastBlockAccess(World accessor, int x, int y, int z) { - lastAccessor = new WeakReference<>(accessor); - X = x; - Y = y; - Z = z; - } - - @Override - public boolean hasTileEntity(int meta) { - return getBlock(meta) instanceof IProxyTileEntityProvider; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_) { - for (int i = 0; i < blocks.size(); i++) p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - public void registerBlockIcons(IIconRegister p_149651_1_) { - blocks.values() - .forEach(b -> b.registerIcon(p_149651_1_)); - } - - @Override - public IIcon getIcon(int p_149691_1_, int p_149691_2_) { - return blocks.get(p_149691_2_) - .getIcon(p_149691_1_); - } - - @Override - public String getLocalizedName() { - return "KUBABLOCK"; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - if (!hasTileEntity(metadata)) return null; - return ((IProxyTileEntityProvider) getBlock(metadata)).createTileEntity(world); - } - - @Override - public boolean onBlockActivated(World p_149727_1_, int p_149727_2_, int p_149727_3_, int p_149727_4_, - EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) { - return getBlock(p_149727_1_.getBlockMetadata(p_149727_2_, p_149727_3_, p_149727_4_)) - .onActivated(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, p_149727_5_); - } - - @Override - public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, - EntityLivingBase p_149689_5_, ItemStack p_149689_6_) { - getBlock(p_149689_6_.getItemDamage()) - .onBlockPlaced(p_149689_1_, p_149689_2_, p_149689_3_, p_149689_4_, p_149689_5_, p_149689_6_); - } - - @Override - public float getBlockHardness(World p_149712_1_, int p_149712_2_, int p_149712_3_, int p_149712_4_) { - return getBlock(p_149712_1_.getBlockMetadata(p_149712_2_, p_149712_3_, p_149712_4_)).getHardness(); - } - - @Override - public Material getMaterial() { - if (lastAccessor == null) return super.getMaterial(); - World world = lastAccessor.get(); - if (world == null) { - lastAccessor = null; - return super.getMaterial(); - } - if (world.getBlock(X, Y, Z) != this) return super.getMaterial(); - return getBlock(world.getBlockMetadata(X, Y, Z)).getMaterial(); - } - - @Override - public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, - double explosionY, double explosionZ) { - return getBlock(world.getBlockMetadata(x, y, z)).getResistance(); - } - - @FunctionalInterface - public interface IModularUIContainerCreator { - - ModularUIContainer createUIContainer(ModularUIContext context, ModularWindow mainWindow); - } - - @FunctionalInterface - public interface IModularUIProvider { - - UIInfo getUI(); - } -} diff --git a/src/main/java/kubatech/loaders/block/KubaItemBlock.java b/src/main/java/kubatech/loaders/block/KubaItemBlock.java deleted file mode 100644 index 6964ef5152..0000000000 --- a/src/main/java/kubatech/loaders/block/KubaItemBlock.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class KubaItemBlock extends ItemBlock { - - public KubaItemBlock(Block p_i45328_1_) { - super(p_i45328_1_); - setHasSubtypes(true); - } - - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, - float hitX, float hitY, float hitZ, int metadata) { - return super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); - } - - @Override - public void registerIcons(IIconRegister p_94581_1_) { - super.registerIcons(p_94581_1_); - } - - @Override - public String getUnlocalizedName(ItemStack p_77667_1_) { - return KubaBlock.blocks.get(p_77667_1_.getItemDamage()) - .getUnlocalizedName(); - } - - @Override - public String getItemStackDisplayName(ItemStack p_77653_1_) { - return KubaBlock.blocks.get(p_77653_1_.getItemDamage()) - .getDisplayName(p_77653_1_); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { - KubaBlock.blocks.get(p_77624_1_.getItemDamage()) - .addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); - } - - @Override - public int getMetadata(int p_77647_1_) { - return p_77647_1_; - } -} diff --git a/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java b/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java deleted file mode 100644 index d06466094a..0000000000 --- a/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block.blocks; - -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import kubatech.loaders.block.BlockProxy; -import kubatech.loaders.block.IProxyTileEntityProvider; -import kubatech.tileentity.TeaAcceptorTile; - -public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { - - public TeaAcceptor() { - super("tea_acceptor", "tea_acceptor", "blank"); - } - - @Override - public TileEntity createTileEntity(World world) { - return new TeaAcceptorTile(); - } - - @Override - public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - if (world.isRemote) return; - if (!(player instanceof EntityPlayerMP)) return; - ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add("Accepts Tea items and adds them to your network"); - tooltipList.add("Can accept up to 10 stacks per tick"); - } - - @Override - public float getResistance() { - return 999999999999.f; - } -} diff --git a/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java b/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java deleted file mode 100644 index 059c873ad4..0000000000 --- a/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2023 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block.blocks; - -import static kubatech.api.Variables.numberFormat; - -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; - -import kubatech.loaders.block.BlockProxy; -import kubatech.loaders.block.IProxyTileEntityProvider; -import kubatech.tileentity.TeaStorageTile; - -public class TeaStorage extends BlockProxy implements IProxyTileEntityProvider { - - public TeaStorage() { - super("tea_storage", "tea_storage"); - } - - @Override - public TileEntity createTileEntity(World world) { - return new TeaStorageTile(); - } - - @Override - public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - if (world.isRemote) return; - if (!(player instanceof EntityPlayerMP)) return; - ((TeaStorageTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add("Extends Tea Storage by " + EnumChatFormatting.RED + numberFormat.format(Long.MAX_VALUE)); - } - - @Override - public float getResistance() { - return 999999999999.f; - } -} diff --git a/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java b/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java new file mode 100644 index 0000000000..ceb4055f8c --- /dev/null +++ b/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java @@ -0,0 +1,62 @@ +package kubatech.loaders.block.defc; + +import static kubatech.kubatech.KT; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_LanguageManager; +import gregtech.common.blocks.GT_Block_Casings_Abstract; +import kubatech.Tags; +import kubatech.api.enums.ItemList; + +public class DEFCCasingBlock extends GT_Block_Casings_Abstract { + + @SideOnly(Side.CLIENT) + private IIcon[] texture; + + public DEFCCasingBlock() { + super(DEFCCasingItemBlock.class, "defc.casing", Material.anvil); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.setCreativeTab(KT); + + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Naquadah Alloy Fusion Casing"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Bloody Ichorium Fusion Casing"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Draconium Fusion Casing"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Wyvern Fusion Casing"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Awakened Draconium Fusion Casing"); + GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Chaotic Fusion Casing"); + + ItemList.DEFCCasingBase.set(new ItemStack(this, 1, 0)); + ItemList.DEFCCasingT1.set(new ItemStack(this, 1, 1)); + ItemList.DEFCCasingT2.set(new ItemStack(this, 1, 2)); + ItemList.DEFCCasingT3.set(new ItemStack(this, 1, 3)); + ItemList.DEFCCasingT4.set(new ItemStack(this, 1, 4)); + ItemList.DEFCCasingT5.set(new ItemStack(this, 1, 5)); + + // Taking one texture slot :P + Textures.BlockIcons.setCasingTexture((byte) 1, (byte) (15 + 48), TextureFactory.of(this, 0)); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return texture[meta]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) { + texture = new IIcon[6]; + for (int i = 0; i < texture.length; i++) { + texture[i] = aIconRegister.registerIcon(Tags.MODID + ":casing/defc_" + i); + } + } +} diff --git a/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java b/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java new file mode 100644 index 0000000000..7e140006cd --- /dev/null +++ b/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java @@ -0,0 +1,36 @@ +package kubatech.loaders.block.defc; + +import static kubatech.kubatech.KT; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import gregtech.common.blocks.GT_Item_Casings_Abstract; + +public class DEFCCasingItemBlock extends GT_Item_Casings_Abstract { + + public DEFCCasingItemBlock(Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(KT); + } + + @Override + @SuppressWarnings("unchecked") + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (getDamage(aStack) > 0) + aList.add(StatCollector.translateToLocalFormatted("defc.casing.tip", getDamage(aStack))); + super.addInformation(aStack, aPlayer, aList, aF3_H); + } + + @Override + public IIcon getIconFromDamage(int p_77617_1_) { + return this.field_150939_a.getIcon(0, p_77617_1_); + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/BlockProxy.java b/src/main/java/kubatech/loaders/block/kubablock/BlockProxy.java new file mode 100644 index 0000000000..b11dcec244 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/BlockProxy.java @@ -0,0 +1,111 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock; + +import static kubatech.loaders.block.kubablock.KubaBlock.defaultTileEntityUI; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; + +import kubatech.Tags; + +public class BlockProxy { + + private final String unlocalizedName; + private final String sideTexturePath; + private final String topBottomTexturePath; + private IIcon sideIcon; + private IIcon topBottomIcon; + + public BlockProxy(String unlocalizedName, String texture) { + this.unlocalizedName = "kubablock." + unlocalizedName; + sideTexturePath = topBottomTexturePath = Tags.MODID + ":" + texture; + } + + public BlockProxy(String unlocalizedName, String sideTexture, String topBottomTexture) { + this.unlocalizedName = "kubablock." + unlocalizedName; + sideTexturePath = Tags.MODID + ":" + sideTexture; + topBottomTexturePath = Tags.MODID + ":" + topBottomTexture; + } + + public void itemInit(int ID) {} + + public boolean onActivated(World world, int x, int y, int z, EntityPlayer player) { + if (this instanceof IProxyTileEntityProvider) { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + if (world.isRemote) return true; + if (te instanceof KubaBlock.IModularUIProvider) ((KubaBlock.IModularUIProvider) te).getUI() + .open(player, world, x, y, z); + else defaultTileEntityUI.open(player, world, x, y, z); + return true; + } + } + return false; + } + + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {} + + public void registerIcon(IIconRegister iconRegister) { + sideIcon = iconRegister.registerIcon(sideTexturePath); + if (sideTexturePath.equals(topBottomTexturePath)) topBottomIcon = sideIcon; + else topBottomIcon = iconRegister.registerIcon(topBottomTexturePath); + } + + public IIcon getIcon(int side) { + if (side <= 1) return topBottomIcon; + else return sideIcon; + } + + public String getUnlocalizedName() { + return this.unlocalizedName; + } + + public String getDisplayName(ItemStack stack) { + return StatCollector.translateToLocal(this.unlocalizedName + ".name") + .trim(); + } + + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) {} + + public float getHardness() { + return 10.f; + } + + public Material getMaterial() { + return Material.anvil; + } + + public float getResistance() { + return 5.f; + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/IProxyTileEntityProvider.java b/src/main/java/kubatech/loaders/block/kubablock/IProxyTileEntityProvider.java new file mode 100644 index 0000000000..9025fbb402 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/IProxyTileEntityProvider.java @@ -0,0 +1,29 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public interface IProxyTileEntityProvider { + + TileEntity createTileEntity(World world); +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/KubaBlock.java b/src/main/java/kubatech/loaders/block/kubablock/KubaBlock.java new file mode 100644 index 0000000000..d86745ab26 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/KubaBlock.java @@ -0,0 +1,198 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock; + +import static kubatech.kubatech.KT; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; +import java.util.function.Function; + +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.EntityLivingBase; +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.world.World; + +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIBuilder; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; + +import kubatech.loaders.BlockLoader; + +public class KubaBlock extends Block { + + public static final Function> TileEntityUIFactory = containerConstructor -> UIBuilder + .of() + .container((player, world, x, y, z) -> { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return containerConstructor + .createUIContainer(new ModularUIContext(buildContext, te::markDirty), window); + } + return null; + }) + .gui(((player, world, x, y, z) -> { + if (!world.isRemote) return null; + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return new ModularGui( + containerConstructor.createUIContainer(new ModularUIContext(buildContext, null), window)); + } + return null; + })) + .build(); + + public static final UIInfo defaultTileEntityUI = TileEntityUIFactory.apply(ModularUIContainer::new); + + static final HashMap blocks = new HashMap<>(); + private static int idCounter = 0; + + public KubaBlock(Material p_i45394_1_) { + super(p_i45394_1_); + setCreativeTab(KT); + } + + public ItemStack registerProxyBlock(BlockProxy block) { + blocks.put(idCounter, block); + block.itemInit(idCounter); + return new ItemStack(BlockLoader.kubaItemBlock, 1, idCounter++); + } + + private BlockProxy getBlock(int id) { + return blocks.get(id); + } + + WeakReference lastAccessor = null; + int X, Y, Z; + + public void setLastBlockAccess(World accessor, int x, int y, int z) { + lastAccessor = new WeakReference<>(accessor); + X = x; + Y = y; + Z = z; + } + + @Override + public boolean hasTileEntity(int meta) { + return getBlock(meta) instanceof IProxyTileEntityProvider; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_) { + for (int i = 0; i < blocks.size(); i++) p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + public void registerBlockIcons(IIconRegister p_149651_1_) { + blocks.values() + .forEach(b -> b.registerIcon(p_149651_1_)); + } + + @Override + public IIcon getIcon(int p_149691_1_, int p_149691_2_) { + return blocks.get(p_149691_2_) + .getIcon(p_149691_1_); + } + + @Override + public String getLocalizedName() { + return "KUBABLOCK"; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + if (!hasTileEntity(metadata)) return null; + return ((IProxyTileEntityProvider) getBlock(metadata)).createTileEntity(world); + } + + @Override + public boolean onBlockActivated(World p_149727_1_, int p_149727_2_, int p_149727_3_, int p_149727_4_, + EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) { + return getBlock(p_149727_1_.getBlockMetadata(p_149727_2_, p_149727_3_, p_149727_4_)) + .onActivated(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, p_149727_5_); + } + + @Override + public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, + EntityLivingBase p_149689_5_, ItemStack p_149689_6_) { + getBlock(p_149689_6_.getItemDamage()) + .onBlockPlaced(p_149689_1_, p_149689_2_, p_149689_3_, p_149689_4_, p_149689_5_, p_149689_6_); + } + + @Override + public float getBlockHardness(World p_149712_1_, int p_149712_2_, int p_149712_3_, int p_149712_4_) { + return getBlock(p_149712_1_.getBlockMetadata(p_149712_2_, p_149712_3_, p_149712_4_)).getHardness(); + } + + @Override + public Material getMaterial() { + if (lastAccessor == null) return super.getMaterial(); + World world = lastAccessor.get(); + if (world == null) { + lastAccessor = null; + return super.getMaterial(); + } + if (world.getBlock(X, Y, Z) != this) return super.getMaterial(); + return getBlock(world.getBlockMetadata(X, Y, Z)).getMaterial(); + } + + @Override + public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, + double explosionY, double explosionZ) { + return getBlock(world.getBlockMetadata(x, y, z)).getResistance(); + } + + @FunctionalInterface + public interface IModularUIContainerCreator { + + ModularUIContainer createUIContainer(ModularUIContext context, ModularWindow mainWindow); + } + + @FunctionalInterface + public interface IModularUIProvider { + + UIInfo getUI(); + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/KubaItemBlock.java b/src/main/java/kubatech/loaders/block/kubablock/KubaItemBlock.java new file mode 100644 index 0000000000..77485f2a30 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/KubaItemBlock.java @@ -0,0 +1,73 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class KubaItemBlock extends ItemBlock { + + public KubaItemBlock(Block p_i45328_1_) { + super(p_i45328_1_); + setHasSubtypes(true); + } + + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, + float hitX, float hitY, float hitZ, int metadata) { + return super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); + } + + @Override + public void registerIcons(IIconRegister p_94581_1_) { + super.registerIcons(p_94581_1_); + } + + @Override + public String getUnlocalizedName(ItemStack p_77667_1_) { + return KubaBlock.blocks.get(p_77667_1_.getItemDamage()) + .getUnlocalizedName(); + } + + @Override + public String getItemStackDisplayName(ItemStack p_77653_1_) { + return KubaBlock.blocks.get(p_77653_1_.getItemDamage()) + .getDisplayName(p_77653_1_); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { + KubaBlock.blocks.get(p_77624_1_.getItemDamage()) + .addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); + } + + @Override + public int getMetadata(int p_77647_1_) { + return p_77647_1_; + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java new file mode 100644 index 0000000000..206da6de1f --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java @@ -0,0 +1,64 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock.blocks; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import kubatech.loaders.block.kubablock.BlockProxy; +import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; +import kubatech.tileentity.TeaAcceptorTile; + +public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { + + public TeaAcceptor() { + super("tea_acceptor", "tea_acceptor", "blank"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaAcceptorTile(); + } + + @Override + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + if (world.isRemote) return; + if (!(player instanceof EntityPlayerMP)) return; + ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Accepts Tea items and adds them to your network"); + tooltipList.add("Can accept up to 10 stacks per tick"); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java new file mode 100644 index 0000000000..273690e296 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java @@ -0,0 +1,66 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2023 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock.blocks; + +import static kubatech.api.Variables.numberFormat; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import kubatech.loaders.block.kubablock.BlockProxy; +import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; +import kubatech.tileentity.TeaStorageTile; + +public class TeaStorage extends BlockProxy implements IProxyTileEntityProvider { + + public TeaStorage() { + super("tea_storage", "tea_storage"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaStorageTile(); + } + + @Override + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + if (world.isRemote) return; + if (!(player instanceof EntityPlayerMP)) return; + ((TeaStorageTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Extends Tea Storage by " + EnumChatFormatting.RED + numberFormat.format(Long.MAX_VALUE)); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} diff --git a/src/main/java/kubatech/loaders/item/ItemProxy.java b/src/main/java/kubatech/loaders/item/ItemProxy.java index 4e37175cd7..9c27959aa1 100644 --- a/src/main/java/kubatech/loaders/item/ItemProxy.java +++ b/src/main/java/kubatech/loaders/item/ItemProxy.java @@ -72,6 +72,10 @@ public class ItemProxy { texturepath = Tags.MODID + ":" + texture; } + public ItemProxy(String unlocalizedNameAndTexture) { + this(unlocalizedNameAndTexture, unlocalizedNameAndTexture); + } + public void ItemInit(int index) {} public String getUnlocalizedName() { diff --git a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java index a2952117ea..1addb1a887 100644 --- a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java +++ b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java @@ -54,7 +54,7 @@ import kubatech.api.enums.ItemList; import kubatech.api.tea.TeaNetwork; import kubatech.api.utils.StringUtils; import kubatech.loaders.ItemLoader; -import kubatech.loaders.block.KubaBlock; +import kubatech.loaders.block.kubablock.KubaBlock; public class TeaAcceptorTile extends TileEntity implements IInventory, ITileWithModularUI, KubaBlock.IModularUIProvider { diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java new file mode 100644 index 0000000000..696413ee55 --- /dev/null +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java @@ -0,0 +1,266 @@ +package kubatech.tileentity.gregtech.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; +import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; +import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.Variables.buildAuthorList; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTech_API; +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.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_OverclockCalculator; +import gregtech.api.util.GT_ParallelHelper; +import gregtech.api.util.GT_Recipe; +import kubatech.Tags; +import kubatech.api.implementations.KubaTechGTMultiBlockBase; +import kubatech.loaders.BlockLoader; +import kubatech.loaders.DEFCRecipes; + +public class GT_MetaTileEntity_DEFusionCrafter extends KubaTechGTMultiBlockBase { + + private static final int CASING_INDEX = (1 << 7) + (15 + 48); + private int mTierCasing = 0; + private int mFusionTierCasing = 0; + private int mCasing = 0; + + @SuppressWarnings("unused") + public GT_MetaTileEntity_DEFusionCrafter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GT_MetaTileEntity_DEFusionCrafter(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new GT_MetaTileEntity_DEFusionCrafter(mName); + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final List> fusionCasingTiers = Arrays + .asList(Pair.of(GregTech_API.sBlockCasings4, 6), Pair.of(GregTech_API.sBlockCasings4, 8)); + private static final List> coreTiers = Arrays.asList( + Pair.of(BlockLoader.defcCasingBlock, 1), + Pair.of(BlockLoader.defcCasingBlock, 2), + Pair.of(BlockLoader.defcCasingBlock, 3), + Pair.of(BlockLoader.defcCasingBlock, 4), + Pair.of(BlockLoader.defcCasingBlock, 5)); + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { // spotless:off + { "nnnnn", "nnnnn", "nnnnn", "nnnnn", "nnnnn" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "NN~NN", "NNNNN", "NNNNN", "NNNNN", "NNNNN" } + })) // spotless:on + .addElement( + 'N', + ofChain( + onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 0)), + ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addEnergyInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addOutputToMachineList, CASING_INDEX, 1), + ofHatchAdder(GT_MetaTileEntity_DEFusionCrafter::addMaintenanceToMachineList, CASING_INDEX, 1))) + .addElement('n', onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 0))) + .addElement('f', ofBlock(GregTech_API.sBlockCasings4, 7)) + .addElement('F', ofBlocksTiered((Block b, int m) -> { + if (b != GregTech_API.sBlockCasings4 || (m != 6 && m != 8)) return -2; + return m == 6 ? 1 : 2; + }, fusionCasingTiers, -1, (e, i) -> e.mFusionTierCasing = i, e -> e.mFusionTierCasing)) + .addElement('R', ofBlocksTiered((Block b, int m) -> { + if (b != BlockLoader.defcCasingBlock || m < 1 || m > 5) return -2; + return m; + }, coreTiers, -1, (e, i) -> e.mTierCasing = i, e -> e.mTierCasing)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mTierCasing = -1; + mFusionTierCasing = -1; + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 9, 0)) return false; + if (mCasing < 19) return false; + if (mTierCasing == -2 || mFusionTierCasing == -2) return false; + if (mTierCasing > 3 && mFusionTierCasing < 2) return false; + return mMaintenanceHatches.size() == 1; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Crafter") + .addInfo("Controller Block for the Draconic Evolution Fusion Crafter") + .addInfo(buildAuthorList("kuba6000", "Prometheus0000")) + .addInfo("Machine can be overclocked by using casings above the recipe tier:") + .addInfo("Recipe time is divided by number of tiers above the recipe") + .addInfo("Normal EU OC still applies !") + .addInfo(StructureHologram) + .addSeparator() + .beginStructureBlock(5, 10, 5, false) + .addController("Front bottom center") + .addCasingInfoMin("Naquadah Alloy Fusion Casing", 19, false) + .addOtherStructurePart("Fusion Coil Block", "Center pillar") + .addOtherStructurePart("Fusion Machine Casing", "Touching Fusion Coil Block at every side") + .addOtherStructurePart("Tiered Fusion Casing", "Rings (5x5 hollow) at layer 4 and 7") + .addStructureInfo("Bloody Ichorium for tier 1, Draconium for tier 2, etc") + .addStructureInfo("To use tier 3 + you have to use fusion casing MK II") + .addInputBus("Any bottom casing", 1) + .addInputHatch("Any bottom casing", 1) + .addOutputBus("Any bottom casing", 1) + .addOutputHatch("Any bottom casing", 1) + .addEnergyHatch("Any bottom casing", 1) + .addMaintenanceHatch("Any bottom casing", 1) + .toolTipFinisher(Tags.MODNAME); + return tt; + } + + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_GLOW) + .extFacing() + .glow() + .build() }; + } + if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .extFacing() + .glow() + .build() }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return DEFCRecipes.sFusionCraftingRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + return recipe.mSpecialValue <= mTierCasing ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.NO_RECIPE; + } + + @Override + protected double calculateDuration(@NotNull GT_Recipe recipe, @NotNull GT_ParallelHelper helper, + @NotNull GT_OverclockCalculator calculator) { + return Math.max( + 1d, + super.calculateDuration(recipe, helper, calculator) / ((mTierCasing - recipe.mSpecialValue) + 1)); + } + }; + } + + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 9, 0); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + +} -- cgit