From 9d3f0875994d5d1a26c38991897d4149dd9c771f Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Fri, 16 Jun 2023 23:16:40 +0200 Subject: [PATCH] fix: universal alectricity fully implemented --- .../net/anvilcraft/pccompat/IModProxy.java | 8 ++ .../net/anvilcraft/pccompat/PCCBlocks.java | 19 ---- .../net/anvilcraft/pccompat/PCCompat.java | 47 ++++---- .../mods/UniversalElectricityProxy.java | 105 ++++++++++++++++++ .../pccompat/recipe/IRecipeAdapter.java | 14 +++ .../pccompat/recipe/RecipeBuilder.java | 53 +++++++++ .../recipe/ShapedOreRecipeAdapter.java | 42 +++++++ .../recipe/ShapelessOreRecipeAdapter.java | 32 ++++++ ...ileEntityUniversalElectricityConsumer.java | 5 +- ...ileEntityUniversalElectricityProducer.java | 4 +- 10 files changed, 281 insertions(+), 48 deletions(-) create mode 100644 src/main/java/net/anvilcraft/pccompat/IModProxy.java delete mode 100644 src/main/java/net/anvilcraft/pccompat/PCCBlocks.java create mode 100644 src/main/java/net/anvilcraft/pccompat/mods/UniversalElectricityProxy.java create mode 100644 src/main/java/net/anvilcraft/pccompat/recipe/IRecipeAdapter.java create mode 100644 src/main/java/net/anvilcraft/pccompat/recipe/RecipeBuilder.java create mode 100644 src/main/java/net/anvilcraft/pccompat/recipe/ShapedOreRecipeAdapter.java create mode 100644 src/main/java/net/anvilcraft/pccompat/recipe/ShapelessOreRecipeAdapter.java diff --git a/src/main/java/net/anvilcraft/pccompat/IModProxy.java b/src/main/java/net/anvilcraft/pccompat/IModProxy.java new file mode 100644 index 0000000..b7c8abc --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/IModProxy.java @@ -0,0 +1,8 @@ +package net.anvilcraft.pccompat; + +public interface IModProxy { + public void registerPowerSystem(); + public void registerBlocks(); + public void registerTiles(); + public void registerRecipes(); +} diff --git a/src/main/java/net/anvilcraft/pccompat/PCCBlocks.java b/src/main/java/net/anvilcraft/pccompat/PCCBlocks.java deleted file mode 100644 index 1dd9e6a..0000000 --- a/src/main/java/net/anvilcraft/pccompat/PCCBlocks.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.anvilcraft.pccompat; - -import cpw.mods.fml.common.registry.GameRegistry; -import net.anvilcraft.pccompat.blocks.BlockPowerConverterUniversalElectricity; -import net.anvilcraft.pccompat.items.ItemBlockPowerConverterUniversalElectricity; -import net.minecraft.block.Block; - -public class PCCBlocks { - public static Block powerConverterUniversalElectricity; - - public static void register() { - GameRegistry.registerBlock( - powerConverterUniversalElectricity - = new BlockPowerConverterUniversalElectricity(), - ItemBlockPowerConverterUniversalElectricity.class, - "power_converter_universal_electrictity" - ); - } -} diff --git a/src/main/java/net/anvilcraft/pccompat/PCCompat.java b/src/main/java/net/anvilcraft/pccompat/PCCompat.java index 59ba8e0..18ed0a8 100644 --- a/src/main/java/net/anvilcraft/pccompat/PCCompat.java +++ b/src/main/java/net/anvilcraft/pccompat/PCCompat.java @@ -1,39 +1,30 @@ package net.anvilcraft.pccompat; import java.lang.reflect.Field; +import java.util.HashSet; -import covers1624.powerconverters.api.registry.PowerSystemRegistry; import covers1624.powerconverters.api.registry.PowerSystemRegistry.PowerSystem; import covers1624.powerconverters.init.PowerSystems; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import net.anvilcraft.pccompat.tiles.TileEntityUniversalElectricityConsumer; -import net.anvilcraft.pccompat.tiles.TileEntityUniversalElectricityProducer; +import net.anvilcraft.pccompat.mods.UniversalElectricityProxy; @Mod( modid = "pccompat", name = "PC Compat", version = "0.1.0", - dependencies = "required-after:PowerConverters3" + dependencies = "required-after:PowerConverters3;after:basiccomponents" ) public class PCCompat { - public static PowerSystem universalElectricityPowerSystem; + public static HashSet mods = new HashSet<>(); @Mod.EventHandler public static void preInit(FMLPreInitializationEvent ev) { - PowerSystemRegistry.registerPowerSystem( - universalElectricityPowerSystem = new PowerSystem( - "Universal Electricity", - "UE", - 400, - new String[] { "LV", "MV", "HV", "EV" }, - new int[] { 60, 120, 240, 480 }, - "W" - ) - ); - + collectMods(); try { + // Fix IC2 scale "Ammount" due to mod outragous developer incompetence Field field = PowerSystem.class.getDeclaredField("scaleAmmount"); field.setAccessible(true); field.setInt(PowerSystems.powerSystemIndustrialCraft, 4000); @@ -41,13 +32,21 @@ public class PCCompat { throw new RuntimeException(e); } - GameRegistry.registerTileEntity( - TileEntityUniversalElectricityConsumer.class, "universal_electricity_consumer" - ); - GameRegistry.registerTileEntity( - TileEntityUniversalElectricityProducer.class, "universal_electricity_producer" - ); + for (IModProxy mp : mods) { + mp.registerPowerSystem(); + mp.registerBlocks(); + mp.registerTiles(); + } + } - PCCBlocks.register(); + @Mod.EventHandler + public void init(FMLInitializationEvent ev) { + for (IModProxy mp : mods) + mp.registerRecipes(); + } + + private static void collectMods() { + if (Loader.isModLoaded("basiccomponents")) + mods.add(new UniversalElectricityProxy()); } } diff --git a/src/main/java/net/anvilcraft/pccompat/mods/UniversalElectricityProxy.java b/src/main/java/net/anvilcraft/pccompat/mods/UniversalElectricityProxy.java new file mode 100644 index 0000000..21d5107 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/mods/UniversalElectricityProxy.java @@ -0,0 +1,105 @@ +package net.anvilcraft.pccompat.mods; + +import basiccomponents.common.BasicComponents; +import covers1624.powerconverters.api.registry.PowerSystemRegistry; +import covers1624.powerconverters.api.registry.PowerSystemRegistry.PowerSystem; +import cpw.mods.fml.common.registry.GameRegistry; +import net.anvilcraft.pccompat.IModProxy; +import net.anvilcraft.pccompat.blocks.BlockPowerConverterUniversalElectricity; +import net.anvilcraft.pccompat.items.ItemBlockPowerConverterUniversalElectricity; +import net.anvilcraft.pccompat.recipe.RecipeBuilder; +import net.anvilcraft.pccompat.recipe.ShapedOreRecipeAdapter; +import net.anvilcraft.pccompat.recipe.ShapelessOreRecipeAdapter; +import net.anvilcraft.pccompat.tiles.TileEntityUniversalElectricityConsumer; +import net.anvilcraft.pccompat.tiles.TileEntityUniversalElectricityProducer; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class UniversalElectricityProxy implements IModProxy { + public static PowerSystem powerSystem; + public static Block blockPowerConverter; + + @Override + public void registerPowerSystem() { + PowerSystemRegistry.registerPowerSystem( + powerSystem = new PowerSystem( + "Universal Electricity", + "UE", + 400, + new String[] { "LV", "MV", "HV", "EV" }, + new int[] { 60, 120, 240, 480 }, + "W" + ) + ); + } + + @Override + public void registerBlocks() { + GameRegistry.registerBlock( + blockPowerConverter = new BlockPowerConverterUniversalElectricity(), + ItemBlockPowerConverterUniversalElectricity.class, + "power_converter_universal_electrictity" + ); + } + + @Override + public void registerTiles() { + GameRegistry.registerTileEntity( + TileEntityUniversalElectricityConsumer.class, "universal_electricity_consumer" + ); + GameRegistry.registerTileEntity( + TileEntityUniversalElectricityProducer.class, "universal_electricity_producer" + ); + } + + @Override + public void registerRecipes() { + ItemStack batbox = new ItemStack(BasicComponents.blockMachine, 1, 4); + + new RecipeBuilder(new ShapedOreRecipeAdapter()) + .pattern("G G", " ", "GBG") + .ingredient('G', "ingotGold") + .ingredient('B', batbox) + .output(new ItemStack(blockPowerConverter, 1, 0)) + .register(); + + new RecipeBuilder(new ShapedOreRecipeAdapter()) + .pattern("G G", " B ", "G G") + .ingredient('G', "ingotGold") + .ingredient('B', batbox) + .output(new ItemStack(blockPowerConverter, 1, 2)) + .register(); + + new RecipeBuilder(new ShapedOreRecipeAdapter()) + .pattern("GBG", " ", "G G") + .ingredient('G', "ingotGold") + .ingredient('B', batbox) + .output(new ItemStack(blockPowerConverter, 1, 4)) + .register(); + + new RecipeBuilder(new ShapedOreRecipeAdapter()) + .pattern("GBG", "G G", "G G") + .ingredient('G', "ingotGold") + .ingredient('B', batbox) + .output(new ItemStack(blockPowerConverter, 1, 6)) + .register(); + + for (int i = 0; i < 8; i += 2) { + new RecipeBuilder(new ShapelessOreRecipeAdapter()) + .ingredient( + new ItemStack(blockPowerConverter, 1, i) + ) + .output( + new ItemStack(blockPowerConverter, 1, i + 1) + ) + .register(); + + new RecipeBuilder(new ShapelessOreRecipeAdapter()) + .ingredient( + new ItemStack(blockPowerConverter, 1, i + 1) + ) + .output(new ItemStack(blockPowerConverter, 1, i)) + .register(); + } + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/recipe/IRecipeAdapter.java b/src/main/java/net/anvilcraft/pccompat/recipe/IRecipeAdapter.java new file mode 100644 index 0000000..a504103 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/recipe/IRecipeAdapter.java @@ -0,0 +1,14 @@ +package net.anvilcraft.pccompat.recipe; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; + +public interface IRecipeAdapter { + public void setOutput(ItemStack item); + + public void setPattern(String... pattern); + + public void addIngredient(Object... ingredients); + + public IRecipe create(); +} diff --git a/src/main/java/net/anvilcraft/pccompat/recipe/RecipeBuilder.java b/src/main/java/net/anvilcraft/pccompat/recipe/RecipeBuilder.java new file mode 100644 index 0000000..994a3a1 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/recipe/RecipeBuilder.java @@ -0,0 +1,53 @@ +package net.anvilcraft.pccompat.recipe; + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class RecipeBuilder { + IRecipeAdapter adapter; + + public RecipeBuilder(IRecipeAdapter adapter) { + this.adapter = adapter; + } + + public RecipeBuilder output(ItemStack stack) { + this.adapter.setOutput(stack); + return this; + } + + public RecipeBuilder output(Item item) { + this.adapter.setOutput(new ItemStack(item)); + return this; + } + + public RecipeBuilder output(Block block) { + this.adapter.setOutput(new ItemStack(block)); + return this; + } + + public RecipeBuilder output(Block block, int count) { + this.adapter.setOutput(new ItemStack(block, count)); + return this; + } + + public RecipeBuilder output(Item item, int count) { + this.adapter.setOutput(new ItemStack(item, count)); + return this; + } + + public RecipeBuilder pattern(String... pat) { + this.adapter.setPattern(pat); + return this; + } + + public RecipeBuilder ingredient(Object... i) { + this.adapter.addIngredient(i); + return this; + } + + public void register() { + GameRegistry.addRecipe(this.adapter.create()); + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/recipe/ShapedOreRecipeAdapter.java b/src/main/java/net/anvilcraft/pccompat/recipe/ShapedOreRecipeAdapter.java new file mode 100644 index 0000000..a94f8bc --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/recipe/ShapedOreRecipeAdapter.java @@ -0,0 +1,42 @@ +package net.anvilcraft.pccompat.recipe; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapedOreRecipe; + +public class ShapedOreRecipeAdapter implements IRecipeAdapter { + ItemStack output; + String[] pattern; + ArrayList ingredients = new ArrayList<>(); + + @Override + public void setOutput(ItemStack item) { + this.output = item; + } + + @Override + public void setPattern(String... pattern) { + this.pattern = pattern; + } + + @Override + public void addIngredient(Object... ingredients) { + this.ingredients.add(ingredients[0]); + this.ingredients.add(ingredients[1]); + } + + @Override + public IRecipe create() { + ArrayList args = new ArrayList<>(); + + for (String pat : this.pattern) + args.add(pat); + + for (Object ing : this.ingredients) + args.add(ing); + + return new ShapedOreRecipe(this.output, args.toArray()); + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/recipe/ShapelessOreRecipeAdapter.java b/src/main/java/net/anvilcraft/pccompat/recipe/ShapelessOreRecipeAdapter.java new file mode 100644 index 0000000..4427c8c --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/recipe/ShapelessOreRecipeAdapter.java @@ -0,0 +1,32 @@ +package net.anvilcraft.pccompat.recipe; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +public class ShapelessOreRecipeAdapter implements IRecipeAdapter { + ItemStack output; + ArrayList ingredients = new ArrayList<>(); + + @Override + public void setOutput(ItemStack item) { + this.output = item; + } + + @Override + public void setPattern(String... pattern) { + throw new UnsupportedOperationException("Shapeless recipe has no pattern!"); + } + + @Override + public void addIngredient(Object... ingredients) { + this.ingredients.add(ingredients[0]); + } + + @Override + public IRecipe create() { + return new ShapelessOreRecipe(this.output, this.ingredients.toArray()); + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityConsumer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityConsumer.java index 39107ab..b4d3361 100644 --- a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityConsumer.java +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityConsumer.java @@ -1,8 +1,7 @@ package net.anvilcraft.pccompat.tiles; -import covers1624.powerconverters.api.registry.PowerSystemRegistry.PowerSystem; import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer; -import net.anvilcraft.pccompat.PCCompat; +import net.anvilcraft.pccompat.mods.UniversalElectricityProxy; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; import universalelectricity.core.UniversalElectricity; @@ -18,7 +17,7 @@ public class TileEntityUniversalElectricityConsumer public TileEntityUniversalElectricityConsumer(int voltageNameIndex) { super( - PCCompat.universalElectricityPowerSystem, voltageNameIndex, IConductor.class); + UniversalElectricityProxy.powerSystem, voltageNameIndex, IConductor.class); } // TODO: WTF diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityProducer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityProducer.java index ac3a1b0..6b7c7bc 100644 --- a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityProducer.java +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUniversalElectricityProducer.java @@ -1,7 +1,7 @@ package net.anvilcraft.pccompat.tiles; import covers1624.powerconverters.tile.main.TileEntityEnergyProducer; -import net.anvilcraft.pccompat.PCCompat; +import net.anvilcraft.pccompat.mods.UniversalElectricityProxy; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; import universalelectricity.core.block.IConductor; @@ -14,7 +14,7 @@ public class TileEntityUniversalElectricityProducer extends TileEntityEnergyProducer implements IConnector, IVoltage { public TileEntityUniversalElectricityProducer(int voltageNameIndex) { super( - PCCompat.universalElectricityPowerSystem, voltageNameIndex, IConductor.class + UniversalElectricityProxy.powerSystem, voltageNameIndex, IConductor.class ); }