From 7205bc0fd1662fad2f730dd93f30ecb65d40eafc Mon Sep 17 00:00:00 2001 From: IntegerLimit <103940576+IntegerLimit@users.noreply.github.com> Date: Wed, 27 Dec 2023 16:36:27 +1100 Subject: [PATCH] EIO Integration + Implement Custom Capacitors Directly --- README.md | 3 +- dependencies.gradle | 28 +++-- libs/EnderCore-1.12.2-0.5.78-core.jar | Bin 0 -> 39575 bytes repositories.gradle | 6 +- .../com/nomiceu/nomilabs/block/BlockBase.java | 2 +- .../nomilabs/block/registry/LabsBlocks.java | 2 +- .../nomiceu/nomilabs/event/ClientProxy.java | 7 ++ .../com/nomiceu/nomilabs/item/ItemBase.java | 2 +- .../nomiceu/nomilabs/item/ItemCapacitor.java | 101 ++++++++++++++++++ .../nomilabs/item/ItemExcitationCoil.java | 2 +- .../nomilabs/item/registry/LabsItems.java | 6 +- .../item/registry/register/LabsEndgame.java | 2 +- .../registry/register/LabsMicroMiners.java | 2 +- .../item/registry/register/LabsMisc.java | 6 +- .../{util => tooltip}/LabsTooltipHelper.java | 2 +- .../nomilabs/tooltip/TooltipAdder.java | 34 ++++++ .../resources/assets/nomilabs/lang/en_us.lang | 5 + 17 files changed, 186 insertions(+), 24 deletions(-) create mode 100644 libs/EnderCore-1.12.2-0.5.78-core.jar create mode 100644 src/main/java/com/nomiceu/nomilabs/item/ItemCapacitor.java rename src/main/java/com/nomiceu/nomilabs/{util => tooltip}/LabsTooltipHelper.java (98%) create mode 100644 src/main/java/com/nomiceu/nomilabs/tooltip/TooltipAdder.java diff --git a/README.md b/README.md index fe910ad1..b7c1e134 100644 --- a/README.md +++ b/README.md @@ -36,4 +36,5 @@ This mod requires [GregTech CEu](https://github.com/GregTechCEu/GregTech). Other - [Content Tweaker](https://github.com/CraftTweaker/ContentTweaker) for base textures of custom fluids - [Nomifactory](https://github.com/Nomifactory/Nomifactory) for textures of items, blocks, base code, and the original pack - [GregTech CEu](https://github.com/GregTechCEu/GregTech) for some textures -- [Data Fixer Example](https://github.com/gabor7d2/DataFixerExampleMod) for sample & base code in Data Fixes +- [GregTech CE](https://github.com/GregTechCE/GregTech) & [Data Fixer Example](https://github.com/gabor7d2/DataFixerExampleMod) for sample & base code in Data Fixes +- [GT-Expert-Core](https://github.com/GTModpackTeam/GTExpert-Core/tree/master) for development environment runtime fix for EnderCore diff --git a/dependencies.gradle b/dependencies.gradle index b85a8ecc..1c675334 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -31,10 +31,10 @@ dependencies { implementation rfg.deobf("maven.modrinth:gregtech-ce-unofficial:Kff6K1WR") // Version 2.8.5 implementation rfg.deobf("maven.modrinth:gregicality-multiblocks:4BnBEiBw") // Version 1.2.7 - // Pack Mode + // Pack Mode (from CurseForge) implementation rfg.deobf("curse.maven:packmode-278398:2567799") // Version 1.2.0 - // GroovyScript + // GroovyScript (from Cleanroom Maven) implementation ("com.cleanroommc:groovyscript:0.7.2") { transitive = false } // Version 0.7.2, transitive false is needed otherwise groovy pulls in extra JEI @@ -44,19 +44,31 @@ dependencies { implementation rfg.deobf("curse.maven:storage-drawers-223852:4655859") // Version 5.5.0 implementation rfg.deobf("curse.maven:framed-compacting-drawers-376351:3015136") // Version 1.2.7 - // Chisel, used in Microverse Projectors + // Ender IO (from CurseForge) + implementation rfg.deobf("curse.maven:ender-io-64578:4674244") // Version 5.3.72 + + // Ender Core, Dep of Ender IO, also used in-code (from CurseForge) + implementation "curse.maven:endercore-231868:4671384" // Version 0.5.78 + + // Ender Core Runtime Fix (Jar Files and Deps courtesy of GT-Expert-Core (https://github.com/GTModpackTeam/GTExpert-Core/tree/master)) + // From Local Files and AutoSave/Config Lib + runtimeOnly files("libs/EnderCore-1.12.2-0.5.78-core.jar") // Version 0.5.78, just includes the 'core' part + runtimeOnly "info.loenwind.autoconfig:AutoConfig:1.12.2-1.0.2" // Version 1.0.2 + runtimeOnly "info.loenwind.autosave:AutoSave:1.12.2-1.0.11" // Version 1.0.11 + + // Chisel, used in Microverse Projectors (from CurseForge) implementation rfg.deobf("curse.maven:chisel-235279:2915375") // Version 1.0.2.45 - // AE2, Used in Naquadah Reactors (PAE2 used) + // AE2, Used in Naquadah Reactors (AE2 Unofficial Extended Life used) (from CurseForge) implementation rfg.deobf("curse.maven:ae2-extended-life-570458:4851091") // Version 0.55.27 - // Extended Crafting, Used in Naquadah Reactors (Nomifactory Fork Used) + // Extended Crafting, Used in Naquadah Reactors (Nomifactory Fork Used) (from CurseForge) implementation rfg.deobf("curse.maven:extended-crafting-nomifactory-edition-398267:4592627") // Version 1.7.0.6 - // CTM, runtime dep for Chisel + // CTM, runtime dep for Chisel (from CurseForge) runtimeOnly "curse.maven:ctm-267602:2915363" // Version 1.0.2.31 - // Cucumber Lib, runtime and compile dep for Extended Crafting (No need for deobf, just dep) + // Cucumber Lib, runtime and compile dep for Extended Crafting (No need for deobf, just dep) (from CurseForge) implementation "curse.maven:cucumber-272335:2645867" // Version 1.1.3 // Draconic Evolution, NuclearCraft, and Extra Utilities 2, the mixin patched mods (from CurseForge) @@ -70,6 +82,6 @@ dependencies { implementation rfg.deobf("curse.maven:brandons-core-231382:3408276") // Version 2.4.20 runtimeOnly "curse.maven:redstone-flux-270789:2920436" // Version 2.1.1.1 - // Optional Deps / Integrated + // Optional Deps / Integrated (from CurseForge) implementation rfg.deobf("curse.maven:ender-storage-245174:2755787") // Ender Storage, Version 2.4.6.137 } diff --git a/libs/EnderCore-1.12.2-0.5.78-core.jar b/libs/EnderCore-1.12.2-0.5.78-core.jar new file mode 100644 index 0000000000000000000000000000000000000000..91a4bc2508393b3a36ea98ab95f164e0a7a05653 GIT binary patch literal 39575 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 tooltip, @NotNull ITooltipFlag flagIn) { + super.addInformation(stack, worldIn, tooltip, flagIn); + tooltip.add(I18n.format("tooltip.nomilabs.capacitors.description")); // Not using default here. This one adds `EnderIO`, making it clearer + // Add default info + if (SpecialTooltipHandler.showAdvancedTooltips()) + SpecialTooltipHandler.addDetailedTooltipFromResources(tooltip, Lang.MACHINE_UPGRADE.getKey()); + else + SpecialTooltipHandler.addShowDetailsTooltip(tooltip); + } + + @Override + @Nullable + public ICapabilityProvider initCapabilities(@NotNull ItemStack stack, @Nullable NBTTagCompound nbt) { + return new CapacitorCapabilityProvider(data); + } + + public static class CapacitorCapabilityProvider implements ICapabilityProvider { + private final ICapacitorData data; + public CapacitorCapabilityProvider(ICapacitorData data) { + this.data = data; + } + + @Override + public boolean hasCapability(@NotNull Capability capability, @Nullable EnumFacing facing) { + return capability == CapabilityCapacitorData.getCapNN(); + } + + @Nullable + @Override + public T getCapability(@NotNull Capability capability, @Nullable EnumFacing facing) { + if (capability == CapabilityCapacitorData.getCapNN()) + return CapabilityCapacitorData.getCapNN().cast(data); + return null; + } + } + + public enum LabsCapacitorData implements ICapacitorData { + COMPRESSED("compressed_octadic", 4), + DOUBLE_COMPRESSED("double_compressed_octadic", 5); + + private final String name; + private final float level; + + LabsCapacitorData(String name, float level) { + this.name = name; + this.level = level; + } + + + @Override + public float getUnscaledValue(@NotNull ICapacitorKey iCapacitorKey) { + return level; + } + + @NotNull + @Override + public String getUnlocalizedName() { + return name; + } + + @NotNull + @Override + public String getLocalizedName() { + return I18n.format(LabsValues.LABS_MODID + "." + name); + } + } +} diff --git a/src/main/java/com/nomiceu/nomilabs/item/ItemExcitationCoil.java b/src/main/java/com/nomiceu/nomilabs/item/ItemExcitationCoil.java index aa01f6c8..bc9dd1e6 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/ItemExcitationCoil.java +++ b/src/main/java/com/nomiceu/nomilabs/item/ItemExcitationCoil.java @@ -1,7 +1,7 @@ package com.nomiceu.nomilabs.item; import com.nomiceu.nomilabs.block.registry.LabsBlocks; -import com.nomiceu.nomilabs.util.LabsTooltipHelper; +import com.nomiceu.nomilabs.tooltip.LabsTooltipHelper; import net.minecraft.block.Block; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; diff --git a/src/main/java/com/nomiceu/nomilabs/item/registry/LabsItems.java b/src/main/java/com/nomiceu/nomilabs/item/registry/LabsItems.java index 0f290935..f4c42690 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/registry/LabsItems.java +++ b/src/main/java/com/nomiceu/nomilabs/item/registry/LabsItems.java @@ -174,10 +174,6 @@ public class LabsItems { public static ItemBase CARBON_ARMOR_PLATE; public static ItemBase LAPIS_ARMOR_PLATE; - - public static ItemBase COMPRESSED_OCTADIC_CAPACITOR; - public static ItemBase DOUBLE_COMPRESSED_OCTADIC_CAPACITOR; - // Core and North are part of the Crafting Nether Star mod. public static ItemBase NETHER_STAR_SOUTH; public static ItemBase NETHER_STAR_EAST; @@ -196,6 +192,8 @@ public class LabsItems { * Custom Behavior Items * These are Items not extending BaseItem */ + public static ItemCapacitor COMPRESSED_OCTADIC_CAPACITOR; + public static ItemCapacitor DOUBLE_COMPRESSED_OCTADIC_CAPACITOR; public static ItemHandFramingTool HAND_FRAMING_TOOL; public static ItemSmore[] SMORES; diff --git a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsEndgame.java b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsEndgame.java index 338c27af..49f4535b 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsEndgame.java +++ b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsEndgame.java @@ -8,7 +8,7 @@ import static com.nomiceu.nomilabs.util.LabsNames.makeLabsName; import static com.nomiceu.nomilabs.item.registry.LabsItems.*; -import static com.nomiceu.nomilabs.util.LabsTooltipHelper.Tooltip; +import static com.nomiceu.nomilabs.tooltip.LabsTooltipHelper.Tooltip; public class LabsEndgame { public static void initEndgame() { diff --git a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMicroMiners.java b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMicroMiners.java index 6a6b0e4a..34eec2af 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMicroMiners.java +++ b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMicroMiners.java @@ -10,7 +10,7 @@ import static com.nomiceu.nomilabs.util.LabsNames.makeLabsName; import static com.nomiceu.nomilabs.item.registry.LabsItems.*; -import static com.nomiceu.nomilabs.util.LabsTooltipHelper.Tooltip; +import static com.nomiceu.nomilabs.tooltip.LabsTooltipHelper.Tooltip; public class LabsMicroMiners { public static void initMicroMinerItems() { diff --git a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMisc.java b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMisc.java index f98ac550..43c6afd4 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMisc.java +++ b/src/main/java/com/nomiceu/nomilabs/item/registry/register/LabsMisc.java @@ -2,6 +2,7 @@ import com.nomiceu.nomilabs.creativetab.registry.LabsCreativeTabs; import com.nomiceu.nomilabs.item.ItemBase; +import com.nomiceu.nomilabs.item.ItemCapacitor; import com.nomiceu.nomilabs.item.ItemHandFramingTool; import com.nomiceu.nomilabs.item.ItemSmore; import net.minecraft.init.MobEffects; @@ -22,9 +23,6 @@ public static void initMisc() { CARBON_ARMOR_PLATE = createItem(new ItemBase(makeLabsName("carbonarmorplate"), LabsCreativeTabs.TAB_NOMI_LABS)); LAPIS_ARMOR_PLATE = createItem(new ItemBase(makeLabsName("lapisarmorplate"), LabsCreativeTabs.TAB_NOMI_LABS)); - COMPRESSED_OCTADIC_CAPACITOR = createItem(new ItemBase(makeLabsName("compressedoctadiccapacitor"), LabsCreativeTabs.TAB_NOMI_LABS)); - DOUBLE_COMPRESSED_OCTADIC_CAPACITOR = createItem(new ItemBase(makeLabsName("doublecompressedoctadiccapacitor"), LabsCreativeTabs.TAB_NOMI_LABS)); - // Core and North are part of the Crafting Nether Star mod. NETHER_STAR_SOUTH = createItem(new ItemBase(makeLabsName("netherstarsouth"), LabsCreativeTabs.TAB_NOMI_LABS)); NETHER_STAR_EAST = createItem(new ItemBase(makeLabsName("netherstareast"), LabsCreativeTabs.TAB_NOMI_LABS)); @@ -41,6 +39,8 @@ public static void initMisc() { } public static void initCustomBehavior() { + COMPRESSED_OCTADIC_CAPACITOR = createItem(new ItemCapacitor(makeLabsName("compressedoctadiccapacitor"), LabsCreativeTabs.TAB_NOMI_LABS, ItemCapacitor.LabsCapacitorData.COMPRESSED)); + DOUBLE_COMPRESSED_OCTADIC_CAPACITOR = createItem(new ItemCapacitor(makeLabsName("doublecompressedoctadiccapacitor"), LabsCreativeTabs.TAB_NOMI_LABS, ItemCapacitor.LabsCapacitorData.DOUBLE_COMPRESSED)); HAND_FRAMING_TOOL = createItem(new ItemHandFramingTool(makeLabsName("hand_framing_tool"), LabsCreativeTabs.TAB_NOMI_LABS)); SMORES = new ItemSmore[4]; createSmores(); diff --git a/src/main/java/com/nomiceu/nomilabs/util/LabsTooltipHelper.java b/src/main/java/com/nomiceu/nomilabs/tooltip/LabsTooltipHelper.java similarity index 98% rename from src/main/java/com/nomiceu/nomilabs/util/LabsTooltipHelper.java rename to src/main/java/com/nomiceu/nomilabs/tooltip/LabsTooltipHelper.java index a5bcf67a..1031f201 100644 --- a/src/main/java/com/nomiceu/nomilabs/util/LabsTooltipHelper.java +++ b/src/main/java/com/nomiceu/nomilabs/tooltip/LabsTooltipHelper.java @@ -1,4 +1,4 @@ -package com.nomiceu.nomilabs.util; +package com.nomiceu.nomilabs.tooltip; import mcjty.theoneprobe.api.IProbeInfo; import net.minecraft.client.resources.I18n; diff --git a/src/main/java/com/nomiceu/nomilabs/tooltip/TooltipAdder.java b/src/main/java/com/nomiceu/nomilabs/tooltip/TooltipAdder.java new file mode 100644 index 00000000..77021d00 --- /dev/null +++ b/src/main/java/com/nomiceu/nomilabs/tooltip/TooltipAdder.java @@ -0,0 +1,34 @@ +package com.nomiceu.nomilabs.tooltip; + +import com.enderio.core.client.handlers.SpecialTooltipHandler; +import crazypants.enderio.api.capacitor.CapabilityCapacitorData; +import crazypants.enderio.base.capacitor.CapacitorKey; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.List; +import java.util.Objects; + +@SideOnly(Side.CLIENT) +public class TooltipAdder { + public static void addTooltipNormal(List tooltip, ItemStack stack) { + // Add Information of EIO Capacitors' Levels + if (stack.hasCapability(CapabilityCapacitorData.getCapNN(), null)) { + if (!SpecialTooltipHandler.showAdvancedTooltips()) return; + + var cap = Objects.requireNonNull(stack.getCapability(CapabilityCapacitorData.getCapNN(), null)); // Null shouldn't happen, as hasCapability returned true + var level = cap.getUnscaledValue(CapacitorKey.NO_POWER); + + var formatter = new DecimalFormat("0.##"); // Format Levels to two decimal places (or less, this also removes trailing zeros) + formatter.setRoundingMode(RoundingMode.HALF_UP); // Rounds up if in the middle (.5), else rounds to nearest + + // No clue what to use as the capacitor key, using NO_POWER, common declarations, in EnderIO and Nomi-Labs, don't use that parameter anyways + tooltip.add(TextFormatting.DARK_PURPLE + I18n.format("tooltip.nomilabs.capacitors.level", formatter.format(level))); + } + } +} diff --git a/src/main/resources/assets/nomilabs/lang/en_us.lang b/src/main/resources/assets/nomilabs/lang/en_us.lang index 4b618c82..382e467e 100644 --- a/src/main/resources/assets/nomilabs/lang/en_us.lang +++ b/src/main/resources/assets/nomilabs/lang/en_us.lang @@ -464,6 +464,8 @@ recipemap.dme_sim_chamber.name=Simulation # General tooltip.nomilabs.general.press_shift_for_usages=Press [Shift] for More Usages. tooltip.nomilabs.general.press_ctrl_for_usages=Press [Ctrl] for More Usages. +tooltip.nomilabs.general.press_shift_for_info=Press [Shift] for More Info. +tooltip.nomilabs.general.press_ctrl_for_info=Press [Ctrl] for More Info. # Items tooltip.nomilabs.excitationcoil.description_block=Crafting Component Only. @@ -503,6 +505,9 @@ tooltip.stabilized_miners.description3=It looks oddly familiar. tooltip.stabilized_matters.description=An infinite and incomprehensible abyss of materials. +tooltip.nomilabs.capacitors.description=EnderIO Machine Upgrade +tooltip.nomilabs.capacitors.level=Level: %s + # Multiblocks tooltip.nomilabs.microverse_projector_1.description=A machine capable of stabilizing projection into microverses for basic micro miner missions. tooltip.nomilabs.microverse_projector_2.description=An advanced machine capable of stabilizing projection into microverses for complex missions into the deepest parts of space.