From c22df9952a7f044ddc74518d8a1bf206195d1303 Mon Sep 17 00:00:00 2001 From: deirn Date: Tue, 12 Mar 2024 22:50:39 +0700 Subject: [PATCH] basic jade plugin compat disclaimer: not something i plan to release anytime soon --- gradle.properties | 2 +- platform/forge/build.gradle.kts | 4 + platform/neo/build.gradle.kts | 2 + .../waila/jaded/JadeWailaMixinPlugin.java | 48 ++++++++ .../jaded/j2w/JBlockComponentProvider.java | 57 +++++++++ .../mobius/waila/jaded/j2w/JComponent.java | 35 ++++++ .../jaded/j2w/JEntityComponentProvider.java | 25 ++++ .../waila/jaded/j2w/JPluginDiscoverer.java | 60 ++++++++++ .../waila/jaded/j2w/JPostWailaPlugin.java | 25 ++++ .../waila/jaded/j2w/JPreWailaPlugin.java | 18 +++ .../mobius/waila/jaded/j2w/JWailaPlugin.java | 26 ++++ .../waila/jaded/mixin/AccessPluginConfig.java | 22 ++++ .../mixin/AccessWailaClientRegistration.java | 22 ++++ .../mixin/AccessWailaCommonRegistration.java | 22 ++++ .../waila/jaded/mixin/MixinCommonProxy.java | 18 +++ .../waila/jaded/w2j/WClientBlockAccessor.java | 110 +++++++++++++++++ .../waila/jaded/w2j/WServerBlockAccessor.java | 113 ++++++++++++++++++ .../jaded/w2j/WServerEntityAccessor.java | 79 ++++++++++++ .../mcp/mobius/waila/jaded/w2j/WTooltip.java | 87 ++++++++++++++ .../neo/src/main/resources/META-INF/mods.toml | 3 + .../mcp.mobius.waila.api.IPluginDiscoverer | 1 + .../resources/wthit-jade-compat.mixins.json | 18 +++ 22 files changed, 796 insertions(+), 1 deletion(-) create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/JadeWailaMixinPlugin.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JBlockComponentProvider.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JComponent.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JEntityComponentProvider.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPluginDiscoverer.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPostWailaPlugin.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPreWailaPlugin.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JWailaPlugin.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessPluginConfig.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaClientRegistration.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaCommonRegistration.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/MixinCommonProxy.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WClientBlockAccessor.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerBlockAccessor.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerEntityAccessor.java create mode 100644 platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WTooltip.java create mode 100644 platform/neo/src/main/resources/wthit-jade-compat.mixins.json diff --git a/gradle.properties b/gradle.properties index d58b274fe..5a7d6457a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,7 +20,7 @@ modMenu = 9.0.0-pre.1 trEnergy = 3.0.0 forge = 49.0.9 -neo = 20.4.111-beta +neo = 20.4.198 architectury = 10.0.7 clothConfig = 12.0.107 diff --git a/platform/forge/build.gradle.kts b/platform/forge/build.gradle.kts index 94c41a0b4..f69393be1 100644 --- a/platform/forge/build.gradle.kts +++ b/platform/forge/build.gradle.kts @@ -31,6 +31,8 @@ dependencies { runtimeOnly(fg.deobf("mezz.jei:jei-${mc}-forge:${jei}")) } } + + implementation(fg.deobf("curse.maven:jade-324717:5109393")) } setupStub() @@ -59,6 +61,7 @@ minecraft { workingDirectory(file("run/${namer.determineName(this)}")) ideaModule("${rootProject.name}.${project.name}.main") + source(sourceSets["api"]) source(sourceSets["main"]) source(sourceSets["plugin"]) rootProject.sourceSets.forEach { source(it) } @@ -69,6 +72,7 @@ minecraft { mixin { add(sourceSets["main"], "wthit.refmap.json") config("wthit.mixins.json") + config("wthit-jade-compat.mixins.json") } tasks.processResources { diff --git a/platform/neo/build.gradle.kts b/platform/neo/build.gradle.kts index fe08bb8a5..f482386eb 100644 --- a/platform/neo/build.gradle.kts +++ b/platform/neo/build.gradle.kts @@ -8,6 +8,8 @@ dependencies { implementation("net.neoforged:neoforge:${rootProp["neo"]}") implementation("lol.bai:badpackets:neo-${rootProp["badpackets"]}") + implementation("curse.maven:jade-324717:5109393") + rootProp["jei"].split("-").also { (mc, jei) -> compileOnly("mezz.jei:jei-${mc}-common-api:${jei}") } diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/JadeWailaMixinPlugin.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/JadeWailaMixinPlugin.java new file mode 100644 index 000000000..2643e2f77 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/JadeWailaMixinPlugin.java @@ -0,0 +1,48 @@ +package mcp.mobius.waila.jaded; + +import java.util.List; +import java.util.Set; + +import net.neoforged.fml.loading.FMLLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +public class JadeWailaMixinPlugin implements IMixinConfigPlugin { + + private static final boolean HAS_JADE = FMLLoader.getLoadingModList().getModFileById("jade") != null; + + @Override + public void onLoad(String mixinPackage) { + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return HAS_JADE; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JBlockComponentProvider.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JBlockComponentProvider.java new file mode 100644 index 000000000..a060de32f --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JBlockComponentProvider.java @@ -0,0 +1,57 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.api.IBlockAccessor; +import mcp.mobius.waila.api.IBlockComponentProvider; +import mcp.mobius.waila.api.IDataProvider; +import mcp.mobius.waila.api.IDataWriter; +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.IServerAccessor; +import mcp.mobius.waila.api.ITooltip; +import mcp.mobius.waila.api.ITooltipComponent; +import mcp.mobius.waila.jaded.w2j.WClientBlockAccessor; +import mcp.mobius.waila.jaded.w2j.WServerBlockAccessor; +import mcp.mobius.waila.jaded.w2j.WTooltip; +import net.minecraft.world.level.block.entity.BlockEntity; +import org.jetbrains.annotations.Nullable; +import snownee.jade.impl.WailaClientRegistration; +import snownee.jade.impl.WailaCommonRegistration; +import snownee.jade.impl.config.PluginConfig; + +public enum JBlockComponentProvider implements IBlockComponentProvider, IDataProvider { + + INSTANCE; + + @Override + public @Nullable ITooltipComponent getIcon(IBlockAccessor accessor, IPluginConfig config) { + var jadeAccessor = new WClientBlockAccessor(accessor); + + for (var provider : WailaClientRegistration.instance().getBlockIconProviders(accessor.getBlock(), PluginConfig.INSTANCE::get)) { + var res = provider.getIcon(jadeAccessor, PluginConfig.INSTANCE, null); + if (res != null) { + return new JComponent(res); + } + } + + return null; + } + + @Override + public void appendBody(ITooltip tooltip, IBlockAccessor accessor, IPluginConfig config) { + var jadeAccessor = new WClientBlockAccessor(accessor); + var jadeTooltip = new WTooltip(tooltip); + + for (var provider : WailaClientRegistration.instance().getBlockProviders(accessor.getBlock(), PluginConfig.INSTANCE::get)) { + provider.appendTooltip(jadeTooltip, jadeAccessor, PluginConfig.INSTANCE); + } + } + + @Override + public void appendData(IDataWriter data, IServerAccessor accessor, IPluginConfig config) { + var jadeAccessor = new WServerBlockAccessor(data, accessor); + + for (var provider : WailaCommonRegistration.instance().getBlockNBTProviders(accessor.getTarget())) { + provider.appendServerData(data.raw(), jadeAccessor); + } + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JComponent.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JComponent.java new file mode 100644 index 000000000..c42df563d --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JComponent.java @@ -0,0 +1,35 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.api.ITooltipComponent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.phys.Vec2; +import snownee.jade.api.ui.IElement; +import snownee.jade.overlay.OverlayRenderer; + +public class JComponent implements ITooltipComponent { + + private final IElement element; + private final Vec2 size; + + public JComponent(IElement element) { + this.element = element; + this.size = element.getSize(); + } + + @Override + public int getWidth() { + return (int) size.x; + } + + @Override + public int getHeight() { + return (int) size.y; + } + + @Override + public void render(GuiGraphics ctx, int x, int y, float delta) { + OverlayRenderer.alpha = 1; + element.render(ctx, x, y, x + getWidth(), y + getHeight()); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JEntityComponentProvider.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JEntityComponentProvider.java new file mode 100644 index 000000000..dec9dec5d --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JEntityComponentProvider.java @@ -0,0 +1,25 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.api.IDataProvider; +import mcp.mobius.waila.api.IDataWriter; +import mcp.mobius.waila.api.IEntityComponentProvider; +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.IServerAccessor; +import mcp.mobius.waila.jaded.w2j.WServerEntityAccessor; +import net.minecraft.world.entity.Entity; +import snownee.jade.impl.WailaCommonRegistration; + +public enum JEntityComponentProvider implements IEntityComponentProvider, IDataProvider { + + INSTANCE; + + @Override + public void appendData(IDataWriter data, IServerAccessor accessor, IPluginConfig config) { + var jadeAccessor = new WServerEntityAccessor(data, accessor); + + for (var provider : WailaCommonRegistration.instance().getEntityNBTProviders(accessor.getTarget())) { + provider.appendServerData(data.raw(), jadeAccessor); + } + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPluginDiscoverer.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPluginDiscoverer.java new file mode 100644 index 000000000..b53598a5e --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPluginDiscoverer.java @@ -0,0 +1,60 @@ +package mcp.mobius.waila.jaded.j2w; + +import java.nio.file.Files; +import java.util.List; +import java.util.Objects; + +import com.google.common.base.CaseFormat; +import mcp.mobius.waila.Waila; +import mcp.mobius.waila.api.IPluginDiscoverer; +import mcp.mobius.waila.api.IPluginInfo; +import mcp.mobius.waila.api.WailaConstants; +import mcp.mobius.waila.util.ModInfo; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.fml.ModList; +import org.apache.commons.lang3.ClassUtils; +import snownee.jade.api.IWailaPlugin; +import snownee.jade.api.WailaPlugin; + +public class JPluginDiscoverer implements IPluginDiscoverer { + + public static final ResourceLocation ID = Waila.id("jade_compat"); + + @Override + public ResourceLocation getDiscovererId() { + return ID; + } + + @Override + public void discover(Candidates candidates) { + if (!ModInfo.get("jade").isPresent()) return; + + candidates.add(WailaConstants.MOD_ID, new ResourceLocation("jade", "pre"), IPluginInfo.Side.BOTH, List.of(), true, JPreWailaPlugin::new); + + for (var info : ModList.get().getModFiles()) { + var modFile = info.getFile(); + var modId = info.getMods().get(0).getModId(); + var hasPluginsJson = Files.exists(modFile.findResource("waila_plugins.json")) || Files.exists(modFile.findResource("wthit_plugins.json")); + + for (var annotation : modFile.getScanResult().getAnnotations()) { + if (annotation.annotationType().getClassName().equals(WailaPlugin.class.getName())) { + var required = (String) annotation.annotationData().get("value"); + + var className = annotation.memberName(); + var shortClassName = CaseFormat.UPPER_CAMEL.converterTo(CaseFormat.LOWER_UNDERSCORE).convert(ClassUtils.getShortClassName(className)); + var pluginId = new ResourceLocation(modId, Objects.requireNonNull(shortClassName)); + var hasDisabler = false; // TODO + + candidates.add( + modId, pluginId, + IPluginInfo.Side.BOTH, required != null ? List.of(required) : List.of(), + !(modId.equals("jade") || hasPluginsJson || hasDisabler), + () -> new JWailaPlugin((IWailaPlugin) Class.forName(className).getConstructor().newInstance())); + } + } + } + + candidates.add(WailaConstants.MOD_ID, new ResourceLocation("jade", "post"), IPluginInfo.Side.BOTH, List.of(), true, JPostWailaPlugin::new); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPostWailaPlugin.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPostWailaPlugin.java new file mode 100644 index 000000000..abb1d7bf7 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPostWailaPlugin.java @@ -0,0 +1,25 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.api.IRegistrar; +import mcp.mobius.waila.api.IWailaPlugin; +import mcp.mobius.waila.api.TooltipPosition; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import snownee.jade.Jade; + +public class JPostWailaPlugin implements IWailaPlugin { + + @Override + public void register(IRegistrar registrar) { + Jade.FROZEN = false; + Jade.loadComplete(); + + registrar.addIcon(JBlockComponentProvider.INSTANCE, Block.class); + registrar.addComponent(JBlockComponentProvider.INSTANCE, TooltipPosition.BODY, Block.class); + registrar.addBlockData(JBlockComponentProvider.INSTANCE, BlockEntity.class); + + registrar.addEntityData(JEntityComponentProvider.INSTANCE, Entity.class); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPreWailaPlugin.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPreWailaPlugin.java new file mode 100644 index 000000000..8296d3a3b --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JPreWailaPlugin.java @@ -0,0 +1,18 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.api.IRegistrar; +import mcp.mobius.waila.api.IWailaPlugin; +import mcp.mobius.waila.jaded.mixin.AccessPluginConfig; +import mcp.mobius.waila.jaded.mixin.AccessWailaClientRegistration; +import mcp.mobius.waila.jaded.mixin.AccessWailaCommonRegistration; + +public class JPreWailaPlugin implements IWailaPlugin { + + @Override + public void register(IRegistrar registrar) { + AccessPluginConfig.wthit_setInstance(AccessPluginConfig.wthit_new()); + AccessWailaCommonRegistration.wthit_setInstance(AccessWailaCommonRegistration.wthit_new()); + AccessWailaClientRegistration.wthit_setInstance(AccessWailaClientRegistration.wthit_new()); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JWailaPlugin.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JWailaPlugin.java new file mode 100644 index 000000000..d23cddd9f --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/j2w/JWailaPlugin.java @@ -0,0 +1,26 @@ +package mcp.mobius.waila.jaded.j2w; + +import mcp.mobius.waila.Waila; +import mcp.mobius.waila.api.IRegistrar; +import mcp.mobius.waila.api.IWailaPlugin; +import snownee.jade.impl.WailaClientRegistration; +import snownee.jade.impl.WailaCommonRegistration; + +public class JWailaPlugin implements IWailaPlugin { + + public final snownee.jade.api.IWailaPlugin jade; + + public JWailaPlugin(snownee.jade.api.IWailaPlugin jade) { + this.jade = jade; + } + + @Override + public void register(IRegistrar registrar) { + jade.register(WailaCommonRegistration.instance()); + + if (Waila.CLIENT_SIDE) { + jade.registerClient(WailaClientRegistration.instance()); + } + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessPluginConfig.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessPluginConfig.java new file mode 100644 index 000000000..7cab95523 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessPluginConfig.java @@ -0,0 +1,22 @@ +package mcp.mobius.waila.jaded.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; +import snownee.jade.impl.config.PluginConfig; + +@Mixin(PluginConfig.class) +public interface AccessPluginConfig { + + @Invoker("") + static PluginConfig wthit_new() { + throw new AssertionError(""); + } + + @Mutable + @Accessor("INSTANCE") + static void wthit_setInstance(PluginConfig instance) { + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaClientRegistration.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaClientRegistration.java new file mode 100644 index 000000000..8fa234d03 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaClientRegistration.java @@ -0,0 +1,22 @@ +package mcp.mobius.waila.jaded.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; +import snownee.jade.impl.WailaClientRegistration; + +@Mixin(WailaClientRegistration.class) +public interface AccessWailaClientRegistration { + + @Invoker("") + static WailaClientRegistration wthit_new() { + throw new AssertionError(""); + } + + @Mutable + @Accessor("INSTANCE") + static void wthit_setInstance(WailaClientRegistration instance) { + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaCommonRegistration.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaCommonRegistration.java new file mode 100644 index 000000000..2a86014fe --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/AccessWailaCommonRegistration.java @@ -0,0 +1,22 @@ +package mcp.mobius.waila.jaded.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; +import snownee.jade.impl.WailaCommonRegistration; + +@Mixin(WailaCommonRegistration.class) +public interface AccessWailaCommonRegistration { + + @Invoker("") + static WailaCommonRegistration wthit_new() { + throw new AssertionError(""); + } + + @Mutable + @Accessor("INSTANCE") + static void wthit_setInstance(WailaCommonRegistration instance) { + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/MixinCommonProxy.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/MixinCommonProxy.java new file mode 100644 index 000000000..12a635d3c --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/mixin/MixinCommonProxy.java @@ -0,0 +1,18 @@ +package mcp.mobius.waila.jaded.mixin; + +import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import snownee.jade.util.CommonProxy; + +@Mixin(CommonProxy.class) +public abstract class MixinCommonProxy { + + @Inject(method = "loadComplete", at = @At("HEAD"), cancellable = true, remap = false) + private void wthit_loadPlugin(FMLLoadCompleteEvent event, CallbackInfo ci) { + ci.cancel(); + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WClientBlockAccessor.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WClientBlockAccessor.java new file mode 100644 index 000000000..f6f69bb8b --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WClientBlockAccessor.java @@ -0,0 +1,110 @@ +package mcp.mobius.waila.jaded.w2j; + +import mcp.mobius.waila.api.IBlockAccessor; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.NotNull; +import snownee.jade.api.BlockAccessor; + +public class WClientBlockAccessor implements BlockAccessor { + + private final IBlockAccessor accessor; + + public WClientBlockAccessor(IBlockAccessor accessor) { + this.accessor = accessor; + } + + @Override + public Block getBlock() { + return accessor.getBlock(); + } + + @Override + public BlockState getBlockState() { + return accessor.getBlockState(); + } + + @Override + public BlockEntity getBlockEntity() { + return accessor.getBlockEntity(); + } + + @Override + public BlockPos getPosition() { + return accessor.getPosition(); + } + + @Override + public Direction getSide() { + return accessor.getSide(); + } + + @Override + public boolean isFakeBlock() { + return false; + } + + @Override + public ItemStack getFakeBlock() { + return ItemStack.EMPTY; + } + + @Override + public Level getLevel() { + return accessor.getWorld(); + } + + @Override + public Player getPlayer() { + return accessor.getPlayer(); + } + + @Override + public @NotNull CompoundTag getServerData() { + return accessor.getData().raw(); + } + + @Override + public BlockHitResult getHitResult() { + return accessor.getBlockHitResult(); + } + + @Override + public boolean isServerConnected() { + return true; + } + + @Override + public ItemStack getPickedResult() { + return accessor.getStack(); + } + + @Override + public boolean showDetails() { + return true; + } + + @Override + public Object getTarget() { + return accessor.getBlock(); + } + + @Override + public void toNetwork(FriendlyByteBuf friendlyByteBuf) { + } + + @Override + public boolean verifyData(CompoundTag compoundTag) { + return true; + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerBlockAccessor.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerBlockAccessor.java new file mode 100644 index 000000000..b3f40c887 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerBlockAccessor.java @@ -0,0 +1,113 @@ +package mcp.mobius.waila.jaded.w2j; + +import mcp.mobius.waila.api.IDataWriter; +import mcp.mobius.waila.api.IServerAccessor; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.NotNull; +import snownee.jade.api.BlockAccessor; + +public class WServerBlockAccessor implements BlockAccessor { + + private final IDataWriter data; + private final IServerAccessor accessor; + + public WServerBlockAccessor(IDataWriter data, IServerAccessor accessor) { + this.data = data; + this.accessor = accessor; + } + + @Override + public Block getBlock() { + return accessor.getTarget().getBlockState().getBlock(); + } + + @Override + public BlockState getBlockState() { + return accessor.getTarget().getBlockState(); + } + + @Override + public BlockEntity getBlockEntity() { + return accessor.getTarget(); + } + + @Override + public BlockPos getPosition() { + return accessor.getTarget().getBlockPos(); + } + + @Override + public Direction getSide() { + return accessor.getHitResult().getDirection(); + } + + @Override + public boolean isFakeBlock() { + return false; + } + + @Override + public ItemStack getFakeBlock() { + return ItemStack.EMPTY; + } + + @Override + public Level getLevel() { + return accessor.getWorld(); + } + + @Override + public Player getPlayer() { + return accessor.getPlayer(); + } + + @Override + public @NotNull CompoundTag getServerData() { + return data.raw(); + } + + @Override + public BlockHitResult getHitResult() { + return accessor.getHitResult(); + } + + @Override + public boolean isServerConnected() { + return true; + } + + @Override + public ItemStack getPickedResult() { + return ItemStack.EMPTY; + } + + @Override + public boolean showDetails() { + return true; + } + + @Override + public Object getTarget() { + return accessor.getTarget(); + } + + @Override + public void toNetwork(FriendlyByteBuf friendlyByteBuf) { + } + + @Override + public boolean verifyData(CompoundTag compoundTag) { + return true; + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerEntityAccessor.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerEntityAccessor.java new file mode 100644 index 000000000..13623acf0 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WServerEntityAccessor.java @@ -0,0 +1,79 @@ +package mcp.mobius.waila.jaded.w2j; + +import mcp.mobius.waila.api.IDataWriter; +import mcp.mobius.waila.api.IServerAccessor; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.EntityHitResult; +import org.jetbrains.annotations.NotNull; +import snownee.jade.api.EntityAccessor; + +public class WServerEntityAccessor implements EntityAccessor { + + private final IDataWriter data; + private final IServerAccessor accessor; + + public WServerEntityAccessor(IDataWriter data, IServerAccessor accessor) { + this.data = data; + this.accessor = accessor; + } + + @Override + public Entity getEntity() { + return accessor.getTarget(); + } + + @Override + public Level getLevel() { + return accessor.getWorld(); + } + + @Override + public Player getPlayer() { + return accessor.getPlayer(); + } + + @Override + public @NotNull CompoundTag getServerData() { + return data.raw(); + } + + @Override + public EntityHitResult getHitResult() { + return accessor.getHitResult(); + } + + @Override + public boolean isServerConnected() { + return true; + } + + @Override + public ItemStack getPickedResult() { + return ItemStack.EMPTY; + } + + @Override + public boolean showDetails() { + return true; + } + + @Override + public Object getTarget() { + return accessor.getTarget(); + } + + @Override + public void toNetwork(FriendlyByteBuf friendlyByteBuf) { + } + + @Override + public boolean verifyData(CompoundTag compoundTag) { + return true; + } + +} diff --git a/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WTooltip.java b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WTooltip.java new file mode 100644 index 000000000..ee57f2ec5 --- /dev/null +++ b/platform/neo/src/main/java/mcp/mobius/waila/jaded/w2j/WTooltip.java @@ -0,0 +1,87 @@ +package mcp.mobius.waila.jaded.w2j; + +import java.util.List; +import java.util.function.UnaryOperator; + +import mcp.mobius.waila.gui.hud.Line; +import mcp.mobius.waila.gui.hud.Tooltip; +import mcp.mobius.waila.jaded.j2w.JComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import snownee.jade.api.ITooltip; +import snownee.jade.api.ui.Direction2D; +import snownee.jade.api.ui.IElement; +import snownee.jade.api.ui.IElementHelper; + +@SuppressWarnings("NonExtendableApiUsage") +public class WTooltip implements ITooltip { + + public final Tooltip tooltip; + + public WTooltip(mcp.mobius.waila.api.ITooltip tooltip) { + this.tooltip = (Tooltip) tooltip; + } + + @Override + public void clear() { + tooltip.clear(); + } + + @Override + public int size() { + return tooltip.size(); + } + + @Override + public void add(int i, IElement iElement) { + tooltip.add(i, new Line(null).with(new JComponent(iElement))); + } + + @Override + public void append(int i, IElement iElement) { + tooltip.getLine(i).with(new JComponent(iElement)); + } + + @Override + public boolean remove(ResourceLocation resourceLocation) { + tooltip.setLine(resourceLocation); + return true; + } + + @Override + public boolean replace(ResourceLocation resourceLocation, UnaryOperator>> unaryOperator) { + return false; + } + + @Override + public boolean replace(ResourceLocation resourceLocation, Component component) { + tooltip.setLine(resourceLocation, component); + return true; + } + + @Override + public IElementHelper getElementHelper() { + return IElementHelper.get(); + } + + @Override + public List get(ResourceLocation resourceLocation) { + return List.of(); // TODO + } + + @Override + public List get(int i, IElement.Align align) { + return List.of(); // TODO + } + + @Override + public String getMessage() { + return ""; + } + + @Override + public void setLineMargin(int i, Direction2D direction2D, int i1) { + + } + +} diff --git a/platform/neo/src/main/resources/META-INF/mods.toml b/platform/neo/src/main/resources/META-INF/mods.toml index 687acd3ed..14bd9b379 100644 --- a/platform/neo/src/main/resources/META-INF/mods.toml +++ b/platform/neo/src/main/resources/META-INF/mods.toml @@ -7,6 +7,9 @@ license = "CC-BY-NC-SA-4.0" [[mixins]] config = "wthit.mixins.json" +[[mixins]] +config = "wthit-jade-compat.mixins.json" + [[mods]] modId = "wthit" version = "${version}" diff --git a/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.api.IPluginDiscoverer b/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.api.IPluginDiscoverer index 0a5118eb2..805cf1b84 100644 --- a/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.api.IPluginDiscoverer +++ b/platform/neo/src/main/resources/META-INF/services/mcp.mobius.waila.api.IPluginDiscoverer @@ -1 +1,2 @@ mcp.mobius.waila.neo.NeoPluginDiscoverer +mcp.mobius.waila.jaded.j2w.JPluginDiscoverer diff --git a/platform/neo/src/main/resources/wthit-jade-compat.mixins.json b/platform/neo/src/main/resources/wthit-jade-compat.mixins.json new file mode 100644 index 000000000..1da690c4e --- /dev/null +++ b/platform/neo/src/main/resources/wthit-jade-compat.mixins.json @@ -0,0 +1,18 @@ +{ + "required" : true, + "minVersion" : "0.8", + "package" : "mcp.mobius.waila.jaded.mixin", + "plugin" : "mcp.mobius.waila.jaded.JadeWailaMixinPlugin", + "compatibilityLevel": "JAVA_16", + "refmap" : "wthit.refmap.json", + "mixins" : [ + "AccessPluginConfig", + "AccessWailaClientRegistration", + "AccessWailaCommonRegistration", + "MixinCommonProxy" + ], + "client" : [], + "injectors" : { + "defaultRequire": 1 + } +}