From 7ff7442ea1fbbf378d383b26929dd72b659da9dc Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 20:51:19 +0700 Subject: [PATCH 01/13] use compressed jpeg and save about 0.0000407505 GB --- fabric/src/main/resources/assets/waila/logo.png | Bin 17844 -> 0 bytes fabric/src/main/resources/fabric.mod.json | 2 +- fabric/src/main/resources/wthit.jpg | Bin 0 -> 5458 bytes forge/src/main/resources/META-INF/mods.toml | 2 +- forge/src/main/resources/wthit.jpg | Bin 0 -> 7730 bytes forge/src/main/resources/wthit.png | Bin 39121 -> 0 bytes 6 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 fabric/src/main/resources/assets/waila/logo.png create mode 100644 fabric/src/main/resources/wthit.jpg create mode 100644 forge/src/main/resources/wthit.jpg delete mode 100644 forge/src/main/resources/wthit.png diff --git a/fabric/src/main/resources/assets/waila/logo.png b/fabric/src/main/resources/assets/waila/logo.png deleted file mode 100644 index 44c6a562f13b41b92bc03b56f2cbd691d9360e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17844 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 X<0)?2zi%eu00000NkvXXu0mjfGOS?! diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 0f592b052..39eba679c 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -28,7 +28,7 @@ "name" : "wthit", "description" : "What the hell is that?", - "icon" : "assets/waila/logo.png", + "icon" : "wthit.jpg", "contact" : { "homepage": "https://minecraft.curseforge.com/projects/wthit", "issues" : "https://github.com/badasintended/wthit/issues", diff --git a/fabric/src/main/resources/wthit.jpg b/fabric/src/main/resources/wthit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e97d5cd8dff17313bb8c3595a407c6291eca5a5 GIT binary patch literal 5458 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 literal 0 HcmV?d00001 diff --git a/forge/src/main/resources/wthit.png b/forge/src/main/resources/wthit.png deleted file mode 100644 index dcee0918d0389d2ac1d812814c8f23126f17cae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39121 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 From a274219907c31af797a0d6da379ff028b6ef25ea Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 21:14:37 +0700 Subject: [PATCH 02/13] crop the texture and save about 0.0000143354 GB --- .../TooltipRendererProgressBar.java | 6 +++--- .../assets/waila/textures/sprites.png | Bin 15268 -> 244 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/mcp/mobius/waila/overlay/tooltiprenderers/TooltipRendererProgressBar.java b/common/src/main/java/mcp/mobius/waila/overlay/tooltiprenderers/TooltipRendererProgressBar.java index 9b2d12a15..580af0986 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/tooltiprenderers/TooltipRendererProgressBar.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/tooltiprenderers/TooltipRendererProgressBar.java @@ -11,7 +11,7 @@ import net.minecraft.util.Lazy; import static mcp.mobius.waila.overlay.DisplayUtil.bind; -import static mcp.mobius.waila.overlay.DisplayUtil.drawTexturedModalRect; +import static net.minecraft.client.gui.DrawableHelper.drawTexture; public class TooltipRendererProgressBar implements ITooltipRenderer { @@ -30,13 +30,13 @@ public void draw(MatrixStack matrices, CompoundTag tag, ICommonAccessor accessor bind(SHEET); // Draws the "empty" background arrow - drawTexturedModalRect(matrices, x + 2, y, 0, 16, 22, 16, 22, 16); + drawTexture(matrices, x + 2, y, 0, 16, 22, 16, 22, 32); int maxValue = tag.getInt("total"); if (maxValue > 0) { int progress = (currentValue * 22) / maxValue; // Draws the "full" foreground arrow based on the progress - drawTexturedModalRect(matrices, x + 2, y, 0, 0, progress + 1, 16, progress + 1, 16); + drawTexture(matrices, x + 2, y, 0, 0, progress + 1, 16, 22, 32); } } diff --git a/common/src/main/resources/assets/waila/textures/sprites.png b/common/src/main/resources/assets/waila/textures/sprites.png index dde872dc7e0f91cee17d9bf1af3ee6c7cf91ecd7..a091de92433bbabbad2927a9969a5a95a31c0037 100644 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^VnD3G!3JVY@8||njKx9jP7LeL$-D$|)_J-(hIn*t zy>gS&RZ)QX!jr8@#Zd=B5*cr;eeb=agS*FY|DnV?Ocs};vUh)-FK+iR`~%+kW2lc%G9k@`}WV-m5#(}SjEteyI9$airY7^$R+L+w{fw1gUvP5zyoa0CNfc&s))v0gJ0NZRSXiRs%JDR}^89sWS!pas sgv&#?>H{Th7710f#XY@hZ2OG=q0FTJp;MB(fG%h7boFyt=akR{0ArD`XN$$M6 zENSsincGwlM17%58Td-KK?NN$oZvQ{A|j~B7;cDvP*EHc1l{IbeJ)9pU(#gHCVl5~ zQ1ZLy`ToAY=RVJ$-kW=7c<8QW9XE9#gq95sL`D#@kEYQVq@l5^lnjBGcGBi#<8oA(TEzMU~fT_k5kIPw2rq<55?r^NjZ>k^oBcv1(6tJuqkncOgd|bg^;7@E0Wl1<{ey7 zVort}8?1udSag`{S9Q#JT|TEQxVyQYfXnUm^#pqEn5U&wQ#Dd*laiJ0riICzM5C434ab|wG%RhHn|2TcWuy%=jo6fi z`4McWIbFt^c92I|+vw>{C0U)E8Yio#>DX~WX_993l+ubzp)^B5@~mRNjwMsoW2%}C zmsZ*EJVLI&zqqQnb)!l)q2`VCLB2kvI^R_{9Fa^MChO7fbbFj0Pt4;M-QA+Q$0_(l zK>#KtWt~S8f0y7WgD&F{$bq$qXwQX#(?F zb|T1E8-cR2s>FUZt?Fc0INTNF8#RNh;z|<-vxX^UWjq)OlLnWfBt)NI@cEP8q*Ib{ z!s$zP3(kNL_d5MvDeiMi-PTPJVl)cV7g$GBIcM#bvUTDbtwH(%>n*xMPC6+KG}h>^ zwL}A(1*HZQgRIXfux`ofEuLjt@gudZ^BrlWcqVC*ZeVN2g&gx+u5yS~&L}IVxN}8G zwobFKY;6df2=X!( zua{hF)9USmymk7gmD-6Ywbsth{EA&TpF!(T6Uka2nBk%#f&zvM(xAo+7Zni{FkFxZHDIYL5&$MDk3Og zxF8K`%y3Z=K>@=BX;5Q^i;4&e7%oVI8Z%r}L{PwRK^oMU;i4jf0)`9HpvDXr6%iCL zT#yDeX1J(`pn&0mG^jDdMMVS!3>Tz9jTtT~A}C01$+c@m)ubL96IgmMBxzm6j$ zzKqaH^@WE{Y(}W%{9t55tnl@3r;jb$+1I(}o{#QJE$=vW$2#=x1N`2?7p?K{e|qBF z!|$a%Yu;WlDenL4n}Y|!kA`h?XaD@{r6cQ~I)k1@yW0EOxFB+%?`)m68@K!uPaQmP z2p#vKSCIYaq1l5k?p`sAK7H%e>FwwKzP#i7b3bTHW>&OlKkl7defi^`hgOcvqBlRd zp>4_0-}_VO`rchj%RyWF_`ZqP+dmnd$(+7)vVA{sx8E>h?<=4PI^N2)2>ULc`23xd zmsZ)oEY Date: Mon, 12 Apr 2021 21:54:31 +0700 Subject: [PATCH 03/13] #15 move top-centered tooltip down when bossbars are visible --- .../waila/mixin/AccessorBossBarHud.java | 17 ++++++++++++ .../mcp/mobius/waila/overlay/Tooltip.java | 26 ++++++++++++++----- common/src/main/resources/waila.mixins.json | 1 + 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/mcp/mobius/waila/mixin/AccessorBossBarHud.java diff --git a/common/src/main/java/mcp/mobius/waila/mixin/AccessorBossBarHud.java b/common/src/main/java/mcp/mobius/waila/mixin/AccessorBossBarHud.java new file mode 100644 index 000000000..5fa5d70f6 --- /dev/null +++ b/common/src/main/java/mcp/mobius/waila/mixin/AccessorBossBarHud.java @@ -0,0 +1,17 @@ +package mcp.mobius.waila.mixin; + +import java.util.Map; +import java.util.UUID; + +import net.minecraft.client.gui.hud.BossBarHud; +import net.minecraft.client.gui.hud.ClientBossBar; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(BossBarHud.class) +public interface AccessorBossBarHud { + + @Accessor + Map getBossBars(); + +} diff --git a/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java b/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java index e1cad8633..e7ebdc7d4 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java @@ -15,6 +15,9 @@ import mcp.mobius.waila.api.impl.config.PluginConfig; import mcp.mobius.waila.api.impl.config.WailaConfig; import mcp.mobius.waila.api.impl.config.WailaConfig.ConfigOverlay.ConfigOverlayColor; +import mcp.mobius.waila.api.impl.config.WailaConfig.ConfigOverlay.Position.HorizontalAlignment; +import mcp.mobius.waila.api.impl.config.WailaConfig.ConfigOverlay.Position.VerticalAlignment; +import mcp.mobius.waila.mixin.AccessorBossBarHud; import mcp.mobius.waila.plugin.core.WailaCore; import mcp.mobius.waila.util.TaggedText; import net.minecraft.client.MinecraftClient; @@ -79,7 +82,9 @@ public static void setShowItem(boolean showItem) { public static void finish() { Preconditions.checkState(started); onCreate.accept(LINES); - Window window = MinecraftClient.getInstance().getWindow(); + + MinecraftClient client = MinecraftClient.getInstance(); + Window window = client.getWindow(); float scale = Waila.CONFIG.get().getOverlay().getScale(); Position pos = Waila.CONFIG.get().getOverlay().getPosition(); @@ -121,11 +126,20 @@ public static void finish() { int windowW = (int) (window.getScaledWidth() / scale); int windowH = (int) (window.getScaledHeight() / scale); - RECT.get().setRect( - (int) ((windowW * pos.getAnchorX().multiplier) - (w * pos.getAlignX().multiplier)) + pos.getX(), - (int) ((windowH * pos.getAnchorY().multiplier) - (h * pos.getAlignY().multiplier)) + pos.getY(), - w, h - ); + HorizontalAlignment anchorX = pos.getAnchorX(); + VerticalAlignment anchorY = pos.getAnchorY(); + + HorizontalAlignment alignX = pos.getAlignX(); + VerticalAlignment alignY = pos.getAlignY(); + + double x = windowW * anchorX.multiplier - w * alignX.multiplier + pos.getX(); + double y = windowH * anchorY.multiplier - h * alignY.multiplier + pos.getY(); + + if (anchorX == HorizontalAlignment.CENTER && anchorY == VerticalAlignment.TOP) { + y += ((AccessorBossBarHud) client.inGameHud.getBossBarHud()).getBossBars().size() * 19; + } + + RECT.get().setRect(x, y, w, h); started = false; } diff --git a/common/src/main/resources/waila.mixins.json b/common/src/main/resources/waila.mixins.json index 0cd5dc9e2..5b27de89a 100644 --- a/common/src/main/resources/waila.mixins.json +++ b/common/src/main/resources/waila.mixins.json @@ -7,6 +7,7 @@ "defaultRequire": 1 }, "client" : [ + "AccessorBossBarHud", "AccessorTextFieldWidget" ] } \ No newline at end of file From 2a880d88c0794bda53c18f0ead8b4335e8271899 Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 22:13:50 +0700 Subject: [PATCH 04/13] add item mod name tooltip back --- .../main/java/mcp/mobius/waila/WailaClient.java | 15 +++++++++++++++ .../mcp/mobius/waila/plugin/core/WailaCore.java | 2 +- .../mobius/waila/fabric/FabricWailaClient.java | 3 +++ .../mcp/mobius/waila/forge/ForgeWailaClient.java | 10 ++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/mcp/mobius/waila/WailaClient.java b/common/src/main/java/mcp/mobius/waila/WailaClient.java index 0a2fe6cb7..b6e08e060 100644 --- a/common/src/main/java/mcp/mobius/waila/WailaClient.java +++ b/common/src/main/java/mcp/mobius/waila/WailaClient.java @@ -1,5 +1,6 @@ package mcp.mobius.waila; +import java.util.List; import java.util.function.BiFunction; import mcp.mobius.waila.api.impl.config.PluginConfig; @@ -8,8 +9,13 @@ import mcp.mobius.waila.gui.GuiConfigHome; import mcp.mobius.waila.overlay.TickHandler; import mcp.mobius.waila.plugin.core.WailaCore; +import mcp.mobius.waila.util.ModIdentification; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.item.TooltipContext; import net.minecraft.client.options.KeyBinding; +import net.minecraft.item.ItemStack; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; import org.lwjgl.glfw.GLFW; public abstract class WailaClient { @@ -63,4 +69,13 @@ protected static void onCientTick() { } } + protected static void onItemTooltip(ItemStack stack, TooltipContext context, List tooltip) { + if (PluginConfig.INSTANCE.get(WailaCore.CONFIG_SHOW_MOD_NAME)) { + tooltip.add(new LiteralText(String.format( + Waila.CONFIG.get().getFormatting().getModName(), + ModIdentification.getModInfo(stack.getItem()).getName() + ))); + } + } + } diff --git a/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java b/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java index 668e3a5e9..880063416 100644 --- a/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java +++ b/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java @@ -23,8 +23,8 @@ public class WailaCore implements IWailaPlugin { public static final Identifier CONFIG_SHOW_FLUID = Waila.id("show_fluids"); public static final Identifier CONFIG_SHOW_ENTITY = Waila.id("show_entities"); public static final Identifier CONFIG_SHOW_ITEM = Waila.id("show_item"); + public static final Identifier CONFIG_SHOW_MOD_NAME = Waila.id("show_mod_name"); - static final Identifier CONFIG_SHOW_MOD_NAME = Waila.id("show_mod_name"); static final Identifier CONFIG_SHOW_REGISTRY = Waila.id("show_registry"); static final Identifier CONFIG_SHOW_ENTITY_HEALTH = Waila.id("show_entity_hp"); static final Identifier CONFIG_SHOW_STATES = Waila.id("show_states"); diff --git a/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java b/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java index 625d256a9..35cae42ef 100644 --- a/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java +++ b/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWailaClient.java @@ -8,6 +8,7 @@ import mcp.mobius.waila.overlay.Tooltip; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.options.KeyBinding; @@ -28,6 +29,8 @@ public void onInitializeClient() { ClientTickEvents.END_CLIENT_TICK.register(client -> onCientTick()); + ItemTooltipCallback.EVENT.register(WailaClient::onItemTooltip); + Tooltip.onCreate = texts -> WailaTooltipEvent.WAILA_HANDLE_TOOLTIP.invoker().onTooltip(new WailaTooltipEvent(texts, DataAccessor.INSTANCE)); diff --git a/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java b/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java index 0f86c811d..9551a4423 100644 --- a/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java +++ b/forge/src/main/java/mcp/mobius/waila/forge/ForgeWailaClient.java @@ -12,6 +12,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ExtensionPoint; import net.minecraftforge.fml.ModLoadingContext; @@ -63,17 +64,22 @@ static void registerConfigScreen() { static class Subscriber { @SubscribeEvent - static void onRenderGameOverlay(RenderGameOverlayEvent.Post event) { + static void renderGameOverlay(RenderGameOverlayEvent.Post event) { if (event.getType() == RenderGameOverlayEvent.ElementType.ALL) Tooltip.render(event.getMatrixStack(), event.getPartialTicks()); } @SubscribeEvent - static void onClientTick(TickEvent.ClientTickEvent event) { + static void clientTick(TickEvent.ClientTickEvent event) { if (event.phase == TickEvent.Phase.END) onCientTick(); } + @SubscribeEvent + static void itemTooltip(ItemTooltipEvent event) { + onItemTooltip(event.getItemStack(), event.getFlags(), event.getToolTip()); + } + } @Mod(Waila.WTHIT) From 829904555df4c932da625aa858827e5e0fa6735d Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 22:14:58 +0700 Subject: [PATCH 05/13] disable rei support for now --- fabric/src/main/resources/fabric.mod.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 39eba679c..bdc6d7a36 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -20,8 +20,7 @@ "entrypoints" : { "main" : ["mcp.mobius.waila.fabric.FabricWaila"], "client" : ["mcp.mobius.waila.fabric.FabricWailaClient"], - "modmenu" : ["mcp.mobius.waila.fabric.FabricWailaModMenu"], - "rei_plugins": ["mcp.mobius.waila.fabric.FabricWailaRei"] + "modmenu" : ["mcp.mobius.waila.fabric.FabricWailaModMenu"] }, "mixins" : ["waila.mixins.json"], From 287fec2e29a5650bd4f9732ef13214df953ad813 Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 22:39:25 +0700 Subject: [PATCH 06/13] #18 add blockpos tooltip --- .../waila/api/impl/config/WailaConfig.java | 21 +++++++++---------- .../waila/plugin/core/BlockComponent.java | 6 ++++++ .../mobius/waila/plugin/core/WailaCore.java | 2 ++ .../resources/assets/waila/lang/en_us.json | 3 ++- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java b/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java index 21569162f..e1f016e83 100644 --- a/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java +++ b/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java @@ -13,7 +13,6 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import net.minecraft.util.Identifier; -import org.apache.commons.lang3.StringEscapeUtils; public class WailaConfig { @@ -309,11 +308,11 @@ public JsonElement serialize(ConfigOverlayColor src, Type typeOfSrc, JsonSeriali public static class ConfigFormatting { - private String modName = StringEscapeUtils.escapeJava("\u00A79\u00A7o%s"); - private String blockName = StringEscapeUtils.escapeJava("\u00a7f%s"); - private String fluidName = StringEscapeUtils.escapeJava("\u00a7f%s"); - private String entityName = StringEscapeUtils.escapeJava("\u00a7f%s"); - private String registryName = StringEscapeUtils.escapeJava("\u00a77[%s]"); + private String modName = "\u00A79\u00A7o%s"; + private String blockName = "\u00a7f%s"; + private String fluidName = "\u00a7f%s"; + private String entityName = "\u00a7f%s"; + private String registryName = "\u00a77[%s]"; public void setModName(String modName) { this.modName = modName; @@ -336,23 +335,23 @@ public void setRegistryName(String registryName) { } public String getModName() { - return StringEscapeUtils.unescapeJava(modName); + return modName; } public String getBlockName() { - return StringEscapeUtils.unescapeJava(blockName); + return blockName; } public String getFluidName() { - return StringEscapeUtils.unescapeJava(fluidName); + return fluidName; } public String getEntityName() { - return StringEscapeUtils.unescapeJava(entityName); + return entityName; } public String getRegistryName() { - return StringEscapeUtils.unescapeJava(registryName); + return registryName; } } diff --git a/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java b/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java index 8d24724a7..df5fc0e2f 100644 --- a/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java +++ b/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java @@ -23,6 +23,7 @@ import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; import net.minecraft.util.Nameable; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; @@ -53,6 +54,11 @@ public void appendHead(List tooltip, IBlockAccessor accessor, IPluginConfi @Override public void appendBody(List tooltip, IBlockAccessor accessor, IPluginConfig config) { + if (config.get(WailaCore.CONFIG_SHOW_POS)) { + BlockPos pos = accessor.getPosition(); + tooltip.add(new LiteralText("(" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + ")")); + } + if (config.get(WailaCore.CONFIG_SHOW_STATES)) { BlockState state = accessor.getBlockState(); state.getProperties().forEach(p -> { diff --git a/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java b/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java index 880063416..f95ebf411 100644 --- a/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java +++ b/common/src/main/java/mcp/mobius/waila/plugin/core/WailaCore.java @@ -28,6 +28,7 @@ public class WailaCore implements IWailaPlugin { static final Identifier CONFIG_SHOW_REGISTRY = Waila.id("show_registry"); static final Identifier CONFIG_SHOW_ENTITY_HEALTH = Waila.id("show_entity_hp"); static final Identifier CONFIG_SHOW_STATES = Waila.id("show_states"); + static final Identifier CONFIG_SHOW_POS = Waila.id("show_pos"); @Override public void register(IRegistrar registrar) { @@ -52,6 +53,7 @@ public void register(IRegistrar registrar) { registrar.addConfig(CONFIG_SHOW_REGISTRY, false); registrar.addConfig(CONFIG_SHOW_ENTITY_HEALTH, true); registrar.addConfig(CONFIG_SHOW_STATES, false); + registrar.addConfig(CONFIG_SHOW_POS, false); registrar.addRenderer(RENDER_ENTITY_HEALTH, new TooltipRendererHealth()); } diff --git a/common/src/main/resources/assets/waila/lang/en_us.json b/common/src/main/resources/assets/waila/lang/en_us.json index 0b881e72a..20efdbac8 100644 --- a/common/src/main/resources/assets/waila/lang/en_us.json +++ b/common/src/main/resources/assets/waila/lang/en_us.json @@ -113,5 +113,6 @@ "config.waila.plugin_waila.show_item" : "Show Item", "config.waila.plugin_waila.show_item_desc" : "Show the item gotten from the block", "config.waila.plugin_waila.show_entity_hp" : "Show Entity Health", - "config.waila.plugin_waila.show_states" : "Show States" + "config.waila.plugin_waila.show_states" : "Show States", + "config.waila.plugin_waila.show_pos" : "Show Block Position" } \ No newline at end of file From 56aa8fdd259de2f6619afd1e3943900888969c54 Mon Sep 17 00:00:00 2001 From: deirn Date: Mon, 12 Apr 2021 23:03:38 +0700 Subject: [PATCH 07/13] Update curseforge.gradle --- gradle/curseforge.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/curseforge.gradle b/gradle/curseforge.gradle index 223fd94db..5f7ea9753 100644 --- a/gradle/curseforge.gradle +++ b/gradle/curseforge.gradle @@ -20,8 +20,8 @@ curseforge { displayName = "[${project.minecraft}] v${project.version}" } - if (cf.containsKey("relation")) relations { - def rel = cf.relation + if (cf.containsKey("relations")) relations { + def rel = cf.relations rel.requires?.each { requiredDependency it } rel.includes?.each { embeddedLibrary it } From 93647228f4e126d1c281dee86711303911b2d5e0 Mon Sep 17 00:00:00 2001 From: deirn Date: Tue, 13 Apr 2021 08:21:06 +0700 Subject: [PATCH 08/13] #20 Fix maintained mode is inverted #21 Fix NoClassDefFoundError, delay rename to 1.17 #22 Fix unescaped format config --- .../src/main/java/mcp/mobius/waila/Waila.java | 17 ++-- .../java/mcp/mobius/waila/WailaClient.java | 2 +- .../mcp/mobius/waila/api/IJsonConfig.java | 57 ++++++++++++ .../waila/api/impl/config/WailaConfig.java | 19 ++-- .../waila/command/DumpHandlerCommand.java | 2 +- .../waila/overlay/ComponentProvider.java | 2 +- .../mcp/mobius/waila/overlay/DisplayUtil.java | 2 +- .../mcp/mobius/waila/overlay/TickHandler.java | 6 +- .../mcp/mobius/waila/overlay/Tooltip.java | 2 +- .../waila/plugin/core/BlockComponent.java | 2 +- .../waila/plugin/core/EntityComponent.java | 2 +- .../waila/{util => utils}/DumpGenerator.java | 2 +- .../{util => utils}/ExceptionHandler.java | 2 +- .../waila/{util => utils}/JsonConfig.java | 87 ++++++++++++++++++- .../{util => utils}/ModIdentification.java | 2 +- .../waila/{util => utils}/TaggableList.java | 2 +- .../waila/{util => utils}/TaggedText.java | 2 +- .../mcp/mobius/waila/fabric/FabricWaila.java | 2 +- .../mcp/mobius/waila/forge/ForgeWaila.java | 2 +- 19 files changed, 179 insertions(+), 35 deletions(-) create mode 100644 common/src/main/java/mcp/mobius/waila/api/IJsonConfig.java rename common/src/main/java/mcp/mobius/waila/{util => utils}/DumpGenerator.java (98%) rename common/src/main/java/mcp/mobius/waila/{util => utils}/ExceptionHandler.java (97%) rename common/src/main/java/mcp/mobius/waila/{util => utils}/JsonConfig.java (56%) rename common/src/main/java/mcp/mobius/waila/{util => utils}/ModIdentification.java (98%) rename common/src/main/java/mcp/mobius/waila/{util => utils}/TaggableList.java (97%) rename common/src/main/java/mcp/mobius/waila/{util => utils}/TaggedText.java (91%) diff --git a/common/src/main/java/mcp/mobius/waila/Waila.java b/common/src/main/java/mcp/mobius/waila/Waila.java index 33107326c..c6d15898a 100644 --- a/common/src/main/java/mcp/mobius/waila/Waila.java +++ b/common/src/main/java/mcp/mobius/waila/Waila.java @@ -3,9 +3,10 @@ import java.nio.file.Path; import com.google.gson.GsonBuilder; +import mcp.mobius.waila.api.IJsonConfig; import mcp.mobius.waila.api.impl.config.WailaConfig; import mcp.mobius.waila.network.PacketSender; -import mcp.mobius.waila.util.JsonConfig; +import mcp.mobius.waila.utils.JsonConfig; import net.minecraft.block.Block; import net.minecraft.entity.EntityType; import net.minecraft.tag.Tag; @@ -34,12 +35,14 @@ public static Identifier id(String path) { } protected static void init() { - CONFIG = new JsonConfig<>(MODID + "/" + MODID, WailaConfig.class).withGson(new GsonBuilder() - .setPrettyPrinting() - .registerTypeAdapter(WailaConfig.ConfigOverlay.ConfigOverlayColor.class, new WailaConfig.ConfigOverlay.ConfigOverlayColor.Adapter()) - .registerTypeAdapter(Identifier.class, new Identifier.Serializer()) - .create() - ); + CONFIG = (JsonConfig) IJsonConfig.of(WailaConfig.class) + .file(MODID + "/" + MODID) + .gson(new GsonBuilder() + .setPrettyPrinting() + .registerTypeAdapter(WailaConfig.ConfigOverlay.ConfigOverlayColor.class, new WailaConfig.ConfigOverlay.ConfigOverlayColor.Adapter()) + .registerTypeAdapter(Identifier.class, new Identifier.Serializer()) + .create()) + .build(); } } \ No newline at end of file diff --git a/common/src/main/java/mcp/mobius/waila/WailaClient.java b/common/src/main/java/mcp/mobius/waila/WailaClient.java index b6e08e060..3293b1be7 100644 --- a/common/src/main/java/mcp/mobius/waila/WailaClient.java +++ b/common/src/main/java/mcp/mobius/waila/WailaClient.java @@ -9,7 +9,7 @@ import mcp.mobius.waila.gui.GuiConfigHome; import mcp.mobius.waila.overlay.TickHandler; import mcp.mobius.waila.plugin.core.WailaCore; -import mcp.mobius.waila.util.ModIdentification; +import mcp.mobius.waila.utils.ModIdentification; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.client.options.KeyBinding; diff --git a/common/src/main/java/mcp/mobius/waila/api/IJsonConfig.java b/common/src/main/java/mcp/mobius/waila/api/IJsonConfig.java new file mode 100644 index 000000000..7fbf4afe0 --- /dev/null +++ b/common/src/main/java/mcp/mobius/waila/api/IJsonConfig.java @@ -0,0 +1,57 @@ +package mcp.mobius.waila.api; + +import java.io.File; +import java.util.function.Supplier; + +import com.google.gson.Gson; +import mcp.mobius.waila.utils.JsonConfig; + +/** + * An Interface for easy (de)serialization for config classes + * @param the config class + */ +public interface IJsonConfig { + + static Builder0 of(Class clazz) { + return new JsonConfig.Builder<>(clazz); + } + + /** + * Get current value + */ + T get(); + + /** + * Save value to file + */ + void save(); + + /** + * Write value to file + */ + void write(T t, boolean invalidate); + + /** + * Invalidate current value and force re-read file on next {@link #get} + */ + void invalidate(); + + interface Builder0 { + + Builder1 file(File file); + + Builder1 file(String fileName); + + } + + interface Builder1 { + + Builder1 gson(Gson gson); + + Builder1 factory(Supplier factory); + + IJsonConfig build(); + + } + +} diff --git a/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java b/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java index e1f016e83..c80558bd8 100644 --- a/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java +++ b/common/src/main/java/mcp/mobius/waila/api/impl/config/WailaConfig.java @@ -13,6 +13,7 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import net.minecraft.util.Identifier; +import org.apache.commons.lang3.StringEscapeUtils; public class WailaConfig { @@ -319,39 +320,39 @@ public void setModName(String modName) { } public void setBlockName(String blockName) { - this.blockName = blockName; + this.blockName = StringEscapeUtils.escapeJava(blockName); } public void setFluidName(String fluidName) { - this.fluidName = fluidName; + this.fluidName = StringEscapeUtils.escapeJava(fluidName); } public void setEntityName(String entityName) { - this.entityName = entityName; + this.entityName = StringEscapeUtils.escapeJava(entityName); } public void setRegistryName(String registryName) { - this.registryName = registryName; + this.registryName = StringEscapeUtils.escapeJava(registryName); } public String getModName() { - return modName; + return StringEscapeUtils.unescapeJava(modName); } public String getBlockName() { - return blockName; + return StringEscapeUtils.unescapeJava(blockName); } public String getFluidName() { - return fluidName; + return StringEscapeUtils.unescapeJava(fluidName); } public String getEntityName() { - return entityName; + return StringEscapeUtils.unescapeJava(entityName); } public String getRegistryName() { - return registryName; + return StringEscapeUtils.unescapeJava(registryName); } } diff --git a/common/src/main/java/mcp/mobius/waila/command/DumpHandlerCommand.java b/common/src/main/java/mcp/mobius/waila/command/DumpHandlerCommand.java index bce58e292..f1b68cbd1 100644 --- a/common/src/main/java/mcp/mobius/waila/command/DumpHandlerCommand.java +++ b/common/src/main/java/mcp/mobius/waila/command/DumpHandlerCommand.java @@ -5,7 +5,7 @@ import java.io.IOException; import com.mojang.brigadier.CommandDispatcher; -import mcp.mobius.waila.util.DumpGenerator; +import mcp.mobius.waila.utils.DumpGenerator; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.LiteralText; diff --git a/common/src/main/java/mcp/mobius/waila/overlay/ComponentProvider.java b/common/src/main/java/mcp/mobius/waila/overlay/ComponentProvider.java index c56c1056b..6687a3574 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/ComponentProvider.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/ComponentProvider.java @@ -7,7 +7,7 @@ import mcp.mobius.waila.api.IEntityComponentProvider; import mcp.mobius.waila.api.TooltipPosition; import mcp.mobius.waila.api.impl.config.PluginConfig; -import mcp.mobius.waila.util.ExceptionHandler; +import mcp.mobius.waila.utils.ExceptionHandler; import net.minecraft.block.Block; import net.minecraft.block.entity.BlockEntity; import net.minecraft.entity.Entity; diff --git a/common/src/main/java/mcp/mobius/waila/overlay/DisplayUtil.java b/common/src/main/java/mcp/mobius/waila/overlay/DisplayUtil.java index 173301b24..f3785c1bc 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/DisplayUtil.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/DisplayUtil.java @@ -6,7 +6,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import mcp.mobius.waila.Waila; -import mcp.mobius.waila.util.ExceptionHandler; +import mcp.mobius.waila.utils.ExceptionHandler; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.item.TooltipContext; diff --git a/common/src/main/java/mcp/mobius/waila/overlay/TickHandler.java b/common/src/main/java/mcp/mobius/waila/overlay/TickHandler.java index 3cd27dde6..756489c7c 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/TickHandler.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/TickHandler.java @@ -8,8 +8,8 @@ import mcp.mobius.waila.api.impl.config.PluginConfig; import mcp.mobius.waila.api.impl.config.WailaConfig; import mcp.mobius.waila.plugin.core.WailaCore; -import mcp.mobius.waila.util.TaggableList; -import mcp.mobius.waila.util.TaggedText; +import mcp.mobius.waila.utils.TaggableList; +import mcp.mobius.waila.utils.TaggedText; import net.minecraft.block.Block; import net.minecraft.block.FluidBlock; import net.minecraft.client.MinecraftClient; @@ -44,7 +44,7 @@ public static void tickClient() { if (client.world == null || !config.getGeneral().shouldDisplayTooltip() - || config.getGeneral().getDisplayMode() == WailaConfig.DisplayMode.HOLD_KEY && WailaClient.showOverlay.wasPressed() + || config.getGeneral().getDisplayMode() == WailaConfig.DisplayMode.HOLD_KEY && !WailaClient.showOverlay.isPressed() || client.currentScreen != null && !(client.currentScreen instanceof ChatScreen) || config.getGeneral().shouldHideFromPlayerList() && client.options.keyPlayerList.wasPressed() && client.getNetworkHandler().getPlayerList().size() > 1 || config.getGeneral().shouldHideFromDebug() && client.options.debugEnabled) { diff --git a/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java b/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java index e7ebdc7d4..bb7faded3 100644 --- a/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java +++ b/common/src/main/java/mcp/mobius/waila/overlay/Tooltip.java @@ -19,7 +19,7 @@ import mcp.mobius.waila.api.impl.config.WailaConfig.ConfigOverlay.Position.VerticalAlignment; import mcp.mobius.waila.mixin.AccessorBossBarHud; import mcp.mobius.waila.plugin.core.WailaCore; -import mcp.mobius.waila.util.TaggedText; +import mcp.mobius.waila.utils.TaggedText; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.util.Window; diff --git a/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java b/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java index df5fc0e2f..9e2d4c493 100644 --- a/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java +++ b/common/src/main/java/mcp/mobius/waila/plugin/core/BlockComponent.java @@ -10,7 +10,7 @@ import mcp.mobius.waila.api.IServerDataProvider; import mcp.mobius.waila.api.ITaggableList; import mcp.mobius.waila.api.impl.config.WailaConfig; -import mcp.mobius.waila.util.ModIdentification; +import mcp.mobius.waila.utils.ModIdentification; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; diff --git a/common/src/main/java/mcp/mobius/waila/plugin/core/EntityComponent.java b/common/src/main/java/mcp/mobius/waila/plugin/core/EntityComponent.java index 9ec48c26d..18a25d755 100644 --- a/common/src/main/java/mcp/mobius/waila/plugin/core/EntityComponent.java +++ b/common/src/main/java/mcp/mobius/waila/plugin/core/EntityComponent.java @@ -9,7 +9,7 @@ import mcp.mobius.waila.api.IPluginConfig; import mcp.mobius.waila.api.ITaggableList; import mcp.mobius.waila.api.impl.config.WailaConfig; -import mcp.mobius.waila.util.ModIdentification; +import mcp.mobius.waila.utils.ModIdentification; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.nbt.CompoundTag; diff --git a/common/src/main/java/mcp/mobius/waila/util/DumpGenerator.java b/common/src/main/java/mcp/mobius/waila/utils/DumpGenerator.java similarity index 98% rename from common/src/main/java/mcp/mobius/waila/util/DumpGenerator.java rename to common/src/main/java/mcp/mobius/waila/utils/DumpGenerator.java index f782cad8c..ef4277895 100644 --- a/common/src/main/java/mcp/mobius/waila/util/DumpGenerator.java +++ b/common/src/main/java/mcp/mobius/waila/utils/DumpGenerator.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import java.util.Map; import java.util.Set; diff --git a/common/src/main/java/mcp/mobius/waila/util/ExceptionHandler.java b/common/src/main/java/mcp/mobius/waila/utils/ExceptionHandler.java similarity index 97% rename from common/src/main/java/mcp/mobius/waila/util/ExceptionHandler.java rename to common/src/main/java/mcp/mobius/waila/utils/ExceptionHandler.java index 74d29414c..3d11423f0 100644 --- a/common/src/main/java/mcp/mobius/waila/util/ExceptionHandler.java +++ b/common/src/main/java/mcp/mobius/waila/utils/ExceptionHandler.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import java.io.File; import java.nio.charset.StandardCharsets; diff --git a/common/src/main/java/mcp/mobius/waila/util/JsonConfig.java b/common/src/main/java/mcp/mobius/waila/utils/JsonConfig.java similarity index 56% rename from common/src/main/java/mcp/mobius/waila/util/JsonConfig.java rename to common/src/main/java/mcp/mobius/waila/utils/JsonConfig.java index 2a28564b5..b3aa3ffbf 100644 --- a/common/src/main/java/mcp/mobius/waila/util/JsonConfig.java +++ b/common/src/main/java/mcp/mobius/waila/utils/JsonConfig.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import java.io.File; import java.io.FileReader; @@ -9,8 +9,9 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import mcp.mobius.waila.Waila; +import mcp.mobius.waila.api.IJsonConfig; -public class JsonConfig { +public class JsonConfig implements IJsonConfig { private static final Gson DEFAULT_GSON = new GsonBuilder().setPrettyPrinting().create(); @@ -18,6 +19,8 @@ public class JsonConfig { private final CachedSupplier configGetter; private Gson gson = DEFAULT_GSON; + // TODO: Remove + @Deprecated public JsonConfig(File file, Class configClass, Supplier defaultFactory) { this.configFile = file; this.configGetter = new CachedSupplier<>(() -> { @@ -36,31 +39,61 @@ public JsonConfig(File file, Class configClass, Supplier defaultFactory) { }); } + // TODO: Remove + @Deprecated public JsonConfig(String fileName, Class configClass, Supplier defaultFactory) { this(Waila.configDir.resolve(fileName + (fileName.endsWith(".json") ? "" : ".json")).toFile(), configClass, defaultFactory); } + // TODO: Remove + @Deprecated public JsonConfig(File file, Class configClass) { this(file, configClass, defaultFactory(configClass)); } + // TODO: Remove + @Deprecated public JsonConfig(String fileName, Class configClass) { this(fileName, configClass, defaultFactory(configClass)); } + JsonConfig(File file, Class clazz, Supplier factory, Gson gson) { + this.configFile = file; + this.configGetter = new CachedSupplier<>(() -> { + if (!configFile.exists()) { + T def = factory.get(); + write(def, false); + return def; + } + try (FileReader reader = new FileReader(configFile)) { + return gson.fromJson(reader, clazz); + } catch (IOException e) { + e.printStackTrace(); + } + + return factory.get(); + }); + this.gson = gson; + } + + // TODO: Remove + @Deprecated public JsonConfig withGson(Gson gson) { this.gson = gson; return this; } + @Override public T get() { return configGetter.get(); } + @Override public void save() { write(get(), false); // Does not need to invalidate since the saved instance already has updated values } + @Override public void write(T t, boolean invalidate) { try (FileWriter writer = new FileWriter(configFile)) { writer.write(gson.toJson(t)); @@ -85,6 +118,56 @@ private static Supplier defaultFactory(Class configClass) { }; } + public static class Builder implements Builder0, Builder1 { + + final Class clazz; + File file; + Supplier factory; + Gson gson; + + public Builder(Class clazz) { + this.clazz = clazz; + this.gson = DEFAULT_GSON; + this.factory = () -> { + try { + return clazz.getConstructor().newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to create new config instance", e); + } + }; + } + + @Override + public Builder1 file(File file) { + this.file = file; + return this; + } + + @Override + public Builder1 file(String fileName) { + this.file = Waila.configDir.resolve(fileName + (fileName.endsWith(".json") ? "" : ".json")).toFile(); + return this; + } + + @Override + public Builder1 factory(Supplier factory) { + this.factory = factory; + return this; + } + + @Override + public Builder1 gson(Gson gson) { + this.gson = gson; + return this; + } + + @Override + public IJsonConfig build() { + return new JsonConfig(file, clazz, factory, gson); + } + + } + static class CachedSupplier { private final Supplier supplier; diff --git a/common/src/main/java/mcp/mobius/waila/util/ModIdentification.java b/common/src/main/java/mcp/mobius/waila/utils/ModIdentification.java similarity index 98% rename from common/src/main/java/mcp/mobius/waila/util/ModIdentification.java rename to common/src/main/java/mcp/mobius/waila/utils/ModIdentification.java index a85ddca89..9cdc485b5 100644 --- a/common/src/main/java/mcp/mobius/waila/util/ModIdentification.java +++ b/common/src/main/java/mcp/mobius/waila/utils/ModIdentification.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import java.util.Map; import java.util.Optional; diff --git a/common/src/main/java/mcp/mobius/waila/util/TaggableList.java b/common/src/main/java/mcp/mobius/waila/utils/TaggableList.java similarity index 97% rename from common/src/main/java/mcp/mobius/waila/util/TaggableList.java rename to common/src/main/java/mcp/mobius/waila/utils/TaggableList.java index 6e6b913fc..397139eeb 100644 --- a/common/src/main/java/mcp/mobius/waila/util/TaggableList.java +++ b/common/src/main/java/mcp/mobius/waila/utils/TaggableList.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import java.util.Map; import java.util.function.Function; diff --git a/common/src/main/java/mcp/mobius/waila/util/TaggedText.java b/common/src/main/java/mcp/mobius/waila/utils/TaggedText.java similarity index 91% rename from common/src/main/java/mcp/mobius/waila/util/TaggedText.java rename to common/src/main/java/mcp/mobius/waila/utils/TaggedText.java index 8834bd954..e6e1f902b 100644 --- a/common/src/main/java/mcp/mobius/waila/util/TaggedText.java +++ b/common/src/main/java/mcp/mobius/waila/utils/TaggedText.java @@ -1,4 +1,4 @@ -package mcp.mobius.waila.util; +package mcp.mobius.waila.utils; import net.minecraft.text.LiteralText; import net.minecraft.util.Identifier; diff --git a/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWaila.java b/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWaila.java index 8f127c4b9..9709d6cef 100644 --- a/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWaila.java +++ b/fabric/src/main/java/mcp/mobius/waila/fabric/FabricWaila.java @@ -3,7 +3,7 @@ import mcp.mobius.waila.Waila; import mcp.mobius.waila.api.impl.config.PluginConfig; import mcp.mobius.waila.command.DumpHandlerCommand; -import mcp.mobius.waila.util.ModIdentification; +import mcp.mobius.waila.utils.ModIdentification; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; diff --git a/forge/src/main/java/mcp/mobius/waila/forge/ForgeWaila.java b/forge/src/main/java/mcp/mobius/waila/forge/ForgeWaila.java index 620cc05ab..6fca27599 100644 --- a/forge/src/main/java/mcp/mobius/waila/forge/ForgeWaila.java +++ b/forge/src/main/java/mcp/mobius/waila/forge/ForgeWaila.java @@ -3,7 +3,7 @@ import mcp.mobius.waila.Waila; import mcp.mobius.waila.api.impl.config.PluginConfig; import mcp.mobius.waila.command.DumpHandlerCommand; -import mcp.mobius.waila.util.ModIdentification; +import mcp.mobius.waila.utils.ModIdentification; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.tag.BlockTags; import net.minecraft.tag.EntityTypeTags; From f9c9d0709a32f8a322848366f5fa4d74b4422ff3 Mon Sep 17 00:00:00 2001 From: deirn Date: Tue, 13 Apr 2021 14:17:25 +0700 Subject: [PATCH 09/13] publish api only artifacts --- build.gradle | 29 ++++++++++++++++++++++ gradle/gitlab_maven.gradle | 51 ++++++++++++++++++++++++-------------- 2 files changed, 61 insertions(+), 19 deletions(-) diff --git a/build.gradle b/build.gradle index c27e3205d..6ed51f25b 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,35 @@ subprojects { minecraft "com.mojang:minecraft:${minecraft}" mappings "net.fabricmc:yarn:${yarn}:v2" } + + afterEvaluate { + task apiJar(type: Jar) { + dependsOn remapJar + + classifier "api" + + include "fabric.mod.json" + include "mcp/mobius/waila/api/**" + exclude "mcp/mobius/waila/api/impl/**" + + from zipTree(remapJar.archiveFile) + } + + task apiSourcesJar(type: Jar) { + dependsOn remapSourcesJar + + classifier "api-sources" + + include "fabric.mod.json" + include "mcp/mobius/waila/api/**" + exclude "mcp/mobius/waila/api/impl/**" + + from zipTree(remapSourcesJar.output) + } + + tasks.build.dependsOn apiJar, apiSourcesJar + } + } allprojects { diff --git a/gradle/gitlab_maven.gradle b/gradle/gitlab_maven.gradle index 1c3a3c532..8f394838e 100644 --- a/gradle/gitlab_maven.gradle +++ b/gradle/gitlab_maven.gradle @@ -1,26 +1,39 @@ -publishing { - publications { - mavenForge(MavenPublication) { - artifactId = rootProject.archivesBaseName + "-" + project.name - artifact(remapJar) { - classifier null +afterEvaluate { + publishing { + publications { + runtime(MavenPublication) { + artifactId = rootProject.archivesBaseName + version = "${project.name}-${project.version}" + artifact(remapJar) { + classifier null + } + artifact(sourcesJar) { + builtBy remapSourcesJar + } } - artifact(sourcesJar) { - builtBy remapSourcesJar + api(MavenPublication) { + artifactId = "${rootProject.archivesBaseName}-api" + version = "${project.name}-${project.version}" + artifact(apiJar) { + classifier null + } + artifact(apiSourcesJar) { + classifier "sources" + } } } - } - repositories { - maven { - url "https://gitlab.com/api/v4/projects/25106863/packages/maven" - name "GitLab" - credentials(HttpHeaderCredentials) { - name = 'Private-Token' - value = System.getenv("GITLAB_TOKEN") - } - authentication { - header(HttpHeaderAuthentication) + repositories { + maven { + url "https://gitlab.com/api/v4/projects/25106863/packages/maven" + name "GitLab" + credentials(HttpHeaderCredentials) { + name = 'Private-Token' + value = System.getenv("GITLAB_TOKEN") + } + authentication { + header(HttpHeaderAuthentication) + } } } } From ae1e09e3a1b39bf7626e16ff089db50bd55edcb2 Mon Sep 17 00:00:00 2001 From: deirn Date: Tue, 13 Apr 2021 15:17:46 +0700 Subject: [PATCH 10/13] Update README.md --- README.md | 152 +----------------------------------------------------- 1 file changed, 2 insertions(+), 150 deletions(-) diff --git a/README.md b/README.md index 837254d76..d5286f04d 100644 --- a/README.md +++ b/README.md @@ -1,153 +1,5 @@ -# What The Hell Is That? -[![License](https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-blue.svg)](https://bit.ly/cc-by-nc-sa-40) +# What The Hell Is That? [![License](https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-blue.svg)](https://bit.ly/cc-by-nc-sa-40) **WTHIT** - a fork of [HWYLA](https://minecraft.curseforge.com/projects/hwyla) by [TehNut](https://www.curseforge.com/members/tehnut) which is a fork of [WAILA](https://minecraft.curseforge.com/projects/waila) by [ProfMobius](https://minecraft.curseforge.com/members/ProfMobius). -*This fork is permitted under the [CC BY-NC-SA 4.0](LICENSE.md) license. Usage of this mod is permitted in all modpacks.* - ---- - -## Creating a WTHIT Plugin - -### Add the bad maven to your `build.gradle` - -```groovy -repositories { - maven { url "https://bai.jfrog.io/artifactory/maven" } -} -``` - -### Add WTHIT as a dependency -
- Fabric - - ```groovy - dependencies { - modImplementation "mcp.mobius.waila:wthit-fabric:${wthit_version}" - } - ``` - -
- -
- Forge - - ```groovy - dependencies { - compile fg.deobf("mcp.mobius.waila:wthit-forge:${wthit_version}") - } - ``` - -
- -
- Architectury - - in common subproject: - ```groovy - dependencies { - modCompileOnly "mcp.mobius.waila:wthit-common:${wthit_version}" - } - ``` - in patform subprojects: - ```groovy - dependencies { - modRuntimeOnly "mcp.mobius.waila:wthit-${name}:${wthit_version}" - } - ``` - -
- -### Make a class that implements `IWailaPlugin` -```java -public class ExamplePlugin implements IWailaPlugin { - @Override - public void register(IRegistrar registrar) { - // register your component here - } -} -``` - -### Register your plugin - -
- Fabric - - In your `fabric.mod.json` add a custom value - ```json5 - { - "waila:plugins": { - "id": "mymod:my_plugin", - "initializer": "foo.bar.Baz", - } - } - ``` - `waila:plugins` can also be an array of objects instead of a singular object. - A required field can be added to specify mods required for that plugin to be loaded. - It can either be a single string or an array of strings. - ```json5 - { - "waila:plugins": { - "id": "mymod:my_plugin", - "initializer": "foo.bar.Baz", - "required": "mod_a" - } - } - ``` - -
- -
- Forge - - In your `mods.toml` - ```toml - [[wailaPlugins]] - id = "mymod:my_plugin1" - initializer = "com.example.MyPlugin1" - - # with dependency - [[wailaPlugins]] - id = "mymod:my_plugin2" - initializer = "com.example.MyPlugin2" - required = "mod_a" - - # also accept an array of dependencies - [[wailaPlugins]] - id = "mymod:my_plugin3" - initializer = "com.example.MyPlugin3" - required = ["mod_a", "mod_b"] - ``` - - **`@WailaPlugin` annotation is deprecated and will be removed in future releases** - -
- -### (Optional) Add WTHIT as a mod dependency -Both on fabric and forge, you can use either `wthit` or `waila` as a dependency in your mod metadata. -Though if you use any WTHIT specific APIs, I suggest depending on `wthit` instead. - -
- fabric.mod.json - - ```json5 - "depends": { - "wthit": ">=2", - - // or - "waila": ">=2" - } - ``` - -
- -
- mods.toml - - ```toml - [[dependencies.examplemod]] - modId = "wthit" # or waila - versionRange="[2,)" - ``` - -
+### [See the wiki for how to create your own plugin](https://github.com/badasintended/wthit/wiki) From 5d1ca8c18118e2d831a7157c87ecdb1ab520ece7 Mon Sep 17 00:00:00 2001 From: deirn Date: Wed, 14 Apr 2021 13:28:47 +0700 Subject: [PATCH 11/13] Update issue templates --- .github/ISSUE_TEMPLATE/api-related-issue.md | 10 ++++++++++ .github/ISSUE_TEMPLATE/api.md | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/api-related-issue.md create mode 100644 .github/ISSUE_TEMPLATE/api.md diff --git a/.github/ISSUE_TEMPLATE/api-related-issue.md b/.github/ISSUE_TEMPLATE/api-related-issue.md new file mode 100644 index 000000000..df871cd5e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/api-related-issue.md @@ -0,0 +1,10 @@ +--- +name: API Related Issue +about: Describe this issue template's purpose here. +title: '' +labels: api +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/api.md b/.github/ISSUE_TEMPLATE/api.md new file mode 100644 index 000000000..09145f64c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/api.md @@ -0,0 +1,10 @@ +--- +name: API +about: if you have complaints about the API +title: '' +labels: api +assignees: '' + +--- + + From 388faa2bc12232b2c8345b76e83200a7f6046a59 Mon Sep 17 00:00:00 2001 From: deirn Date: Wed, 14 Apr 2021 13:29:23 +0700 Subject: [PATCH 12/13] Update issue templates --- .github/ISSUE_TEMPLATE/api-related-issue.md | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/api-related-issue.md diff --git a/.github/ISSUE_TEMPLATE/api-related-issue.md b/.github/ISSUE_TEMPLATE/api-related-issue.md deleted file mode 100644 index df871cd5e..000000000 --- a/.github/ISSUE_TEMPLATE/api-related-issue.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: API Related Issue -about: Describe this issue template's purpose here. -title: '' -labels: api -assignees: '' - ---- - - From 81925d31233b44ca72ee35b5aeddde4cf62edc9e Mon Sep 17 00:00:00 2001 From: deirn Date: Wed, 14 Apr 2021 13:50:44 +0700 Subject: [PATCH 13/13] [ci skip] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5286f04d..59d587cd3 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ **WTHIT** - a fork of [HWYLA](https://minecraft.curseforge.com/projects/hwyla) by [TehNut](https://www.curseforge.com/members/tehnut) which is a fork of [WAILA](https://minecraft.curseforge.com/projects/waila) by [ProfMobius](https://minecraft.curseforge.com/members/ProfMobius). -### [See the wiki for how to create your own plugin](https://github.com/badasintended/wthit/wiki) +### WIP Documentation in [badasintended.github.io/wthit](https://badasintended.github.io/wthit)