From 42b05a8e7c94e4a4f40bc04a5abf4f955fe56382 Mon Sep 17 00:00:00 2001 From: Wilyicaro Date: Tue, 14 Jan 2025 02:16:30 -0300 Subject: [PATCH] Beta 1.7.10.2502.0 -Added Legacy Title Screen client mixin option -Added Legacy4J Settings key mapping, with `Y` as default key -Now, multiline edit boxes will have a LE-style and allow using the keyboard -Now, the Add Album screen will allow description changes -Fixed Loading Overlay screen not rendering correctly in versions +1.21.2 -Fixed Firework with incorrect texture format in versions +1.21.2 -Fixed mixin crash in versions forge/neoforge <=1.20.4 -Fixed Sword blocking being applied to the shield, and to the bow in versions +1.21.4 -Fixed `render_enchanted_book` UI Element Type not having an initial opening animation --- gradle.properties | 4 +- src/main/java/wily/legacy/Legacy4JClient.java | 6 ++ .../legacy/client/LegacyMixinOptions.java | 1 + .../wily/legacy/client/LegacyOptions.java | 2 +- .../java/wily/legacy/client/PackAlbum.java | 13 ++- .../legacy/init/LegacyUIElementTypes.java | 9 +- .../mixin/base/AbstractScrollWidgetMixin.java | 32 +++++++ .../mixin/base/ItemInHandRendererMixin.java | 10 +- .../mixin/base/LoadingOverlayMixin.java | 7 +- .../mixin/base/MultilineEditBoxMixin.java | 87 ++++++++++++++++++ .../wily/legacy/mixin/base/ScreenMixin.java | 3 + .../mixin/base/client/gui/ForgeGuiMixin.java | 2 +- .../title}/SplashRendererMixin.java | 2 +- .../{ => client/title}/TitleScreenMixin.java | 6 +- .../resources/assets/legacy/lang/en_us.json | 12 ++- .../resources/assets/legacy/lang/pt_br.json | 7 +- .../resources/assets/legacy/lang/pt_pt.json | 7 +- .../textures/entity/projectiles/firework.png | Bin 555 -> 284 bytes src/main/resources/legacy.mixins.json5 | 8 +- 19 files changed, 180 insertions(+), 38 deletions(-) create mode 100644 src/main/java/wily/legacy/mixin/base/AbstractScrollWidgetMixin.java create mode 100644 src/main/java/wily/legacy/mixin/base/MultilineEditBoxMixin.java rename src/main/java/wily/legacy/mixin/base/{ => client/title}/SplashRendererMixin.java (96%) rename src/main/java/wily/legacy/mixin/base/{ => client/title}/TitleScreenMixin.java (96%) diff --git a/gradle.properties b/gradle.properties index 10c3ec7c..e90c537e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3072M enabled_platforms=fabric,forge,neoforge archives_base_name=Legacy4J -mod_version=1.7.10.2501.3 +mod_version=1.7.10.2502.0 mod_id=legacy mod_license=MIT mod_name=Legacy4J @@ -21,7 +21,7 @@ fabric_api_version=[VERSIONED] forge_version=[VERSIONED] neoforge_version=[VERSIONED] -factory_api_version=2.2.2501.23 +factory_api_version=2.2.2501.24 sodium_version=mc1.21-0.6.0-beta.2-fabric iris_version=1.8.0-beta.4+1.21-fabric diff --git a/src/main/java/wily/legacy/Legacy4JClient.java b/src/main/java/wily/legacy/Legacy4JClient.java index fac41c1e..61e5eef4 100644 --- a/src/main/java/wily/legacy/Legacy4JClient.java +++ b/src/main/java/wily/legacy/Legacy4JClient.java @@ -245,6 +245,7 @@ public static void displayEffectActivationAnimation(/*? if <1.20.5 {*//*MobEffec }, Optional.of(WorldPresets.SINGLE_BIOME_SURFACE), (createWorldScreen, settings) -> new LegacyBuffetWorldScreen(createWorldScreen, settings.worldgenLoadContext().lookupOrThrow(Registries.BIOME), holder -> createWorldScreen.getUiState().updateDimensions(PresetEditor.fixedBiomeConfigurator(holder))))); public static Screen getReplacementScreen(Screen screen){ + if (!LegacyMixinOptions.legacyTitleScreen.get()) return screen; if (screen instanceof JoinMultiplayerScreen) return new PlayGameScreen(new TitleScreen(),2); else if (screen instanceof DisconnectedScreen s) @@ -321,6 +322,9 @@ public static void preTick(Minecraft minecraft){ while (keyHostOptions.consumeClick()) { minecraft.setScreen(new HostOptionsScreen()); } + while (keyLegacy4JSettings.consumeClick()) { + minecraft.setScreen(new Legacy4JSettingsScreen(Minecraft.getInstance().screen)); + } boolean left; while ((left=keyCycleHeldLeft.consumeClick()) || keyCycleHeldRight.consumeClick()){ if (minecraft.player != null) { @@ -531,11 +535,13 @@ else if (minecraft.screen instanceof LeaderboardsScreen s){ public static final KeyMapping keyCycleHeldRight = new KeyMapping("legacy.key.cycleHeldRight", InputConstants.KEY_PAGEUP, "key.categories.inventory"); public static final KeyMapping keyToggleCursor = new KeyMapping("legacy.key.toggleCursor", -1, "key.categories.misc"); public static KeyMapping keyHostOptions = new KeyMapping( MOD_ID +".key.host_options", InputConstants.KEY_H, "key.categories.misc"); + public static KeyMapping keyLegacy4JSettings = new KeyMapping( MOD_ID +".key.legacy4JSettings", InputConstants.KEY_Y, "key.categories.misc"); public static KeyMapping keyFlyUp = new KeyMapping( MOD_ID +".key.flyUp", InputConstants.KEY_UP, "key.categories.movement"); public static KeyMapping keyFlyDown = new KeyMapping( MOD_ID +".key.flyDown", InputConstants.KEY_DOWN, "key.categories.movement"); public static KeyMapping keyFlyLeft = new KeyMapping( MOD_ID +".key.flyLeft", InputConstants.KEY_LEFT, "key.categories.movement"); public static KeyMapping keyFlyRight = new KeyMapping( MOD_ID +".key.flyRight", InputConstants.KEY_RIGHT, "key.categories.movement"); + public static void resetOptions(Minecraft minecraft){ whenResetOptions.forEach(Runnable::run); for (KeyMapping keyMapping : minecraft.options.keyMappings) { diff --git a/src/main/java/wily/legacy/client/LegacyMixinOptions.java b/src/main/java/wily/legacy/client/LegacyMixinOptions.java index 06b1db36..eddeb2f6 100644 --- a/src/main/java/wily/legacy/client/LegacyMixinOptions.java +++ b/src/main/java/wily/legacy/client/LegacyMixinOptions.java @@ -23,6 +23,7 @@ public class LegacyMixinOptions { public static final LegacyConfig legacyBrewingStandScreen = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.brewing", ()-> new LegacyConfigDisplay<>("legacyBrewingStandScreen", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); public static final LegacyConfig legacyBookScreen = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.book", ()-> new LegacyConfigDisplay<>("legacyBookScreen", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); public static final LegacyConfig legacyCreateWorldScreen = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.create_world", ()-> new LegacyConfigDisplay<>("legacyCreateWorldScreen", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); + public static final LegacyConfig legacyTitleScreen = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.title", ()-> new LegacyConfigDisplay<>("legacyTitleScreen", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); public static final LegacyConfig legacyGui = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.gui", ()-> new LegacyConfigDisplay<>("legacyGui", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); public static final LegacyConfig legacyChat = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.chat", ()-> new LegacyConfigDisplay<>("legacyChat", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); public static final LegacyConfig legacyBossHealth = CLIENT_MIXIN_STORAGE.register(LegacyConfig.createBoolean("legacy.mixin.base.client.bosshealth", ()-> new LegacyConfigDisplay<>("legacyBossHealth", b-> LegacyComponents.NEEDS_RESTART), true, b->{}, CLIENT_MIXIN_STORAGE)); diff --git a/src/main/java/wily/legacy/client/LegacyOptions.java b/src/main/java/wily/legacy/client/LegacyOptions.java index 1c303558..db816d96 100644 --- a/src/main/java/wily/legacy/client/LegacyOptions.java +++ b/src/main/java/wily/legacy/client/LegacyOptions.java @@ -207,7 +207,7 @@ public static Function staticComponent(Component component){ public static final LegacyConfig hudScale = CLIENT_STORAGE.register(createInteger("hudScale", Options::genericValueLabel, 1, ()->3, 2)); public static final LegacyConfig hudOpacity = CLIENT_STORAGE.register(createDouble("hudOpacity", LegacyOptions::percentValueLabel, 0.8)); public static final LegacyConfig hudDistance = CLIENT_STORAGE.register(createDouble("hudDistance", LegacyOptions::percentValueLabel, 1.0)); - public static final LegacyConfig interfaceResolution = CLIENT_STORAGE.register(createDouble("interfaceResolution", (c, d)-> percentValueLabel(c, 0.25 + d * 1.5), 0.5, d -> Minecraft.getInstance().resizeDisplay())); + public static final LegacyConfig interfaceResolution = CLIENT_STORAGE.register(createDouble("interfaceResolution", (c, d)-> percentValueLabel(c, 0.25 + d * 1.5), 0.5, d -> Minecraft.getInstance().execute(Minecraft.getInstance()::resizeDisplay))); public static final LegacyConfig interfaceSensitivity = CLIENT_STORAGE.register(createDouble("interfaceSensitivity", (c, d)-> percentValueLabel(c, d*2), 0.5, d -> {})); public static final LegacyConfig controllerSensitivity = CLIENT_STORAGE.register(LegacyConfig.createDouble("controllerSensitivity", ArbitrarySupplier.of(new LegacyConfigDisplay<>(Component.translatable("options.sensitivity"))), (c, d)-> percentValueLabel(c, d*2), 0.5, d -> {}, CLIENT_STORAGE)); public static final LegacyConfig overrideTerrainFogStart = CLIENT_STORAGE.register(createBoolean("overrideTerrainFogStart", true)); diff --git a/src/main/java/wily/legacy/client/PackAlbum.java b/src/main/java/wily/legacy/client/PackAlbum.java index ca6da715..812642db 100644 --- a/src/main/java/wily/legacy/client/PackAlbum.java +++ b/src/main/java/wily/legacy/client/PackAlbum.java @@ -351,12 +351,15 @@ protected void addButtons() { repeat++; String id = TEMPLATE_ALBUM +(repeat > 0 ? "_" + repeat : ""); setSelectedIndex(albums.size()); - EditBox nameBox = new EditBox(minecraft.font, width / 2 - 100,0,200, 20, Component.translatable("legacy.menu.album_name")); + EditBox nameBox = new EditBox(minecraft.font, width / 2 - 100,0,200, 20, Component.translatable("legacy.menu.album_info")); + Component description = Component.translatable("legacy.menu.albums.resource.template.description"); + MultiLineEditBox descriptionBox = new MultiLineEditBox(minecraft.font, width / 2 - 100,0,200, 60, description, nameBox.getMessage()); + Component name = Component.translatable("legacy.menu.albums.resource.template",repeat); nameBox.setHint(name); - minecraft.setScreen(new ConfirmationScreen(parent, 230, 120, ADD_ALBUM, Component.translatable("legacy.menu.album_name"), p -> { + minecraft.setScreen(new ConfirmationScreen(parent, 230, 184, ADD_ALBUM, nameBox.getMessage(), p -> { minecraft.setScreen(new PackSelectionScreen(packRepository, r -> { - PackAlbum.resourceAlbums.put(id,new PackAlbum(id, 0,nameBox.getValue().isBlank() ? name : Component.literal(nameBox.getValue()),Component.translatable("legacy.menu.albums.resource.template.description"),Optional.empty(),Optional.empty(), getSelectableIds(packRepository), Optional.empty())); + PackAlbum.resourceAlbums.put(id,new PackAlbum(id, 0,nameBox.getValue().isBlank() ? name : Component.literal(nameBox.getValue()), descriptionBox.getValue().isBlank() ? description : Component.literal(descriptionBox.getValue()),Optional.empty(),Optional.empty(), getSelectableIds(packRepository), Optional.empty())); save(); updateSavedAlbum(); minecraft.setScreen(screen); @@ -368,11 +371,13 @@ protected void init() { super.init(); nameBox.setPosition(panel.x + 15, panel.y + 45); addRenderableWidget(nameBox); + descriptionBox.setPosition(panel.x + 15, panel.y + 69); + addRenderableWidget(descriptionBox); } }); }).build()); AbstractButton removeButton; - renderableVList.addRenderable(removeButton= Button.builder(REMOVE_ALBUM, b-> { + renderableVList.addRenderable(removeButton = Button.builder(REMOVE_ALBUM, b-> { albums.remove(getSelectedAlbum().id()); save(); updateSavedAlbum(); diff --git a/src/main/java/wily/legacy/init/LegacyUIElementTypes.java b/src/main/java/wily/legacy/init/LegacyUIElementTypes.java index 0ca80380..23f265be 100644 --- a/src/main/java/wily/legacy/init/LegacyUIElementTypes.java +++ b/src/main/java/wily/legacy/init/LegacyUIElementTypes.java @@ -8,6 +8,7 @@ import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.layouts.LayoutElement; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.EnchantmentScreen; import net.minecraft.client.model.BookModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.model.geom.ModelPart; @@ -148,7 +149,8 @@ public ArbitrarySupplier getIconHolderOverride() { a.getElement(elementName + ".component", Component.class).ifPresent((c) -> ScreenUtil.drawOutlinedString(guiGraphics ,Minecraft.getInstance().font, c, a.getInteger(elementName + ".x", 0), a.getInteger(elementName + ".y", 0), a.getInteger(elementName + ".color", 16777215), a.getInteger(elementName + ".outlineColor", 0), a.getFloat(elementName + ".outline", 0.5f))); })))); })); - public static final UIDefinitionManager.ElementType RENDER_ENCHANTMENT_BOOK = UIDefinitionManager.ElementType.registerConditional("render_enchanted_book", UIDefinitionManager.ElementType.createIndexable(slots->(uiDefinition, accessorFunction, elementName, element) -> { + + public static final UIDefinitionManager.ElementType RENDER_ENCHANTED_BOOK = UIDefinitionManager.ElementType.registerConditional("render_enchanted_book", UIDefinitionManager.ElementType.createIndexable(slots->(uiDefinition, accessorFunction, elementName, element) -> { Bearer bookModel = Bearer.of(null); Bearer flip = Bearer.of(0f); Bearer oFlip = Bearer.of(0f); @@ -177,14 +179,15 @@ public ArbitrarySupplier getIconHolderOverride() { flipT.set(flipT.get() + (float)(random.nextInt(4) - random.nextInt(4))); } while(flip.get() <= flipT.get() + 1.0F && flip.get() >= flipT.get() - 1.0F); } + oFlip.set(flip.get()); oOpen.set(open.get()); - open.set(open.get() - 0.2F); + open.set(open.get() + 0.2F); open.set(Mth.clamp(open.get(), 0.0F, 1.0F)); float f1 = (flipT.get() - flip.get()) * 0.4F; f1 = Mth.clamp(f1, -0.2F, 0.2F); - flipA.set(flipA.get()+ (f1 - flipA.get()) * 0.9F); + flipA.set(flipA.get() + (f1 - flipA.get()) * 0.9F); flip.set(flip.get() + flipA.get()); })); UIDefinitionManager.ElementType.parseTranslationElements(uiDefinition, elementName, element); diff --git a/src/main/java/wily/legacy/mixin/base/AbstractScrollWidgetMixin.java b/src/main/java/wily/legacy/mixin/base/AbstractScrollWidgetMixin.java new file mode 100644 index 00000000..a64ac74f --- /dev/null +++ b/src/main/java/wily/legacy/mixin/base/AbstractScrollWidgetMixin.java @@ -0,0 +1,32 @@ +package wily.legacy.mixin.base; + +import net.minecraft.client.gui.GuiGraphics; +//? if <1.21.4 { +import net.minecraft.client.gui.components.AbstractScrollWidget; +//?} else { +/*import net.minecraft.client.gui.components.AbstractTextAreaWidget; +*///?} +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.network.chat.Component; +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 wily.factoryapi.base.client.FactoryGuiGraphics; +import wily.legacy.util.LegacySprites; + +@Mixin(/*? if <1.21.4 {*/AbstractScrollWidget/*?} else {*//*AbstractTextAreaWidget*//*?}*/.class) +public abstract class AbstractScrollWidgetMixin extends AbstractWidget { + + public AbstractScrollWidgetMixin(int i, int j, int k, int l, Component component) { + super(i, j, k, l, component); + } + + @Inject(method = "renderBorder", at = @At("HEAD"), cancellable = true) + private void renderBorder(GuiGraphics guiGraphics, int i, int j, int k, int l, CallbackInfo ci){ + FactoryGuiGraphics.of(guiGraphics).blitSprite(LegacySprites.TEXT_FIELD, i, j, k, l); + if (isHoveredOrFocused()) + FactoryGuiGraphics.of(guiGraphics).blitSprite(LegacySprites.HIGHLIGHTED_TEXT_FIELD, i - 1, j - 1, k + 2, l + 2); + ci.cancel(); + } +} diff --git a/src/main/java/wily/legacy/mixin/base/ItemInHandRendererMixin.java b/src/main/java/wily/legacy/mixin/base/ItemInHandRendererMixin.java index 81167e3a..206b8d40 100644 --- a/src/main/java/wily/legacy/mixin/base/ItemInHandRendererMixin.java +++ b/src/main/java/wily/legacy/mixin/base/ItemInHandRendererMixin.java @@ -120,17 +120,19 @@ private void applyItemTransforms(PoseStack poseStack, float h, HumanoidArm human this.applyItemArmAttackTransform(poseStack, humanoidArm, h); } + //? if <1.21.4 { @Inject(method = "renderArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;applyItemArmTransform(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/world/entity/HumanoidArm;F)V", shift = At.Shift.AFTER, ordinal = 4)) private void renderArmWithItemBlockAnim(AbstractClientPlayer abstractClientPlayer, float f, float g, InteractionHand interactionHand, float h, ItemStack itemStack, float i, PoseStack poseStack, MultiBufferSource multiBufferSource, int j, CallbackInfo ci) { - if (LegacyConfig.hasCommonConfigEnabled(LegacyConfig.legacySwordBlocking)) { + if (LegacyConfig.hasCommonConfigEnabled(LegacyConfig.legacySwordBlocking) && !(itemStack.getItem() instanceof ShieldItem)) { boolean bl = interactionHand == InteractionHand.MAIN_HAND; HumanoidArm humanoidArm = bl ? abstractClientPlayer.getMainArm() : abstractClientPlayer.getMainArm().getOpposite(); + int q = humanoidArm == HumanoidArm.RIGHT ? 1 : -1; this.applyItemArmAttackTransform(poseStack, humanoidArm, h); poseStack.translate(-0.14142136F, 0.08F, 0.14142136F); poseStack.mulPose(Axis.XP.rotationDegrees(-102.25F)); - poseStack.mulPose(Axis.YP.rotationDegrees(13.365F)); - poseStack.mulPose(Axis.ZP.rotationDegrees(78.05F)); - + poseStack.mulPose(Axis.YP.rotationDegrees((float)q * 13.365F)); + poseStack.mulPose(Axis.ZP.rotationDegrees((float)q * 78.05F)); } } + //?} } diff --git a/src/main/java/wily/legacy/mixin/base/LoadingOverlayMixin.java b/src/main/java/wily/legacy/mixin/base/LoadingOverlayMixin.java index 3e84102a..fb1f4ef0 100644 --- a/src/main/java/wily/legacy/mixin/base/LoadingOverlayMixin.java +++ b/src/main/java/wily/legacy/mixin/base/LoadingOverlayMixin.java @@ -65,17 +65,14 @@ public void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo if (timer % INTROS.size() >= INTROS.size() - 0.01f) finishedIntro = true; guiGraphics.fill(RenderType.guiOverlay(), 0, 0, guiGraphics.guiWidth(), guiGraphics.guiHeight(), 0xFFFFFFFF); - //? if <1.21.2 { + FactoryGuiGraphics.of(guiGraphics).blit(BACKGROUND, 0, 0,0,0, guiGraphics.guiWidth(), guiGraphics.guiHeight(),guiGraphics.guiWidth(), guiGraphics.guiHeight()); - //?} + RenderSystem.enableBlend(); float last = (float) Math.ceil(timer) - timer; FactoryGuiGraphics.of(guiGraphics).setColor(1.0f, 1.0f, 1.0f, last <= 0.4f ? last * 2.5f : last > 0.6f ? (1 - last) * 2.5f : 1.0f); FactoryGuiGraphics.of(guiGraphics).blit(INTROS.get((int) (timer % INTROS.size())), (guiGraphics.guiWidth() - guiGraphics.guiHeight() * 320 / 180) / 2, 0, 0, 0, guiGraphics.guiHeight() * 320 / 180, guiGraphics.guiHeight(), guiGraphics.guiHeight() * 320 / 180, guiGraphics.guiHeight()); FactoryGuiGraphics.of(guiGraphics).clearColor(); - //? if >=1.21.2 { - /*FactoryGuiGraphics.of(guiGraphics).blit(BACKGROUND, 0, 0,0,0, guiGraphics.guiWidth(), guiGraphics.guiHeight(),guiGraphics.guiWidth(), guiGraphics.guiHeight()); - *///?} RenderSystem.disableBlend(); } diff --git a/src/main/java/wily/legacy/mixin/base/MultilineEditBoxMixin.java b/src/main/java/wily/legacy/mixin/base/MultilineEditBoxMixin.java new file mode 100644 index 00000000..87f1a1a7 --- /dev/null +++ b/src/main/java/wily/legacy/mixin/base/MultilineEditBoxMixin.java @@ -0,0 +1,87 @@ +package wily.legacy.mixin.base; + +import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.MultiLineEditBox; +import net.minecraft.client.gui.components.MultilineTextField; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import wily.legacy.Legacy4JClient; +import wily.legacy.client.CommonColor; +import wily.legacy.client.screen.ControlTooltip; +import wily.legacy.client.screen.KeyboardScreen; + +@Mixin(MultiLineEditBox.class) +public abstract class MultilineEditBoxMixin extends AbstractWidget implements ControlTooltip.ActionHolder { + public MultilineEditBoxMixin(int i, int j, int k, int l, Component component) { + super(i, j, k, l, component); + } + //? if >1.20.2 { + @Shadow + private long focusedTime; + //?} + + @Shadow @Final private MultilineTextField textField; + + @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) + private void keyPressed(int i, int j, int k, CallbackInfoReturnable cir){ + Screen screen = Minecraft.getInstance().screen; + if (KeyboardScreen.isOpenKey(i) && screen != null){ + Minecraft.getInstance().setScreen(KeyboardScreen.fromStaticListener(this,screen)); + cir.setReturnValue(true); + } + } + //? if <1.21.4 { + @Override + public void onClick(double d, double e){ + Screen screen = Minecraft.getInstance().screen; + if (Screen.hasShiftDown() || Legacy4JClient.controllerManager.isControllerTheLastInput) { + Minecraft.getInstance().setScreen(KeyboardScreen.fromStaticListener(this, screen)); + } + } + //?} else { + /*@Inject(method = "onClick", at = @At("HEAD"), cancellable = true) + private void onClick(double d, double e, CallbackInfo ci){ + Screen screen = Minecraft.getInstance().screen; + if (Screen.hasShiftDown() || Legacy4JClient.controllerManager.isControllerTheLastInput) { + Minecraft.getInstance().setScreen(KeyboardScreen.fromStaticListener(this, screen)); + ci.cancel(); + } + } + *///?} + + @ModifyArg(method = "renderContents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;fill(IIIII)V", ordinal = 0), index = 4) + public int renderWidget(int i) { + return CommonColor.WIDGET_TEXT.get() | 0xFF000000; + } + + @ModifyVariable(method = "renderContents", at = @At(value = "STORE"), ordinal = 0) + public boolean renderWidget(boolean bl) { + return this.isFocused() && (Util.getMillis()/*? if >1.20.1 {*/ - this.focusedTime/*?}*/) / 180L % 2 == 0L; + } + + @Redirect(method = "renderContents", at = @At(value = "INVOKE", target = /*? if neoforge && >=1.21 {*//*"Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Ljava/lang/String;IIIZ)I"*//*?} else {*/"Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Ljava/lang/String;III)I"/*?}*/, ordinal = 3)) + public int renderWidget(GuiGraphics instance, Font arg, String string, int i, int j, int k/*? if neoforge && >=1.21 {*//*, boolean bl *//*?}*/) { + instance.pose().pushPose(); + instance.pose().translate(i-(textField.cursor() == 0 ? 3 : 4),j+8.5f,0); + instance.pose().scale(6,1.5f,1f); + instance.fill(0,0,1,1, CommonColor.WIDGET_TEXT.get() | 0xFF000000); + instance.pose().popPose(); + return 0; + } + + @Override + public @Nullable Component getAction(Context context) { + return isFocused() ? context.actionOfContext(KeyContext.class, ControlTooltip::getKeyboardAction) : null; + } +} diff --git a/src/main/java/wily/legacy/mixin/base/ScreenMixin.java b/src/main/java/wily/legacy/mixin/base/ScreenMixin.java index 88b43b73..9dbd5012 100644 --- a/src/main/java/wily/legacy/mixin/base/ScreenMixin.java +++ b/src/main/java/wily/legacy/mixin/base/ScreenMixin.java @@ -7,6 +7,7 @@ import net.minecraft.client.gui.components.events.AbstractContainerEventHandler; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -23,6 +24,7 @@ import wily.legacy.client.LegacyTipManager; import wily.legacy.client.screen.ControlTooltip; import wily.legacy.client.screen.KeyboardScreen; +import wily.legacy.client.screen.Legacy4JSettingsScreen; import wily.legacy.init.LegacyRegistries; import wily.legacy.util.ScreenUtil; @@ -91,6 +93,7 @@ private static void hasShiftDown(CallbackInfoReturnable cir){ @Inject(method = "keyPressed",at = @At("HEAD")) private void keyPressed(int i, int j, int k, CallbackInfoReturnable cir){ if (Legacy4JClient.keyToggleCursor.matches(i,j)) Legacy4JClient.controllerManager.toggleCursor(); + else if (Legacy4JClient.keyLegacy4JSettings.matches(i,j) && (self().shouldCloseOnEsc() || self() instanceof TitleScreen)) minecraft.setScreen(new Legacy4JSettingsScreen(self())); } @Redirect(method = "rebuildWidgets",at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;clearFocus()V")) public void rebuildWidgets(Screen instance) { diff --git a/src/main/java/wily/legacy/mixin/base/client/gui/ForgeGuiMixin.java b/src/main/java/wily/legacy/mixin/base/client/gui/ForgeGuiMixin.java index b3014fe6..654adb33 100644 --- a/src/main/java/wily/legacy/mixin/base/client/gui/ForgeGuiMixin.java +++ b/src/main/java/wily/legacy/mixin/base/client/gui/ForgeGuiMixin.java @@ -1,5 +1,5 @@ //? if <1.20.5 && (forge || neoforge) { -/*package wily.legacy.mixin.base; +/*package wily.legacy.mixin.base.client.gui; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; diff --git a/src/main/java/wily/legacy/mixin/base/SplashRendererMixin.java b/src/main/java/wily/legacy/mixin/base/client/title/SplashRendererMixin.java similarity index 96% rename from src/main/java/wily/legacy/mixin/base/SplashRendererMixin.java rename to src/main/java/wily/legacy/mixin/base/client/title/SplashRendererMixin.java index eaad7cc1..26d3f327 100644 --- a/src/main/java/wily/legacy/mixin/base/SplashRendererMixin.java +++ b/src/main/java/wily/legacy/mixin/base/client/title/SplashRendererMixin.java @@ -1,4 +1,4 @@ -package wily.legacy.mixin.base; +package wily.legacy.mixin.base.client.title; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; diff --git a/src/main/java/wily/legacy/mixin/base/TitleScreenMixin.java b/src/main/java/wily/legacy/mixin/base/client/title/TitleScreenMixin.java similarity index 96% rename from src/main/java/wily/legacy/mixin/base/TitleScreenMixin.java rename to src/main/java/wily/legacy/mixin/base/client/title/TitleScreenMixin.java index 9d231e81..116d6f4e 100644 --- a/src/main/java/wily/legacy/mixin/base/TitleScreenMixin.java +++ b/src/main/java/wily/legacy/mixin/base/client/title/TitleScreenMixin.java @@ -1,4 +1,4 @@ -package wily.legacy.mixin.base; +package wily.legacy.mixin.base.client.title; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.Minecraft; @@ -15,17 +15,13 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import wily.factoryapi.FactoryAPI; import wily.factoryapi.base.client.UIAccessor; -import wily.factoryapi.base.client.UIDefinition; import wily.legacy.Legacy4J; import wily.legacy.Legacy4JClient; import wily.legacy.client.ControlType; import wily.legacy.client.controller.ControllerBinding; -import wily.legacy.client.controller.ControllerManager; import wily.legacy.client.screen.*; import wily.legacy.client.screen.compat.WorldHostFriendsScreen; -import wily.legacy.util.LegacyComponents; import wily.legacy.util.ScreenUtil; import java.io.IOException; diff --git a/src/main/resources/assets/legacy/lang/en_us.json b/src/main/resources/assets/legacy/lang/en_us.json index 15e910e9..07e4c976 100644 --- a/src/main/resources/assets/legacy/lang/en_us.json +++ b/src/main/resources/assets/legacy/lang/en_us.json @@ -1140,6 +1140,7 @@ "legacy.key.flyRight": "Fly Right", "legacy.key.flyUp": "Fly Up", "legacy.key.host_options": "Host Options", + "legacy.key.legacy4JSettings": "Legacy4J Settings", "legacy.key.toggleCursor": "Toggle Cursor", "legacy.loadingTip.C418": "Music by C418!", "legacy.loadingTip.animalDespawn": "If an animal can't move more than 20 blocks in any direction, it won't despawn.", @@ -1218,7 +1219,7 @@ "legacy.menu.add_album": "Add Album", "legacy.menu.add_server": "Add Server", "legacy.menu.advancements.toast": "Hold %s to view", - "legacy.menu.album_name": "Enter the name for your album", + "legacy.menu.album_info": "Enter the information for your album", "legacy.menu.album_options": "Album Options", "legacy.menu.album_options_message": "What would you like to do with this album?", "legacy.menu.albums.resource": "Resource Albums", @@ -1313,12 +1314,12 @@ "legacy.menu.host_options.teleport_player": "Teleport To Player", "legacy.menu.how_to_play": "How To Play", "legacy.menu.how_to_play.basics": "Basics", - "legacy.menu.how_to_play.basics_message": "§2HOW TO PLAY: BASICS§r\n\nMinecraft is a game about placing blocks to build anything you can imagine, at night monsters come out, so make sure to build a shelter before that happens.\n\nUse %s to look around\n\nUse %s to move around\n\nPress %s to jump", + "legacy.menu.how_to_play.basics_message": "§2HOW TO PLAY : BASICS§r\n\nMinecraft is a game about placing blocks to build anything you can imagine, at night monsters come out, so make sure to build a shelter before that happens.\n\nUse %s to look around\n\nUse %s to move around\n\nPress %s to jump", "legacy.menu.how_to_play.basics_message_1": "\n\nPush %s forward twice in rapid succession to sprint. while you hold %s forward,\nyou will continue to sprint until you run out of sprint time or have less than §f\uD83C\uDF56 \uD83C\uDF56 \uD83C\uDF56§r.\n\nHold %s to mine and chop using your hand or whatever you are holding. you may need to craft a tool to mine some blocks.\n\nIf you are holding an item in your hand, use %s to use that item or press %s to drop it.", "legacy.menu.how_to_play.hud": "HUD", - "legacy.menu.how_to_play.hud_message": "§2HOW TO PLAY: HUD§r\n\nThe HUD shows information about your status; your health, your remaining oxygen, your hunger level, and your armor (if you are wearing any).\n\nIf you lose some health but have 9 or more \uD83C\uDF56, your health will automatically replenish. Eating food will replenish your \uD83C\uDF56.\nThe Experience Bar is also shown here. The number shows your current Experience Level, and the bar indicates how many Experience Orbs are required to increase your Experience Level.\nExperience Orbs are gained by collecting Experience Orbs. You can get Experience orbs by:", + "legacy.menu.how_to_play.hud_message": "§2HOW TO PLAY : HUD§r\n\nThe HUD shows information about your status; your health, your remaining oxygen, your hunger level, and your armor (if you are wearing any).\n\nIf you lose some health but have 9 or more \uD83C\uDF56, your health will automatically replenish. Eating food will replenish your \uD83C\uDF56.\nThe Experience Bar is also shown here. The number shows your current Experience Level, and the bar indicates how many Experience Orbs are required to increase your Experience Level.\nExperience Orbs are gained by collecting Experience Orbs. You can get Experience orbs by:", "legacy.menu.how_to_play.hud_message_1": "\n- Killing Mobs\n- Mining certain block types\n- Breeding animals\n- Fishing\n- Smelting ore in a furnace\n\nThe hotbar shows the items that are available to use. Use %s and %s to change the item in your hand.\nSome items can be placed in your offhand slot for quick use; Maps will allow you to look at them while using something else, and Arrows in offhand slot will be used first.", - "legacy.menu.how_to_play.inventory_message": "§2HOW TO PLAY: INVENTORY§r\n\nPress %s to view your inventory.\n\nThis screen shows the items that are available for use in your hand, and all of other items that you are carrying. Your armor is also shown here.\n\nUse %s to move the pointer.\n\nUse %s to pick up the item that is under the pointer. If there is more than one item here this will pick them all up, or you can use %s to pick up just half of them.", + "legacy.menu.how_to_play.inventory_message": "§2HOW TO PLAY : INVENTORY§r\n\nPress %s to view your inventory.\n\nThis screen shows the items that are available for use in your hand, and all of other items that you are carrying. Your armor is also shown here.\n\nUse %s to move the pointer.\n\nUse %s to pick up the item that is under the pointer. If there is more than one item here this will pick them all up, or you can use %s to pick up just half of them.", "legacy.menu.how_to_play.inventory_message_1": "\n\nYou can place items down again by using %s. With multiple items on the pointer, use %s to place them all or %s to place just one.\n\nIf the item you are pointing at is armor, you can quick move it to the correct armor slot by pressing %s.\n\nIt is possible to change the color of Leather Armor by dyeing it. You can do this in the inventory menu by picking up the dye you want to use then pressing %s while the pointer is over the piece of armor you want to dye.", "legacy.menu.import_save": "Import Save", "legacy.menu.import_save_message": "Are you sure you would like to import \"%s\" save file(s)? May contain unsafe third-party content.", @@ -1370,7 +1371,7 @@ "legacy.menu.play_game": "Play Game", "legacy.menu.play_tutorial": "Play Tutorial", "legacy.menu.players_invite": "Players/Invite", - "legacy.menu.remove_album": "Remove Assort", + "legacy.menu.remove_album": "Remove Album", "legacy.menu.rename_save": "Rename Save", "legacy.menu.rename_save_message": "Enter the new name for your world", "legacy.menu.rename_save_title": "Rename Your World", @@ -1485,6 +1486,7 @@ "legacy.options.legacyPistons": "Legacy Pistons", "legacy.options.legacySmithingScreen": "Legacy Smithing Screen", "legacy.options.legacySwordBlocking": "Legacy Sword Blocking", + "legacy.options.legacyTitleScreen": "Legacy Title Screen", "legacy.options.legacyWitches": "Legacy Witches", "legacy.options.linearCameraMovement": "Linear Camera Movement", "legacy.options.lockControlTypeChange": "Lock Control Type Change", diff --git a/src/main/resources/assets/legacy/lang/pt_br.json b/src/main/resources/assets/legacy/lang/pt_br.json index 8e690e5b..49c230bf 100644 --- a/src/main/resources/assets/legacy/lang/pt_br.json +++ b/src/main/resources/assets/legacy/lang/pt_br.json @@ -1029,6 +1029,7 @@ "legacy.key.flyRight": "Voar para a direita", "legacy.key.flyUp": "Voar para cima", "legacy.key.host_options": "Opções de Host", + "legacy.key.legacy4JSettings": "Configurações do Legacy4J", "legacy.key.toggleCursor": "Alternar Cursor", "legacy.loadingTip.C418": "Música por C418!", "legacy.loadingTip.animalDespawn": "Se um animal não consegue mover 20 blocos em qualquer direção, ele não vai desaparecer.", @@ -1106,7 +1107,7 @@ "legacy.menu.add_album": "Adicionar Álbum", "legacy.menu.add_server": "Adicionar Servidor", "legacy.menu.advancements.toast": "Segure %s para ver", - "legacy.menu.album_name": "Digite o nome para seu álbum", + "legacy.menu.album_info": "Digite as informações do seu álbum", "legacy.menu.album_options": "Opções de Álbum", "legacy.menu.album_options_message": "O que deseja fazer com este álbum?", "legacy.menu.albums.resource": "Álbum de Recursos", @@ -1338,7 +1339,8 @@ "legacy.options.legacyClassicMerchantScreen": "Tela de Vendedor Legacy", "legacy.options.legacyClassicStonecutterScreen": "Tela de Cortador de Pedras Clássica Legacy", "legacy.options.legacyCombat": "Combate Legacy", - "legacy.options.legacyCrafterScreen": "Tela de Bancada Automático Legacy", + "legacy.options.legacyCrafterScreen": "Tela de Bancada Automática Legacy", + "legacy.options.legacyCreateWorldScreen": "Tela de Criação de Mundo Legacy", "legacy.options.legacyCreativeBlockPlacing": "Colocação de Blocos do Criativo Legacy", "legacy.options.legacyDrownedAnimation": "Animação do Afogado Legacy", "legacy.options.legacyEnchantmentScreen": "Tela de Encantamentos Legacy", @@ -1352,6 +1354,7 @@ "legacy.options.legacyOverstackedItems": "Items Sobrecarregados Legacy", "legacy.options.legacySmithingScreen": "Tela de Bancada de Ferraria Legacy", "legacy.options.legacySwordBlocking": "Bloqueio de Espada Legacy", + "legacy.options.legacyTitleScreen": "Tela de Título Legacy", "legacy.options.legacyWitches": "Bruxas Legacy", "legacy.options.linearCameraMovement": "Movimento de Câmera Linear", "legacy.options.lockControlTypeChange": "Bloquear Mudança de Tipo de Controle", diff --git a/src/main/resources/assets/legacy/lang/pt_pt.json b/src/main/resources/assets/legacy/lang/pt_pt.json index 28e8d01a..c03e9aa8 100644 --- a/src/main/resources/assets/legacy/lang/pt_pt.json +++ b/src/main/resources/assets/legacy/lang/pt_pt.json @@ -1026,6 +1026,7 @@ "legacy.key.flyRight": "Voar para a direita", "legacy.key.flyUp": "Voar para cima", "legacy.key.host_options": "Opções de Host", + "legacy.key.legacy4JSettings": "Configurações do Legacy4J", "legacy.key.toggleCursor": "Alternar Cursor", "legacy.loadingTip.C418": "Música por C418!", "legacy.loadingTip.animalDespawn": "Se um animal não consegue mover 20 blocos em qualquer direção, ele não vai desaparecer.", @@ -1103,7 +1104,7 @@ "legacy.menu.add_album": "Adicionar Álbum", "legacy.menu.add_server": "Adicionar Servidor", "legacy.menu.advancements.toast": "Mantém pressionado %s para veres", - "legacy.menu.album_name": "Digite o nome para seu álbum", + "legacy.menu.album_info": "Digite as informações do seu álbum", "legacy.menu.album_options": "Opções de Álbum", "legacy.menu.album_options_message": "O que deseja fazer com este álbum?", "legacy.menu.albums.resource": "Álbum de Recursos", @@ -1335,7 +1336,8 @@ "legacy.options.legacyClassicMerchantScreen": "Tela de Vendedor Legacy", "legacy.options.legacyClassicStonecutterScreen": "Tela de Cortador de Pedras Clássica Legacy", "legacy.options.legacyCombat": "Combate Legacy", - "legacy.options.legacyCrafterScreen": "Tela de Bancada Automático Legacy", + "legacy.options.legacyCrafterScreen": "Tela de Bancada Automática Legacy", + "legacy.options.legacyCreateWorldScreen": "Tela de Criação de Mundo Legacy", "legacy.options.legacyCreativeBlockPlacing": "Colocação de Blocos do Criativo Legacy", "legacy.options.legacyDrownedAnimation": "Animação do Afogado Legacy", "legacy.options.legacyEnchantmentScreen": "Tela de Encantamentos Legacy", @@ -1349,6 +1351,7 @@ "legacy.options.legacyOverstackedItems": "Items Sobrecarregados Legacy", "legacy.options.legacySmithingScreen": "Tela de Bancada de Ferraria Legacy", "legacy.options.legacySwordBlocking": "Bloqueio de Espada Legacy", + "legacy.options.legacyTitleScreen": "Tela de Título Legacy", "legacy.options.legacyWitches": "Bruxas Legacy", "legacy.options.linearCameraMovement": "Movimento de Câmera Linear", "legacy.options.lockControlTypeChange": "Bloquear Mudança de Tipo de Controle", diff --git a/src/main/resources/assets/legacy/textures/entity/projectiles/firework.png b/src/main/resources/assets/legacy/textures/entity/projectiles/firework.png index e0f40aaf7df50a31984e5616f9838ccbd8117294..7dd1edab93917b9b9f43795191e9b68e04dc57b5 100644 GIT binary patch delta 268 zcmZ3@GKXn`WIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hEfKP~P zi?#Is+gAUNT3xzyX`hD1moHytdTYM^pS@Z}Cf86LsOnMm@>M{JyCldj_&*#lc=^so(%8~)1G zKACzqQ7|u{#95rhZ^9h!k3psVA-`{WPmoAC=J||w;;~tko;hN|t32LbUBRfgx}Wp& z$^|?3mwe=S^MT>JZA$z9gLimteo8#Vt!`k^cu=0{0Beb*>eN4qzR!WqVeoYIV|7{Q Hl+XkKlJjp| delta 541 zcmV+&0^d&8Gi-<0047(dh`GQ0rE*iK~z}7?bJU{Q*ji=@$dQFUwdmQr9z<) zVn~bwCOVKH`U0HLNl6Tb$@k&QaUn(%|Hg&r;9^Kvj7qFcG=OP~rM;AU+xw@-fl1d( z!g8POOy_f+;fPniPvNA4h9!>N+q7Dj@m_vFe(X}adx!GMO@F#uTl{*q$zK0}z44I( zD2S@^_~SllVv|adoc>n&LyU7Q%q(d5?iB#D8yf(8ez=YS*0#U$xEfxCwy$7haC&B;|XGYh&>zzxOpM(I^?WijHGWsfs;y2 zs`VZ9igQ9RguH{~64b<~Dk4LSjWAA(NQ4k0qMX70(`Ry?F`RQUKnBPF86X2>fDDiU fGC&46cNV~3g*()e$@@-&00000NkvXXu0mjfoLB}j diff --git a/src/main/resources/legacy.mixins.json5 b/src/main/resources/legacy.mixins.json5 index 3ce2d001..48f72467 100644 --- a/src/main/resources/legacy.mixins.json5 +++ b/src/main/resources/legacy.mixins.json5 @@ -120,10 +120,10 @@ "SlotMixin", "client.smithing.SmithingScreenMixin", "client.gui.SpectatorGuiMixin", - "SplashRendererMixin", + "client.title.SplashRendererMixin", "client.stonecutter.StonecutterScreenMixin", "ThrownTridentRendererMixin", - "TitleScreenMixin", + "client.title.TitleScreenMixin", "ToastComponentMixin", "TutorialToastMixin", "client.witch.WitchModelMixin", @@ -133,7 +133,9 @@ "PaintingRendererMixin", "piston.PistonHeadRendererMixin", "WinScreenMixin", - "PlayerTabOverlayMixin" + "PlayerTabOverlayMixin", + "AbstractScrollWidgetMixin", + "MultilineEditBoxMixin" ], "mixins": [ //? if <1.20.5 {