diff --git a/src/main/java/io/github/sakurawald/Fuji.java b/src/main/java/io/github/sakurawald/Fuji.java index d77b81f41..3b86508ae 100644 --- a/src/main/java/io/github/sakurawald/Fuji.java +++ b/src/main/java/io/github/sakurawald/Fuji.java @@ -38,7 +38,6 @@ // TODO: friendly mixin check // TODO: luckperms context calculator -// TODO: sign module public class Fuji implements ModInitializer { public static final String MOD_ID = "fuji"; diff --git a/src/main/java/io/github/sakurawald/config/model/ConfigModel.java b/src/main/java/io/github/sakurawald/config/model/ConfigModel.java index 47a14622e..9dcf63055 100644 --- a/src/main/java/io/github/sakurawald/config/model/ConfigModel.java +++ b/src/main/java/io/github/sakurawald/config/model/ConfigModel.java @@ -1155,9 +1155,21 @@ public class InteractEntity { } public Nickname nickname = new Nickname(); + + @Documentation(""" + This module provides `/nickname` command. + """) public class Nickname { public boolean enable = false; } + + public Color color = new Color(); + @Documentation(""" + This module provides colorize for: sign, anvil + """) + public class Color { + public boolean enable = false; + } } } diff --git a/src/main/java/io/github/sakurawald/module/initializer/test/TestInitializer.java b/src/main/java/io/github/sakurawald/module/initializer/test/TestInitializer.java index 9a12f2a94..e17f39b5a 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/test/TestInitializer.java +++ b/src/main/java/io/github/sakurawald/module/initializer/test/TestInitializer.java @@ -1,10 +1,12 @@ package io.github.sakurawald.module.initializer.test; +import com.mojang.authlib.GameProfile; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; import eu.pb4.placeholders.api.PlaceholderContext; import eu.pb4.placeholders.api.Placeholders; +import io.github.sakurawald.Fuji; import io.github.sakurawald.module.initializer.ModuleInitializer; import lombok.extern.slf4j.Slf4j; import net.fabricmc.loader.api.FabricLoader; @@ -35,9 +37,6 @@ private static int clearChat(CommandContext ctx) { ServerPlayerEntity player = source.getPlayer(); - log.warn("custom name = {}", player.getCustomName()); - - return 1; } diff --git a/src/main/java/io/github/sakurawald/module/mixin/color/anvil/AnvilScreenHandlerMixin.java b/src/main/java/io/github/sakurawald/module/mixin/color/anvil/AnvilScreenHandlerMixin.java new file mode 100644 index 000000000..fee0fd6ea --- /dev/null +++ b/src/main/java/io/github/sakurawald/module/mixin/color/anvil/AnvilScreenHandlerMixin.java @@ -0,0 +1,30 @@ +package io.github.sakurawald.module.mixin.color.anvil; + +import io.github.sakurawald.util.MessageUtil; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.screen.AnvilScreenHandler; +import net.minecraft.screen.ForgingScreenHandler; +import net.minecraft.screen.ScreenHandlerContext; +import net.minecraft.screen.ScreenHandlerType; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +@Mixin(AnvilScreenHandler.class) +public abstract class AnvilScreenHandlerMixin { + + @Shadow + private String newItemName; + + @ModifyArg(method = "updateResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;set(Lnet/minecraft/component/ComponentType;Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0)) + public Object updateResult(Object text) { + return MessageUtil.ofText(newItemName); + } + + @ModifyArg(method = "setNewItemName", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;set(Lnet/minecraft/component/ComponentType;Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0)) + public Object newItemName(Object text) { + return MessageUtil.ofText(newItemName); + } +} diff --git a/src/main/java/io/github/sakurawald/module/mixin/color/sign/SignBlockEntityMixin.java b/src/main/java/io/github/sakurawald/module/mixin/color/sign/SignBlockEntityMixin.java new file mode 100644 index 000000000..c1e2f9eec --- /dev/null +++ b/src/main/java/io/github/sakurawald/module/mixin/color/sign/SignBlockEntityMixin.java @@ -0,0 +1,31 @@ +package io.github.sakurawald.module.mixin.color.sign; + +import io.github.sakurawald.util.MessageUtil; +import lombok.extern.slf4j.Slf4j; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.block.entity.SignText; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +import java.util.Arrays; + +@Mixin(SignBlockEntity.class) +@Slf4j +public class SignBlockEntityMixin { + + @ModifyVariable(method = "setText", at = @At("HEAD"), argsOnly = true) + SignText method(SignText signText) { + Text[] messages = signText.getMessages(false); + Text[] newMessages = new Text[messages.length]; + for (int i = 0; i < messages.length; i++) { + String string = PlainTextComponentSerializer.plainText().serialize(messages[i].asComponent()); + Text formated = MessageUtil.ofText(string); + newMessages[i] = formated; + } + + return new SignText(newMessages, newMessages, signText.getColor(), signText.isGlowing()); + } +} diff --git a/src/main/resources/fuji.mixins.json b/src/main/resources/fuji.mixins.json index ab924f042..032f5da70 100755 --- a/src/main/resources/fuji.mixins.json +++ b/src/main/resources/fuji.mixins.json @@ -50,6 +50,8 @@ "resource_world.registry.DimensionOptionsMixin", "resource_world.registry.WorldGenSettingsMixin", "seen.PlayerListMixin", + "color.anvil.AnvilScreenHandlerMixin", + "color.sign.SignBlockEntityMixin", "sit.InteractModifierMixin", "skin.PlayerListMixin", "skin.ServerLoginNetworkHandlerMixin",