From a18bc1485e40e07ab8c98b35dc7d631601c960b7 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sat, 12 Apr 2025 15:20:46 +0900 Subject: [PATCH 01/10] LandmineHeaderProvider --- dependencies.gradle | 2 +- .../plugins/wdmla/LandmineHeaderProvider.java | 29 +++++++++++++++++++ .../tconstruct/plugins/wdmla/TinkerWDMla.java | 26 +++++++++++++++++ .../resources/assets/tinker/lang/en_US.lang | 1 + 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java create mode 100644 src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java diff --git a/dependencies.gradle b/dependencies.gradle index af75f85448b..5afb1e50d9b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,7 +7,7 @@ dependencies { implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.34-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") - compileOnly("com.github.GTNewHorizons:waila:1.8.4:api") + compileOnly("com.github.GTNewHorizons:WDMla:2.3.0:dev") compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.2:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889") diff --git a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java new file mode 100644 index 00000000000..bd868664314 --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java @@ -0,0 +1,29 @@ +package tconstruct.plugins.wdmla; + +import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; +import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; +import com.gtnewhorizons.wdmla.api.ui.ITooltip; +import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import tconstruct.TConstruct; +import tconstruct.mechworks.logic.TileEntityLandmine; + +public enum LandmineHeaderProvider implements IBlockComponentProvider { + INSTANCE; + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { + if(accessor.getTileEntity() instanceof TileEntityLandmine landmine) { + ItemStack cover = landmine.getStackInSlot(3); + if(cover != null) { + ThemeHelper.INSTANCE.overrideTooltipHeader(tooltip, cover); + } + } + } + + @Override + public ResourceLocation getUid() { + return new ResourceLocation(TConstruct.modID, "landmine_header"); + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java new file mode 100644 index 00000000000..995d6d06434 --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -0,0 +1,26 @@ +package tconstruct.plugins.wdmla; + +import com.gtnewhorizons.wdmla.api.IWDMlaClientRegistration; +import com.gtnewhorizons.wdmla.api.IWDMlaCommonRegistration; +import com.gtnewhorizons.wdmla.api.IWDMlaPlugin; +import com.gtnewhorizons.wdmla.api.WDMlaPlugin; +import mantle.pulsar.pulse.Pulse; +import tconstruct.mechworks.blocks.BlockLandmine; + +@Pulse( + id = "Tinkers WDMla Compatibility", + description = "Tinkers Construct compatibility for WDMla", + modsRequired = "wdmla", + forced = true) +@WDMlaPlugin +public class TinkerWDMla implements IWDMlaPlugin { + + @Override + public void register(IWDMlaCommonRegistration registration) { + } + + @Override + public void registerClient(IWDMlaClientRegistration registration) { + registration.registerBlockComponent(LandmineHeaderProvider.INSTANCE, BlockLandmine.class); + } +} diff --git a/src/main/resources/assets/tinker/lang/en_US.lang b/src/main/resources/assets/tinker/lang/en_US.lang index d8fd249ac18..859bfae5075 100644 --- a/src/main/resources/assets/tinker/lang/en_US.lang +++ b/src/main/resources/assets/tinker/lang/en_US.lang @@ -1206,3 +1206,4 @@ item.iguana.tcon.clayBucket.Quartz.name=Molten Quartz Clay Bucket tconstruct.mobsinfocompat.tinkers_construct_beheading=Each level of beheading on your weapon gives additional %.2f%% tconstruct.mobsinfocompat.tinkers_construct_beheading_1=If you are using a Cleaver, it gives another %.2f%% +provider.wdmla.TConstruct.landmine.header=Landmine Header \ No newline at end of file From 047552ebe02cd690701af153d7f5edbcfd069f2f Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sat, 12 Apr 2025 16:50:02 +0900 Subject: [PATCH 02/10] DryingRackProvider --- .../plugins/wdmla/DryingRackProvider.java | 93 +++++++++++++++++++ .../plugins/wdmla/LandmineHeaderProvider.java | 2 +- .../tconstruct/plugins/wdmla/TinkerWDMla.java | 3 + .../resources/assets/tinker/lang/en_US.lang | 3 +- 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java diff --git a/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java new file mode 100644 index 00000000000..66ef56edc7a --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java @@ -0,0 +1,93 @@ +package tconstruct.plugins.wdmla; + +import com.google.common.collect.Lists; +import com.gtnewhorizons.wdmla.api.accessor.Accessor; +import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; +import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; +import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerDataProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; +import com.gtnewhorizons.wdmla.api.provider.ITimeFormatConfigurable; +import com.gtnewhorizons.wdmla.api.ui.IComponent; +import com.gtnewhorizons.wdmla.api.ui.ITooltip; +import com.gtnewhorizons.wdmla.api.view.ClientViewGroup; +import com.gtnewhorizons.wdmla.api.view.ItemView; +import com.gtnewhorizons.wdmla.api.view.ViewGroup; +import com.gtnewhorizons.wdmla.config.WDMlaConfig; +import com.gtnewhorizons.wdmla.impl.format.TimeFormattingPattern; +import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; +import com.gtnewhorizons.wdmla.impl.ui.component.ItemComponent; +import com.gtnewhorizons.wdmla.impl.ui.component.TextComponent; +import com.gtnewhorizons.wdmla.impl.ui.sizer.Size; +import mcp.mobius.waila.overlay.DisplayUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import tconstruct.TConstruct; +import tconstruct.blocks.logic.DryingRackLogic; +import tconstruct.library.crafting.DryingRackRecipes; + +import java.util.Arrays; + +public enum DryingRackProvider implements IBlockComponentProvider, IServerDataProvider, ITimeFormatConfigurable { + INSTANCE; + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { + ItemStack content = ItemStack.loadItemStackFromNBT(accessor.getServerData()); + if(content != null) { + int time = accessor.getServerData().getInteger("Time"); + int maxTime = accessor.getServerData().getInteger("MaxTime"); + if(time != 0 && maxTime != 0) { + ItemStack result = DryingRackRecipes.getDryingResult(content); + if(result != null) { + result.stackSize = 0; + } + IComponent progressComponent = ThemeHelper.INSTANCE.itemProgress( + Arrays.asList(content), + Arrays.asList(result), + time, + maxTime, + new TextComponent("TODO"), + accessor.showDetails()); + if (progressComponent != null) { + tooltip.child(progressComponent); + } + } + else { + String strippedName = DisplayUtil.stripSymbols(DisplayUtil.itemDisplayNameShort(content)); + TextComponent name = new TextComponent(strippedName); + int itemSize = name.getHeight(); + tooltip.horizontal().child( + new ItemComponent(content).doDrawOverlay(false).size(new Size(itemSize, itemSize))) + .text(String.valueOf(content.stackSize)).text("× ").child(name);// TODO: storage view like item display api + } + } + } + + @Override + public void appendServerData(NBTTagCompound data, BlockAccessor accessor) { + if (accessor.getTarget() instanceof DryingRackLogic tileEntity) { + ItemStack stack = tileEntity.getStackInSlot(0); + if (stack == null) { + return; + } + NBTTagCompound rawData = new NBTTagCompound(); + tileEntity.writeToNBT(rawData); + stack = stack.copy(); + stack.writeToNBT(data); + data.setInteger("MaxTime", rawData.getInteger("MaxTime")); + data.setInteger("Time", rawData.getInteger("Time")); + } + } + + @Override + public ResourceLocation getUid() { + return new ResourceLocation(TConstruct.modID.toLowerCase(), "drying_rack"); + } + + @Override + public TimeFormattingPattern getDefaultTimeFormatter() { + return TimeFormattingPattern.ALWAYS_SECOND; + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java index bd868664314..1b659860fb3 100644 --- a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java @@ -24,6 +24,6 @@ public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { @Override public ResourceLocation getUid() { - return new ResourceLocation(TConstruct.modID, "landmine_header"); + return new ResourceLocation(TConstruct.modID.toLowerCase(), "landmine_header"); } } diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index 995d6d06434..fc2736d3b7d 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -5,6 +5,7 @@ import com.gtnewhorizons.wdmla.api.IWDMlaPlugin; import com.gtnewhorizons.wdmla.api.WDMlaPlugin; import mantle.pulsar.pulse.Pulse; +import tconstruct.armor.blocks.DryingRack; import tconstruct.mechworks.blocks.BlockLandmine; @Pulse( @@ -17,10 +18,12 @@ public class TinkerWDMla implements IWDMlaPlugin { @Override public void register(IWDMlaCommonRegistration registration) { + registration.registerBlockDataProvider(DryingRackProvider.INSTANCE, DryingRack.class); } @Override public void registerClient(IWDMlaClientRegistration registration) { registration.registerBlockComponent(LandmineHeaderProvider.INSTANCE, BlockLandmine.class); + registration.registerBlockComponent(DryingRackProvider.INSTANCE, DryingRack.class); } } diff --git a/src/main/resources/assets/tinker/lang/en_US.lang b/src/main/resources/assets/tinker/lang/en_US.lang index 859bfae5075..c27c57e4ad0 100644 --- a/src/main/resources/assets/tinker/lang/en_US.lang +++ b/src/main/resources/assets/tinker/lang/en_US.lang @@ -1206,4 +1206,5 @@ item.iguana.tcon.clayBucket.Quartz.name=Molten Quartz Clay Bucket tconstruct.mobsinfocompat.tinkers_construct_beheading=Each level of beheading on your weapon gives additional %.2f%% tconstruct.mobsinfocompat.tinkers_construct_beheading_1=If you are using a Cleaver, it gives another %.2f%% -provider.wdmla.TConstruct.landmine.header=Landmine Header \ No newline at end of file +provider.wdmla.tconstruct.landmine.header=Landmine Header +provider.wdmla.tconstruct.drying.rack=Drying Rack \ No newline at end of file From a3608edbf68f3741f863869c6c422f902c0dd130 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sat, 12 Apr 2025 20:44:13 +0900 Subject: [PATCH 03/10] updated to latest api --- dependencies.gradle | 3 +- .../plugins/wdmla/DryingRackProvider.java | 45 +++++++------------ .../plugins/wdmla/LandmineHeaderProvider.java | 11 +++-- .../tconstruct/plugins/wdmla/TinkerWDMla.java | 1 + 4 files changed, 25 insertions(+), 35 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 5afb1e50d9b..804fc08eeb3 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,7 +7,8 @@ dependencies { implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.34-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") - compileOnly("com.github.GTNewHorizons:WDMla:2.3.0:dev") +// compileOnly("com.github.GTNewHorizons:WDMla:2.3.0:dev") + compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.2:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889") diff --git a/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java index 66ef56edc7a..8c6597c8ccd 100644 --- a/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java @@ -1,66 +1,51 @@ package tconstruct.plugins.wdmla; -import com.google.common.collect.Lists; -import com.gtnewhorizons.wdmla.api.accessor.Accessor; +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; -import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; import com.gtnewhorizons.wdmla.api.provider.IServerDataProvider; -import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; import com.gtnewhorizons.wdmla.api.provider.ITimeFormatConfigurable; import com.gtnewhorizons.wdmla.api.ui.IComponent; import com.gtnewhorizons.wdmla.api.ui.ITooltip; -import com.gtnewhorizons.wdmla.api.view.ClientViewGroup; -import com.gtnewhorizons.wdmla.api.view.ItemView; -import com.gtnewhorizons.wdmla.api.view.ViewGroup; -import com.gtnewhorizons.wdmla.config.WDMlaConfig; import com.gtnewhorizons.wdmla.impl.format.TimeFormattingPattern; import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; -import com.gtnewhorizons.wdmla.impl.ui.component.ItemComponent; -import com.gtnewhorizons.wdmla.impl.ui.component.TextComponent; -import com.gtnewhorizons.wdmla.impl.ui.sizer.Size; -import mcp.mobius.waila.overlay.DisplayUtil; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; + import tconstruct.TConstruct; import tconstruct.blocks.logic.DryingRackLogic; import tconstruct.library.crafting.DryingRackRecipes; -import java.util.Arrays; +public enum DryingRackProvider + implements IBlockComponentProvider, IServerDataProvider, ITimeFormatConfigurable { -public enum DryingRackProvider implements IBlockComponentProvider, IServerDataProvider, ITimeFormatConfigurable { INSTANCE; @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { ItemStack content = ItemStack.loadItemStackFromNBT(accessor.getServerData()); - if(content != null) { + if (content != null) { int time = accessor.getServerData().getInteger("Time"); int maxTime = accessor.getServerData().getInteger("MaxTime"); - if(time != 0 && maxTime != 0) { + if (time != 0 && maxTime != 0) { ItemStack result = DryingRackRecipes.getDryingResult(content); - if(result != null) { + if (result != null) { result.stackSize = 0; } - IComponent progressComponent = ThemeHelper.INSTANCE.itemProgress( + IComponent progressComponent = ThemeHelper.INSTANCE.furnaceLikeProgress( Arrays.asList(content), Arrays.asList(result), time, maxTime, - new TextComponent("TODO"), accessor.showDetails()); if (progressComponent != null) { tooltip.child(progressComponent); } - } - else { - String strippedName = DisplayUtil.stripSymbols(DisplayUtil.itemDisplayNameShort(content)); - TextComponent name = new TextComponent(strippedName); - int itemSize = name.getHeight(); - tooltip.horizontal().child( - new ItemComponent(content).doDrawOverlay(false).size(new Size(itemSize, itemSize))) - .text(String.valueOf(content.stackSize)).text("× ").child(name);// TODO: storage view like item display api + } else { + tooltip.child(ThemeHelper.INSTANCE.itemStackFullLine(content)); } } } diff --git a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java index 1b659860fb3..3cc602ad04a 100644 --- a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java @@ -1,22 +1,25 @@ package tconstruct.plugins.wdmla; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; import com.gtnewhorizons.wdmla.api.ui.ITooltip; import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; + import tconstruct.TConstruct; import tconstruct.mechworks.logic.TileEntityLandmine; public enum LandmineHeaderProvider implements IBlockComponentProvider { + INSTANCE; @Override public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { - if(accessor.getTileEntity() instanceof TileEntityLandmine landmine) { + if (accessor.getTileEntity() instanceof TileEntityLandmine landmine) { ItemStack cover = landmine.getStackInSlot(3); - if(cover != null) { + if (cover != null) { ThemeHelper.INSTANCE.overrideTooltipHeader(tooltip, cover); } } diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index fc2736d3b7d..41a29a35223 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -4,6 +4,7 @@ import com.gtnewhorizons.wdmla.api.IWDMlaCommonRegistration; import com.gtnewhorizons.wdmla.api.IWDMlaPlugin; import com.gtnewhorizons.wdmla.api.WDMlaPlugin; + import mantle.pulsar.pulse.Pulse; import tconstruct.armor.blocks.DryingRack; import tconstruct.mechworks.blocks.BlockLandmine; From 2da6d3e9ace847b9dcdd6c90f3a6ff08160300f4 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sat, 12 Apr 2025 21:36:50 +0900 Subject: [PATCH 04/10] FurnaceSlabProvider --- .../plugins/wdmla/DryingRackProvider.java | 13 +-- .../plugins/wdmla/FurnaceSlabProvider.java | 81 +++++++++++++++++++ .../plugins/wdmla/LandmineHeaderProvider.java | 3 +- .../tconstruct/plugins/wdmla/TinkerWDMla.java | 12 +++ .../resources/assets/tinker/lang/en_US.lang | 3 +- 5 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 src/main/java/tconstruct/plugins/wdmla/FurnaceSlabProvider.java diff --git a/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java index 8c6597c8ccd..a656a54debf 100644 --- a/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/DryingRackProvider.java @@ -9,18 +9,14 @@ import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; import com.gtnewhorizons.wdmla.api.provider.IServerDataProvider; -import com.gtnewhorizons.wdmla.api.provider.ITimeFormatConfigurable; import com.gtnewhorizons.wdmla.api.ui.IComponent; import com.gtnewhorizons.wdmla.api.ui.ITooltip; -import com.gtnewhorizons.wdmla.impl.format.TimeFormattingPattern; import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; -import tconstruct.TConstruct; import tconstruct.blocks.logic.DryingRackLogic; import tconstruct.library.crafting.DryingRackRecipes; -public enum DryingRackProvider - implements IBlockComponentProvider, IServerDataProvider, ITimeFormatConfigurable { +public enum DryingRackProvider implements IBlockComponentProvider, IServerDataProvider { INSTANCE; @@ -68,11 +64,6 @@ public void appendServerData(NBTTagCompound data, BlockAccessor accessor) { @Override public ResourceLocation getUid() { - return new ResourceLocation(TConstruct.modID.toLowerCase(), "drying_rack"); - } - - @Override - public TimeFormattingPattern getDefaultTimeFormatter() { - return TimeFormattingPattern.ALWAYS_SECOND; + return TinkerWDMla.TiC("drying_rack"); } } diff --git a/src/main/java/tconstruct/plugins/wdmla/FurnaceSlabProvider.java b/src/main/java/tconstruct/plugins/wdmla/FurnaceSlabProvider.java new file mode 100644 index 00000000000..ad8ced39fc9 --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/FurnaceSlabProvider.java @@ -0,0 +1,81 @@ +package tconstruct.plugins.wdmla; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; + +import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; +import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerDataProvider; +import com.gtnewhorizons.wdmla.api.ui.IComponent; +import com.gtnewhorizons.wdmla.api.ui.ITooltip; +import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; + +import tconstruct.tools.logic.FurnaceLogic; + +public enum FurnaceSlabProvider implements IBlockComponentProvider, IServerDataProvider { + + INSTANCE; + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { + if (accessor.getTileEntity() instanceof FurnaceLogic) { + int cookTime = accessor.getServerData().getShort("Progress"); + int maxCookTime = accessor.getServerData().getShort("MaxProgress"); + + ItemStack[] items = new ItemStack[3]; + NBTTagList itemsTag = accessor.getServerData().getTagList("Items", 10); + + boolean allEmpty = true; + for (int i = 0; i < itemsTag.tagCount(); i++) { + NBTTagCompound itemTag = itemsTag.getCompoundTagAt(i); + byte slot = itemTag.getByte("Slot"); + + if (slot >= 0 && slot < items.length) { + items[slot] = ItemStack.loadItemStackFromNBT(itemTag); + if (items[slot] != null) { + allEmpty = false; + } + } + } + + if (items[0] != null && items[2] == null) { + ItemStack resultStack = FurnaceRecipes.smelting().getSmeltingResult(items[0]); + if (resultStack != null) { + items[2] = resultStack.copy(); + items[2].stackSize = 0; + } + } + + if (!allEmpty) { + IComponent progressComponent = ThemeHelper.INSTANCE.furnaceLikeProgress( + Arrays.asList(items[0], items[1]), + Arrays.asList(items[2]), + cookTime, + maxCookTime, + accessor.showDetails()); + if (progressComponent != null) { + tooltip.child(progressComponent); + } + } + } + } + + @Override + public void appendServerData(NBTTagCompound data, BlockAccessor accessor) { + if (accessor.getTileEntity() instanceof FurnaceLogic logic) { + logic.writeToNBT(data); + data.setInteger("Progress", logic.progress); + data.setInteger("MaxProgress", logic.fuelScale); + } + } + + @Override + public ResourceLocation getUid() { + return TinkerWDMla.TiC("furnace_slab"); + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java index 3cc602ad04a..55f2d395bf7 100644 --- a/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/LandmineHeaderProvider.java @@ -8,7 +8,6 @@ import com.gtnewhorizons.wdmla.api.ui.ITooltip; import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; -import tconstruct.TConstruct; import tconstruct.mechworks.logic.TileEntityLandmine; public enum LandmineHeaderProvider implements IBlockComponentProvider { @@ -27,6 +26,6 @@ public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { @Override public ResourceLocation getUid() { - return new ResourceLocation(TConstruct.modID.toLowerCase(), "landmine_header"); + return TinkerWDMla.TiC("landmine_header"); } } diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index 41a29a35223..e30a8140cf1 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -1,13 +1,18 @@ package tconstruct.plugins.wdmla; +import net.minecraft.util.ResourceLocation; + import com.gtnewhorizons.wdmla.api.IWDMlaClientRegistration; import com.gtnewhorizons.wdmla.api.IWDMlaCommonRegistration; import com.gtnewhorizons.wdmla.api.IWDMlaPlugin; import com.gtnewhorizons.wdmla.api.WDMlaPlugin; +import com.gtnewhorizons.wdmla.plugin.vanilla.TECustomNameHeaderProvider; import mantle.pulsar.pulse.Pulse; +import tconstruct.TConstruct; import tconstruct.armor.blocks.DryingRack; import tconstruct.mechworks.blocks.BlockLandmine; +import tconstruct.tools.blocks.FurnaceSlab; @Pulse( id = "Tinkers WDMla Compatibility", @@ -20,11 +25,18 @@ public class TinkerWDMla implements IWDMlaPlugin { @Override public void register(IWDMlaCommonRegistration registration) { registration.registerBlockDataProvider(DryingRackProvider.INSTANCE, DryingRack.class); + registration.registerBlockDataProvider(TECustomNameHeaderProvider.INSTANCE, FurnaceSlab.class); + registration.registerBlockDataProvider(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); } @Override public void registerClient(IWDMlaClientRegistration registration) { registration.registerBlockComponent(LandmineHeaderProvider.INSTANCE, BlockLandmine.class); registration.registerBlockComponent(DryingRackProvider.INSTANCE, DryingRack.class); + registration.registerBlockComponent(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + } + + public static ResourceLocation TiC(String uid) { + return new ResourceLocation(TConstruct.modID.toLowerCase(), uid); } } diff --git a/src/main/resources/assets/tinker/lang/en_US.lang b/src/main/resources/assets/tinker/lang/en_US.lang index c27c57e4ad0..33ef0b80ae1 100644 --- a/src/main/resources/assets/tinker/lang/en_US.lang +++ b/src/main/resources/assets/tinker/lang/en_US.lang @@ -1207,4 +1207,5 @@ tconstruct.mobsinfocompat.tinkers_construct_beheading=Each level of beheading on tconstruct.mobsinfocompat.tinkers_construct_beheading_1=If you are using a Cleaver, it gives another %.2f%% provider.wdmla.tconstruct.landmine.header=Landmine Header -provider.wdmla.tconstruct.drying.rack=Drying Rack \ No newline at end of file +provider.wdmla.tconstruct.drying.rack=Drying Rack +provider.wdmla.tconstruct.furnace.slab=Slab Furnace \ No newline at end of file From 6ee934875ac55db68f65f1f9db05bac316aba368 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sat, 12 Apr 2025 22:25:57 +0900 Subject: [PATCH 05/10] supports probably all unsupported TiC storages --- src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index e30a8140cf1..fbf38bfc902 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -1,5 +1,7 @@ package tconstruct.plugins.wdmla; +import com.gtnewhorizons.wdmla.plugin.universal.ItemStorageProvider; +import mantle.blocks.abstracts.InventorySlab; import net.minecraft.util.ResourceLocation; import com.gtnewhorizons.wdmla.api.IWDMlaClientRegistration; @@ -12,7 +14,9 @@ import tconstruct.TConstruct; import tconstruct.armor.blocks.DryingRack; import tconstruct.mechworks.blocks.BlockLandmine; +import tconstruct.tools.blocks.CraftingStationBlock; import tconstruct.tools.blocks.FurnaceSlab; +import tconstruct.tools.blocks.ToolStationBlock; @Pulse( id = "Tinkers WDMla Compatibility", @@ -27,6 +31,9 @@ public void register(IWDMlaCommonRegistration registration) { registration.registerBlockDataProvider(DryingRackProvider.INSTANCE, DryingRack.class); registration.registerBlockDataProvider(TECustomNameHeaderProvider.INSTANCE, FurnaceSlab.class); registration.registerBlockDataProvider(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, CraftingStationBlock.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, ToolStationBlock.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, InventorySlab.class); } @Override From 90af04b85c651ec151228ef9e3eff1291c714929 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Sun, 13 Apr 2025 21:57:27 +0900 Subject: [PATCH 06/10] supports fluid storage --- .../tconstruct/plugins/waila/TinkerWaila.java | 5 ++ .../plugins/wdmla/SmelteryFluidProvider.java | 50 +++++++++++++++++++ .../tconstruct/plugins/wdmla/TinkerWDMla.java | 14 ++++++ 3 files changed, 69 insertions(+) create mode 100644 src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java diff --git a/src/main/java/tconstruct/plugins/waila/TinkerWaila.java b/src/main/java/tconstruct/plugins/waila/TinkerWaila.java index 66863cf7d0f..652ec98315c 100644 --- a/src/main/java/tconstruct/plugins/waila/TinkerWaila.java +++ b/src/main/java/tconstruct/plugins/waila/TinkerWaila.java @@ -1,5 +1,6 @@ package tconstruct.plugins.waila; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.registry.GameRegistry.ObjectHolder; @@ -17,6 +18,10 @@ public class TinkerWaila { @Handler public void init(FMLInitializationEvent event) { + if(Loader.isModLoaded("wdmla")) { + return; + } + TConstruct.logger.info("Waila detected. Registering TConstruct tank blocks with Waila registry."); FMLInterModComms.sendMessage("Waila", "register", "tconstruct.plugins.waila.WailaRegistrar.wailaCallback"); } diff --git a/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java b/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java new file mode 100644 index 00000000000..b863014ae4b --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java @@ -0,0 +1,50 @@ +package tconstruct.plugins.wdmla; + +import com.gtnewhorizons.wdmla.api.accessor.Accessor; +import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; +import com.gtnewhorizons.wdmla.api.view.ClientViewGroup; +import com.gtnewhorizons.wdmla.api.view.FluidView; +import com.gtnewhorizons.wdmla.api.view.ViewGroup; +import net.minecraft.util.ResourceLocation; +import tconstruct.smeltery.logic.SmelteryLogic; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public enum SmelteryFluidProvider implements IServerExtensionProvider, IClientExtensionProvider { + INSTANCE; + + private static final int FLUID_LIMIT = 4; + + @Override + public List> getClientGroups(Accessor accessor, List> groups) { + return ClientViewGroup.map(groups, FluidView::readDefault, (group, clientGroup) -> {}); + } + + @Override + public List> getGroups(Accessor accessor) { + if(!(accessor.getTarget() instanceof SmelteryLogic smelteryLogic)) { + return null; + } + if(smelteryLogic.moltenMetal.isEmpty()) { + return Arrays.asList( + new ViewGroup<>(Arrays.asList(new FluidView.Data(null, smelteryLogic.maxLiquid))) + ); + } + List> tanks = smelteryLogic.moltenMetal.stream().limit(FLUID_LIMIT).map( + fluidStack -> new ViewGroup<>( + Arrays.asList(new FluidView.Data(fluidStack, smelteryLogic.maxLiquid)))) + .collect(Collectors.toList()); + if(smelteryLogic.moltenMetal.size() > FLUID_LIMIT) { + tanks.get(FLUID_LIMIT - 1).getExtraData().setInteger("+", smelteryLogic.moltenMetal.size() - tanks.size()); + } + return tanks; + } + + @Override + public ResourceLocation getUid() { + return TinkerWDMla.TiC("smeltery_fluid"); + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index fbf38bfc902..2f29fa7f81f 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -1,5 +1,6 @@ package tconstruct.plugins.wdmla; +import com.gtnewhorizons.wdmla.plugin.universal.FluidStorageProvider; import com.gtnewhorizons.wdmla.plugin.universal.ItemStorageProvider; import mantle.blocks.abstracts.InventorySlab; import net.minecraft.util.ResourceLocation; @@ -14,6 +15,10 @@ import tconstruct.TConstruct; import tconstruct.armor.blocks.DryingRack; import tconstruct.mechworks.blocks.BlockLandmine; +import tconstruct.smeltery.blocks.CastingChannelBlock; +import tconstruct.smeltery.blocks.LavaTankBlock; +import tconstruct.smeltery.blocks.SearedBlock; +import tconstruct.smeltery.blocks.SmelteryBlock; import tconstruct.tools.blocks.CraftingStationBlock; import tconstruct.tools.blocks.FurnaceSlab; import tconstruct.tools.blocks.ToolStationBlock; @@ -31,9 +36,16 @@ public void register(IWDMlaCommonRegistration registration) { registration.registerBlockDataProvider(DryingRackProvider.INSTANCE, DryingRack.class); registration.registerBlockDataProvider(TECustomNameHeaderProvider.INSTANCE, FurnaceSlab.class); registration.registerBlockDataProvider(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, CraftingStationBlock.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, ToolStationBlock.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, InventorySlab.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, SmelteryBlock.class); + + registration.registerFluidStorage(SmelteryFluidProvider.INSTANCE, SmelteryBlock.class); + registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, LavaTankBlock.class); + registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, CastingChannelBlock.class); + registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, SearedBlock.class); } @Override @@ -41,6 +53,8 @@ public void registerClient(IWDMlaClientRegistration registration) { registration.registerBlockComponent(LandmineHeaderProvider.INSTANCE, BlockLandmine.class); registration.registerBlockComponent(DryingRackProvider.INSTANCE, DryingRack.class); registration.registerBlockComponent(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + + registration.registerFluidStorageClient(SmelteryFluidProvider.INSTANCE); } public static ResourceLocation TiC(String uid) { From 43a538b4ce5e017036e8af9ac8d2e6c48ebd15d0 Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Mon, 21 Apr 2025 04:09:00 +0900 Subject: [PATCH 07/10] update dependency --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 804fc08eeb3..b306a6c960b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,8 +7,8 @@ dependencies { implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.34-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") -// compileOnly("com.github.GTNewHorizons:WDMla:2.3.0:dev") - compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) + compileOnly("com.github.GTNewHorizons:WDMla:2.4.0:dev") +// compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.2:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889") From 2af7f931448bdbd2dcb59c81a413e15ccae13c6a Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Fri, 25 Apr 2025 10:58:07 +0900 Subject: [PATCH 08/10] SearedBlockProgressProvider --- dependencies.gradle | 4 +- .../wdmla/SearedBlockProgressProvider.java | 51 +++++++++++++++++++ .../tconstruct/plugins/wdmla/TinkerWDMla.java | 5 ++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java diff --git a/dependencies.gradle b/dependencies.gradle index b306a6c960b..0db8bc3745d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,8 +7,8 @@ dependencies { implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.34-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") - compileOnly("com.github.GTNewHorizons:WDMla:2.4.0:dev") -// compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) +// compileOnly("com.github.GTNewHorizons:WDMla:2.4.0:dev") + compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.2:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889") diff --git a/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java b/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java new file mode 100644 index 00000000000..14fb57d1125 --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java @@ -0,0 +1,51 @@ +package tconstruct.plugins.wdmla; + +import com.gtnewhorizons.wdmla.api.accessor.Accessor; +import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; +import com.gtnewhorizons.wdmla.api.view.ClientViewGroup; +import com.gtnewhorizons.wdmla.api.view.ProgressView; +import com.gtnewhorizons.wdmla.api.view.ViewGroup; +import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; +import com.gtnewhorizons.wdmla.util.FormatUtil; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import tconstruct.smeltery.logic.CastingBlockLogic; + +import java.util.Arrays; +import java.util.List; + +public enum SearedBlockProgressProvider implements IServerExtensionProvider, + IClientExtensionProvider { + INSTANCE; + + @Override + public ResourceLocation getUid() { + return TinkerWDMla.TiC("seared_blocks"); + } + + @Override + public List> getClientGroups(Accessor accessor, List> groups) { + return ClientViewGroup.map(groups, ProgressView::read, (group, clientGroup) -> { + ProgressView view = clientGroup.views.get(0); + view.description = ThemeHelper.INSTANCE.value( + StatCollector.translateToLocal("hud.msg.wdmla.progress"), + FormatUtil.PERCENTAGE_STANDARD.format((float) view.progress / 100)); + view.hasScale = true; + }); + } + + @Override + public List> getGroups(Accessor accessor) { + if(accessor.getTarget() instanceof CastingBlockLogic castingBlockLogic) { + int progress = castingBlockLogic.getProgress(); + if(progress == 0) { + return null; + } + ProgressView.Data progressData = new ProgressView.Data(progress, 100); + ViewGroup group = new ViewGroup<>(Arrays.asList(progressData)); + return Arrays.asList(group); + } + return null; + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index 2f29fa7f81f..c6fb9e858d3 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -41,11 +41,14 @@ public void register(IWDMlaCommonRegistration registration) { registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, ToolStationBlock.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, InventorySlab.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, SmelteryBlock.class); + registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, SearedBlock.class); registration.registerFluidStorage(SmelteryFluidProvider.INSTANCE, SmelteryBlock.class); registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, LavaTankBlock.class); registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, CastingChannelBlock.class); registration.registerFluidStorage(FluidStorageProvider.Extension.INSTANCE, SearedBlock.class); + + registration.registerProgress(SearedBlockProgressProvider.INSTANCE, SearedBlock.class); } @Override @@ -55,6 +58,8 @@ public void registerClient(IWDMlaClientRegistration registration) { registration.registerBlockComponent(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); registration.registerFluidStorageClient(SmelteryFluidProvider.INSTANCE); + + registration.registerProgressClient(SearedBlockProgressProvider.INSTANCE); } public static ResourceLocation TiC(String uid) { From 2b5465a7016cf6c90aab3aef443fa06e803a55af Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Fri, 25 Apr 2025 17:13:44 +0900 Subject: [PATCH 09/10] SmelteryFuelProvider --- .../tconstruct/plugins/waila/TinkerWaila.java | 2 +- .../wdmla/SearedBlockProgressProvider.java | 20 ++++--- .../plugins/wdmla/SmelteryFluidProvider.java | 27 ++++----- .../plugins/wdmla/SmelteryStatusProvider.java | 58 +++++++++++++++++++ .../tconstruct/plugins/wdmla/TinkerWDMla.java | 8 ++- .../smeltery/logic/SmelteryLogic.java | 8 +++ .../resources/assets/tinker/lang/en_US.lang | 3 +- 7 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 src/main/java/tconstruct/plugins/wdmla/SmelteryStatusProvider.java diff --git a/src/main/java/tconstruct/plugins/waila/TinkerWaila.java b/src/main/java/tconstruct/plugins/waila/TinkerWaila.java index 652ec98315c..48cd9a63347 100644 --- a/src/main/java/tconstruct/plugins/waila/TinkerWaila.java +++ b/src/main/java/tconstruct/plugins/waila/TinkerWaila.java @@ -18,7 +18,7 @@ public class TinkerWaila { @Handler public void init(FMLInitializationEvent event) { - if(Loader.isModLoaded("wdmla")) { + if (Loader.isModLoaded("wdmla")) { return; } diff --git a/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java b/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java index 14fb57d1125..a4e25421cf2 100644 --- a/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/SearedBlockProgressProvider.java @@ -1,5 +1,11 @@ package tconstruct.plugins.wdmla; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + import com.gtnewhorizons.wdmla.api.accessor.Accessor; import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; @@ -8,15 +14,12 @@ import com.gtnewhorizons.wdmla.api.view.ViewGroup; import com.gtnewhorizons.wdmla.impl.ui.ThemeHelper; import com.gtnewhorizons.wdmla.util.FormatUtil; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import tconstruct.smeltery.logic.CastingBlockLogic; -import java.util.Arrays; -import java.util.List; +import tconstruct.smeltery.logic.CastingBlockLogic; public enum SearedBlockProgressProvider implements IServerExtensionProvider, IClientExtensionProvider { + INSTANCE; @Override @@ -25,7 +28,8 @@ public ResourceLocation getUid() { } @Override - public List> getClientGroups(Accessor accessor, List> groups) { + public List> getClientGroups(Accessor accessor, + List> groups) { return ClientViewGroup.map(groups, ProgressView::read, (group, clientGroup) -> { ProgressView view = clientGroup.views.get(0); view.description = ThemeHelper.INSTANCE.value( @@ -37,9 +41,9 @@ public List> getClientGroups(Accessor accessor, Li @Override public List> getGroups(Accessor accessor) { - if(accessor.getTarget() instanceof CastingBlockLogic castingBlockLogic) { + if (accessor.getTarget() instanceof CastingBlockLogic castingBlockLogic) { int progress = castingBlockLogic.getProgress(); - if(progress == 0) { + if (progress == 0) { return null; } ProgressView.Data progressData = new ProgressView.Data(progress, 100); diff --git a/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java b/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java index b863014ae4b..a8cb41d88e1 100644 --- a/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java +++ b/src/main/java/tconstruct/plugins/wdmla/SmelteryFluidProvider.java @@ -1,19 +1,23 @@ package tconstruct.plugins.wdmla; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import net.minecraft.util.ResourceLocation; + import com.gtnewhorizons.wdmla.api.accessor.Accessor; import com.gtnewhorizons.wdmla.api.provider.IClientExtensionProvider; import com.gtnewhorizons.wdmla.api.provider.IServerExtensionProvider; import com.gtnewhorizons.wdmla.api.view.ClientViewGroup; import com.gtnewhorizons.wdmla.api.view.FluidView; import com.gtnewhorizons.wdmla.api.view.ViewGroup; -import net.minecraft.util.ResourceLocation; + import tconstruct.smeltery.logic.SmelteryLogic; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +public enum SmelteryFluidProvider + implements IServerExtensionProvider, IClientExtensionProvider { -public enum SmelteryFluidProvider implements IServerExtensionProvider, IClientExtensionProvider { INSTANCE; private static final int FLUID_LIMIT = 4; @@ -25,19 +29,16 @@ public List> getClientGroups(Accessor accessor, List< @Override public List> getGroups(Accessor accessor) { - if(!(accessor.getTarget() instanceof SmelteryLogic smelteryLogic)) { + if (!(accessor.getTarget() instanceof SmelteryLogic smelteryLogic)) { return null; } - if(smelteryLogic.moltenMetal.isEmpty()) { - return Arrays.asList( - new ViewGroup<>(Arrays.asList(new FluidView.Data(null, smelteryLogic.maxLiquid))) - ); + if (smelteryLogic.moltenMetal.isEmpty()) { + return Arrays.asList(new ViewGroup<>(Arrays.asList(new FluidView.Data(null, smelteryLogic.maxLiquid)))); } List> tanks = smelteryLogic.moltenMetal.stream().limit(FLUID_LIMIT).map( - fluidStack -> new ViewGroup<>( - Arrays.asList(new FluidView.Data(fluidStack, smelteryLogic.maxLiquid)))) + fluidStack -> new ViewGroup<>(Arrays.asList(new FluidView.Data(fluidStack, smelteryLogic.maxLiquid)))) .collect(Collectors.toList()); - if(smelteryLogic.moltenMetal.size() > FLUID_LIMIT) { + if (smelteryLogic.moltenMetal.size() > FLUID_LIMIT) { tanks.get(FLUID_LIMIT - 1).getExtraData().setInteger("+", smelteryLogic.moltenMetal.size() - tanks.size()); } return tanks; diff --git a/src/main/java/tconstruct/plugins/wdmla/SmelteryStatusProvider.java b/src/main/java/tconstruct/plugins/wdmla/SmelteryStatusProvider.java new file mode 100644 index 00000000000..a6a8063de3b --- /dev/null +++ b/src/main/java/tconstruct/plugins/wdmla/SmelteryStatusProvider.java @@ -0,0 +1,58 @@ +package tconstruct.plugins.wdmla; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; + +import com.gtnewhorizons.wdmla.api.accessor.BlockAccessor; +import com.gtnewhorizons.wdmla.api.provider.IBlockComponentProvider; +import com.gtnewhorizons.wdmla.api.provider.IServerDataProvider; +import com.gtnewhorizons.wdmla.api.ui.ITooltip; +import com.gtnewhorizons.wdmla.impl.ui.StatusHelper; + +import tconstruct.smeltery.logic.SmelteryLogic; + +public enum SmelteryStatusProvider implements IBlockComponentProvider, IServerDataProvider { + + INSTANCE; + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor) { + if (accessor.getServerData().hasKey("State")) { + int status = accessor.getServerData().getByte("State"); + switch (status) { + case 1: + tooltip.child(StatusHelper.INSTANCE.insufficientFuel()); + break; + case 2: + tooltip.child(StatusHelper.INSTANCE.idle()); + break; + case 3: + tooltip.child(StatusHelper.INSTANCE.runningFine()); + break; + default: + tooltip.child(StatusHelper.INSTANCE.structureIncomplete()); + break; + } + } + } + + @Override + public void appendServerData(NBTTagCompound data, BlockAccessor accessor) { + if (accessor.getTileEntity() instanceof SmelteryLogic logic) { + if (!logic.validStructure) { + data.setByte("State", (byte) 0); + } else if (!logic.hasFuel()) { + data.setByte("State", (byte) 1); + } else if (!logic.isInUse()) { + data.setByte("State", (byte) 2); + } else { + data.setByte("State", (byte) 3); + } + } + } + + @Override + public ResourceLocation getUid() { + return TinkerWDMla.TiC("smeltery_status"); + } +} diff --git a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java index c6fb9e858d3..7b1fd007088 100644 --- a/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java +++ b/src/main/java/tconstruct/plugins/wdmla/TinkerWDMla.java @@ -1,16 +1,16 @@ package tconstruct.plugins.wdmla; -import com.gtnewhorizons.wdmla.plugin.universal.FluidStorageProvider; -import com.gtnewhorizons.wdmla.plugin.universal.ItemStorageProvider; -import mantle.blocks.abstracts.InventorySlab; import net.minecraft.util.ResourceLocation; import com.gtnewhorizons.wdmla.api.IWDMlaClientRegistration; import com.gtnewhorizons.wdmla.api.IWDMlaCommonRegistration; import com.gtnewhorizons.wdmla.api.IWDMlaPlugin; import com.gtnewhorizons.wdmla.api.WDMlaPlugin; +import com.gtnewhorizons.wdmla.plugin.universal.FluidStorageProvider; +import com.gtnewhorizons.wdmla.plugin.universal.ItemStorageProvider; import com.gtnewhorizons.wdmla.plugin.vanilla.TECustomNameHeaderProvider; +import mantle.blocks.abstracts.InventorySlab; import mantle.pulsar.pulse.Pulse; import tconstruct.TConstruct; import tconstruct.armor.blocks.DryingRack; @@ -36,6 +36,7 @@ public void register(IWDMlaCommonRegistration registration) { registration.registerBlockDataProvider(DryingRackProvider.INSTANCE, DryingRack.class); registration.registerBlockDataProvider(TECustomNameHeaderProvider.INSTANCE, FurnaceSlab.class); registration.registerBlockDataProvider(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + registration.registerBlockDataProvider(SmelteryStatusProvider.INSTANCE, SmelteryBlock.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, CraftingStationBlock.class); registration.registerItemStorage(ItemStorageProvider.Extension.INSTANCE, ToolStationBlock.class); @@ -56,6 +57,7 @@ public void registerClient(IWDMlaClientRegistration registration) { registration.registerBlockComponent(LandmineHeaderProvider.INSTANCE, BlockLandmine.class); registration.registerBlockComponent(DryingRackProvider.INSTANCE, DryingRack.class); registration.registerBlockComponent(FurnaceSlabProvider.INSTANCE, FurnaceSlab.class); + registration.registerBlockComponent(SmelteryStatusProvider.INSTANCE, SmelteryBlock.class); registration.registerFluidStorageClient(SmelteryFluidProvider.INSTANCE); diff --git a/src/main/java/tconstruct/smeltery/logic/SmelteryLogic.java b/src/main/java/tconstruct/smeltery/logic/SmelteryLogic.java index 80d31fdcec2..0c53b6c5706 100644 --- a/src/main/java/tconstruct/smeltery/logic/SmelteryLogic.java +++ b/src/main/java/tconstruct/smeltery/logic/SmelteryLogic.java @@ -601,6 +601,14 @@ public FluidStack getFuel() { return new FluidStack(FluidRegistry.LAVA, 0); } + public boolean hasFuel() { + return activeLavaTank != null; + } + + public boolean isInUse() { + return inUse; + } + public FluidStack getResultFor(ItemStack stack) { return Smeltery.getSmelteryResult(stack); } diff --git a/src/main/resources/assets/tinker/lang/en_US.lang b/src/main/resources/assets/tinker/lang/en_US.lang index 33ef0b80ae1..55d4ae20bcc 100644 --- a/src/main/resources/assets/tinker/lang/en_US.lang +++ b/src/main/resources/assets/tinker/lang/en_US.lang @@ -1208,4 +1208,5 @@ tconstruct.mobsinfocompat.tinkers_construct_beheading_1=If you are using a Cleav provider.wdmla.tconstruct.landmine.header=Landmine Header provider.wdmla.tconstruct.drying.rack=Drying Rack -provider.wdmla.tconstruct.furnace.slab=Slab Furnace \ No newline at end of file +provider.wdmla.tconstruct.furnace.slab=Slab Furnace +provider.wdmla.tconstruct.smeltery.status=Smeltery Status \ No newline at end of file From 2d5cffecded07367008728aafe03b7eb44172adb Mon Sep 17 00:00:00 2001 From: Quarri6343 Date: Fri, 25 Apr 2025 18:32:26 +0900 Subject: [PATCH 10/10] updates dependency --- dependencies.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 0db8bc3745d..efeb404f648 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,8 +7,7 @@ dependencies { implementation("com.github.GTNewHorizons:NotEnoughItems:2.7.34-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") -// compileOnly("com.github.GTNewHorizons:WDMla:2.4.0:dev") - compileOnly fileTree(dir: 'run/mods', include: ['wdmla*.jar']) + compileOnly("com.github.GTNewHorizons:WDMla:2.5.0:dev") compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.2:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889")