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 00000000..91a4bc25 Binary files /dev/null and b/libs/EnderCore-1.12.2-0.5.78-core.jar differ diff --git a/repositories.gradle b/repositories.gradle index e2411af6..b7525b3d 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -1,7 +1,11 @@ // Add any additional repositories for your dependencies here repositories { - maven { + maven { // Mixin Maven Fix url = 'https://repo.spongepowered.org/maven' } + maven { // Autoconfig and Autosave + name 'Mod Maven' + url 'https://modmaven.dev' + } } diff --git a/src/main/java/com/nomiceu/nomilabs/block/BlockBase.java b/src/main/java/com/nomiceu/nomilabs/block/BlockBase.java index 07826f70..0655ae04 100644 --- a/src/main/java/com/nomiceu/nomilabs/block/BlockBase.java +++ b/src/main/java/com/nomiceu/nomilabs/block/BlockBase.java @@ -2,7 +2,7 @@ import com.google.common.collect.ImmutableList; import com.nomiceu.nomilabs.integration.top.TOPInfoProvider; -import com.nomiceu.nomilabs.util.LabsTooltipHelper; +import com.nomiceu.nomilabs.tooltip.LabsTooltipHelper; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/nomiceu/nomilabs/block/registry/LabsBlocks.java b/src/main/java/com/nomiceu/nomilabs/block/registry/LabsBlocks.java index 13fba2c0..2e841f2c 100644 --- a/src/main/java/com/nomiceu/nomilabs/block/registry/LabsBlocks.java +++ b/src/main/java/com/nomiceu/nomilabs/block/registry/LabsBlocks.java @@ -25,7 +25,7 @@ import java.util.function.Function; import static com.nomiceu.nomilabs.util.LabsNames.makeLabsName; -import static com.nomiceu.nomilabs.util.LabsTooltipHelper.Tooltip; +import static com.nomiceu.nomilabs.tooltip.LabsTooltipHelper.Tooltip; @SuppressWarnings("unused") public class LabsBlocks { diff --git a/src/main/java/com/nomiceu/nomilabs/event/ClientProxy.java b/src/main/java/com/nomiceu/nomilabs/event/ClientProxy.java index fadd2df4..1cb8f484 100644 --- a/src/main/java/com/nomiceu/nomilabs/event/ClientProxy.java +++ b/src/main/java/com/nomiceu/nomilabs/event/ClientProxy.java @@ -5,8 +5,10 @@ import com.nomiceu.nomilabs.fluid.registry.LabsFluids; import com.nomiceu.nomilabs.gregtech.LabsTextures; import com.nomiceu.nomilabs.item.registry.LabsItems; +import com.nomiceu.nomilabs.tooltip.TooltipAdder; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; @@ -36,4 +38,9 @@ public static void registerModels(ModelRegistryEvent event) { public static void registerFluidModels(TextureStitchEvent.Pre event) { LabsFluids.registerFluidModels(event); } + + @SubscribeEvent + public static void addTooltipNormal(ItemTooltipEvent event) { + TooltipAdder.addTooltipNormal(event.getToolTip(), event.getItemStack()); + } } diff --git a/src/main/java/com/nomiceu/nomilabs/item/ItemBase.java b/src/main/java/com/nomiceu/nomilabs/item/ItemBase.java index c0338d70..b174ed3d 100644 --- a/src/main/java/com/nomiceu/nomilabs/item/ItemBase.java +++ b/src/main/java/com/nomiceu/nomilabs/item/ItemBase.java @@ -1,7 +1,7 @@ package com.nomiceu.nomilabs.item; import com.google.common.collect.ImmutableList; -import com.nomiceu.nomilabs.util.LabsTooltipHelper; +import com.nomiceu.nomilabs.tooltip.LabsTooltipHelper; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; diff --git a/src/main/java/com/nomiceu/nomilabs/item/ItemCapacitor.java b/src/main/java/com/nomiceu/nomilabs/item/ItemCapacitor.java new file mode 100644 index 00000000..519028b3 --- /dev/null +++ b/src/main/java/com/nomiceu/nomilabs/item/ItemCapacitor.java @@ -0,0 +1,101 @@ +package com.nomiceu.nomilabs.item; + +import com.enderio.core.client.handlers.SpecialTooltipHandler; +import com.nomiceu.nomilabs.LabsValues; +import crazypants.enderio.api.capacitor.CapabilityCapacitorData; +import crazypants.enderio.api.capacitor.ICapacitorData; +import crazypants.enderio.api.capacitor.ICapacitorKey; +import crazypants.enderio.base.lang.Lang; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ItemCapacitor extends Item { + public final ICapacitorData data; + public ItemCapacitor(ResourceLocation rl, CreativeTabs tab, ICapacitorData data) { + setCreativeTab(tab); + setRegistryName(rl); + setMaxStackSize(64); + this.data = data; + } + + @Override + public void addInformation(@NotNull ItemStack stack, @Nullable World worldIn, @NotNull List 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.