From 1ae5c547a1cfe0417c6fd8af1dbc2aefb8e81c9d Mon Sep 17 00:00:00 2001 From: Matthias Wijnsma Date: Sat, 3 Jun 2023 15:00:21 +0200 Subject: [PATCH 1/4] Rename and move mixins --- .../features/commands/CopyStateFeature.java | 2 +- .../MinecraftClientAccessor.java | 2 +- .../AirplaceMixin.java} | 18 +++-------- .../AutoDustMixin.java} | 4 +-- .../CopyStateMixin.java} | 4 +-- .../DoContainerDropsMixin.java} | 4 +-- .../AddMacroButtonMixin.java} | 12 +++---- .../macros/InitializeMacroManagerMixin.java | 18 +++++++++++ .../{ => macros}/KeyBindingMixinImpl.java | 2 +- .../ClientPlayerEntityMixinImpl.java | 2 +- .../autocomplete}/CommandDispatcherMixin.java | 2 +- .../autocomplete}/CommandSuggestorMixin.java | 2 +- .../InitializeTelemetryClientMixin.java} | 4 +-- .../SendCommandMixin.java} | 4 +-- .../SendCrashReportMixin.java} | 4 +-- .../ShowTelemetryPopupMixin.java} | 6 ++-- .../CheckUpdateMixin.java} | 6 ++-- src/main/resources/redstonetools.mixins.json | 31 ++++++++++--------- 18 files changed, 68 insertions(+), 59 deletions(-) rename src/main/java/tools/redstone/redstonetools/mixin/{ => accessors}/MinecraftClientAccessor.java (88%) rename src/main/java/tools/redstone/redstonetools/mixin/{MinecraftClientMixin.java => features/AirplaceMixin.java} (81%) rename src/main/java/tools/redstone/redstonetools/mixin/{BlockMixin.java => features/AutoDustMixin.java} (95%) rename src/main/java/tools/redstone/redstonetools/mixin/{BlockItemMixin.java => features/CopyStateMixin.java} (91%) rename src/main/java/tools/redstone/redstonetools/mixin/{ItemScattererMixin.java => gamerules/DoContainerDropsMixin.java} (89%) rename src/main/java/tools/redstone/redstonetools/mixin/{OptionsScreenMixin.java => macros/AddMacroButtonMixin.java} (80%) create mode 100644 src/main/java/tools/redstone/redstonetools/mixin/macros/InitializeMacroManagerMixin.java rename src/main/java/tools/redstone/redstonetools/mixin/{ => macros}/KeyBindingMixinImpl.java (93%) rename src/main/java/tools/redstone/redstonetools/mixin/{ => macros/autocomplete}/ClientPlayerEntityMixinImpl.java (91%) rename src/main/java/tools/redstone/redstonetools/mixin/{ => macros/autocomplete}/CommandDispatcherMixin.java (96%) rename src/main/java/tools/redstone/redstonetools/mixin/{ => macros/autocomplete}/CommandSuggestorMixin.java (98%) rename src/main/java/tools/redstone/redstonetools/mixin/{TelemetryInitializeMixin.java => telemetry/InitializeTelemetryClientMixin.java} (85%) rename src/main/java/tools/redstone/redstonetools/mixin/{CommandTelemetryMixin.java => telemetry/SendCommandMixin.java} (92%) rename src/main/java/tools/redstone/redstonetools/mixin/{CrashTelemetryMixin.java => telemetry/SendCrashReportMixin.java} (86%) rename src/main/java/tools/redstone/redstonetools/mixin/{TelemetryPromptPopupMixin.java => telemetry/ShowTelemetryPopupMixin.java} (86%) rename src/main/java/tools/redstone/redstonetools/mixin/{UpdatePopupMixin.java => update/CheckUpdateMixin.java} (95%) diff --git a/src/main/java/tools/redstone/redstonetools/features/commands/CopyStateFeature.java b/src/main/java/tools/redstone/redstonetools/features/commands/CopyStateFeature.java index 7d84862b..3890b414 100644 --- a/src/main/java/tools/redstone/redstonetools/features/commands/CopyStateFeature.java +++ b/src/main/java/tools/redstone/redstonetools/features/commands/CopyStateFeature.java @@ -10,7 +10,7 @@ import net.minecraft.server.command.ServerCommandSource; import tools.redstone.redstonetools.features.Feature; import tools.redstone.redstonetools.features.feedback.Feedback; -import tools.redstone.redstonetools.mixin.MinecraftClientAccessor; +import tools.redstone.redstonetools.mixin.accessors.MinecraftClientAccessor; import tools.redstone.redstonetools.utils.BlockInfo; import tools.redstone.redstonetools.utils.BlockStateNbtUtil; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientAccessor.java b/src/main/java/tools/redstone/redstonetools/mixin/accessors/MinecraftClientAccessor.java similarity index 88% rename from src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientAccessor.java rename to src/main/java/tools/redstone/redstonetools/mixin/accessors/MinecraftClientAccessor.java index e88e13c4..da7abedb 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientAccessor.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/accessors/MinecraftClientAccessor.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.accessors; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/features/AirplaceMixin.java similarity index 81% rename from src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/features/AirplaceMixin.java index 1fbb2bc3..3e8aa07e 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/MinecraftClientMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/features/AirplaceMixin.java @@ -1,8 +1,5 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.features; -import net.minecraft.client.RunArgs; -import tools.redstone.redstonetools.RedstoneToolsClient; -import tools.redstone.redstonetools.features.toggleable.AirPlaceFeature; import net.minecraft.client.MinecraftClient; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; @@ -14,10 +11,11 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import tools.redstone.redstonetools.macros.MacroManager; +import tools.redstone.redstonetools.RedstoneToolsClient; +import tools.redstone.redstonetools.features.toggleable.AirPlaceFeature; @Mixin(MinecraftClient.class) -public abstract class MinecraftClientMixin { +public class AirplaceMixin { private final AirPlaceFeature airPlaceFeature = RedstoneToolsClient.INJECTOR.getInstance(AirPlaceFeature.class); @Shadow @@ -46,10 +44,4 @@ public void doItemUse(CallbackInfo callbackInfo) { crosshairTarget = new BlockHitResult(hitResult.getPos(), Direction.UP, new BlockPos(hitResult.getPos()), false); } - - @Inject(method = "", at = @At("TAIL")) - public void registerMacros(RunArgs args, CallbackInfo ci){ - RedstoneToolsClient.INJECTOR.getInstance(MacroManager.class);// should register macro keybinds - } - -} \ No newline at end of file +} diff --git a/src/main/java/tools/redstone/redstonetools/mixin/BlockMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java similarity index 95% rename from src/main/java/tools/redstone/redstonetools/mixin/BlockMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java index 7a0f2516..f1131970 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/BlockMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/features/AutoDustMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.features; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -23,7 +23,7 @@ import tools.redstone.redstonetools.utils.ColoredBlock; @Mixin(Block.class) -public abstract class BlockMixin { +public abstract class AutoDustMixin { private AutoDustFeature autoDustFeature; private AutoDustFeature getAutoDustFeature() { diff --git a/src/main/java/tools/redstone/redstonetools/mixin/BlockItemMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/features/CopyStateMixin.java similarity index 91% rename from src/main/java/tools/redstone/redstonetools/mixin/BlockItemMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/features/CopyStateMixin.java index 95a6c4e5..1478b497 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/BlockItemMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/features/CopyStateMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.features; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -13,7 +13,7 @@ @Mixin(BlockItem.class) -public abstract class BlockItemMixin { +public abstract class CopyStateMixin { @Shadow protected abstract boolean canPlace(ItemPlacementContext context, BlockState state); @Shadow public abstract Block getBlock(); diff --git a/src/main/java/tools/redstone/redstonetools/mixin/ItemScattererMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/gamerules/DoContainerDropsMixin.java similarity index 89% rename from src/main/java/tools/redstone/redstonetools/mixin/ItemScattererMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/gamerules/DoContainerDropsMixin.java index 2e2f252a..007e49d2 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/ItemScattererMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/gamerules/DoContainerDropsMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.gamerules; import net.minecraft.item.ItemStack; import net.minecraft.util.ItemScatterer; @@ -11,7 +11,7 @@ import static tools.redstone.redstonetools.RedstoneToolsGameRules.DO_CONTAINER_DROPS; @Mixin(ItemScatterer.class) -public class ItemScattererMixin { +public class DoContainerDropsMixin { @Inject(method = "spawn(Lnet/minecraft/world/World;DDDLnet/minecraft/item/ItemStack;)V", at = @At("HEAD"), cancellable = true) private static void spawn(World world, double x, double y, double z, ItemStack stack, CallbackInfo ci) { if (!world.getGameRules().getBoolean(DO_CONTAINER_DROPS)) ci.cancel(); diff --git a/src/main/java/tools/redstone/redstonetools/mixin/OptionsScreenMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/AddMacroButtonMixin.java similarity index 80% rename from src/main/java/tools/redstone/redstonetools/mixin/OptionsScreenMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/macros/AddMacroButtonMixin.java index 835108fd..df394185 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/OptionsScreenMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/AddMacroButtonMixin.java @@ -1,6 +1,5 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.macros; -import tools.redstone.redstonetools.macros.gui.screen.MacroSelectScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.ControlsOptionsScreen; import net.minecraft.client.gui.screen.option.GameOptionsScreen; @@ -11,19 +10,18 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import tools.redstone.redstonetools.macros.gui.screen.MacroSelectScreen; @Mixin(ControlsOptionsScreen.class) -public class OptionsScreenMixin extends GameOptionsScreen { - public OptionsScreenMixin(Screen parent, GameOptions gameOptions, Text title) { +public class AddMacroButtonMixin extends GameOptionsScreen { + public AddMacroButtonMixin(Screen parent, GameOptions gameOptions, Text title) { super(parent, gameOptions, title); } - @Inject(method = "init", at = @At("TAIL")) - public void addMacroButton(CallbackInfo ci) { + public void init(CallbackInfo ci) { this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, this.height / 6 + 36, 150, 20, Text.of("Macros..."), (button) -> { this.client.setScreen(new MacroSelectScreen(this,super.gameOptions,Text.of("Macros"))); })); } - } diff --git a/src/main/java/tools/redstone/redstonetools/mixin/macros/InitializeMacroManagerMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/InitializeMacroManagerMixin.java new file mode 100644 index 00000000..ea9ae3ab --- /dev/null +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/InitializeMacroManagerMixin.java @@ -0,0 +1,18 @@ +package tools.redstone.redstonetools.mixin.macros; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.RunArgs; +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 tools.redstone.redstonetools.RedstoneToolsClient; +import tools.redstone.redstonetools.macros.MacroManager; + +@Mixin(MinecraftClient.class) +public class InitializeMacroManagerMixin { + @Inject(method = "", at = @At("TAIL")) + public void registerMacros(RunArgs args, CallbackInfo ci){ + RedstoneToolsClient.INJECTOR.getInstance(MacroManager.class);// should register macro keybinds + } +} diff --git a/src/main/java/tools/redstone/redstonetools/mixin/KeyBindingMixinImpl.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/KeyBindingMixinImpl.java similarity index 93% rename from src/main/java/tools/redstone/redstonetools/mixin/KeyBindingMixinImpl.java rename to src/main/java/tools/redstone/redstonetools/mixin/macros/KeyBindingMixinImpl.java index 4b7b9eda..677cc486 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/KeyBindingMixinImpl.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/KeyBindingMixinImpl.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.macros; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/ClientPlayerEntityMixinImpl.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/ClientPlayerEntityMixinImpl.java similarity index 91% rename from src/main/java/tools/redstone/redstonetools/mixin/ClientPlayerEntityMixinImpl.java rename to src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/ClientPlayerEntityMixinImpl.java index 25f096f7..bab50f77 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/ClientPlayerEntityMixinImpl.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/ClientPlayerEntityMixinImpl.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.macros.autocomplete; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/CommandDispatcherMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandDispatcherMixin.java similarity index 96% rename from src/main/java/tools/redstone/redstonetools/mixin/CommandDispatcherMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandDispatcherMixin.java index a3f08697..862d666f 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/CommandDispatcherMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandDispatcherMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.macros.autocomplete; import tools.redstone.redstonetools.macros.WorldlessCommandHelper; import com.mojang.brigadier.CommandDispatcher; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/CommandSuggestorMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandSuggestorMixin.java similarity index 98% rename from src/main/java/tools/redstone/redstonetools/mixin/CommandSuggestorMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandSuggestorMixin.java index fcefa0b2..0efcdd54 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/CommandSuggestorMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/macros/autocomplete/CommandSuggestorMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.macros.autocomplete; import com.mojang.brigadier.suggestion.Suggestions; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/TelemetryInitializeMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/InitializeTelemetryClientMixin.java similarity index 85% rename from src/main/java/tools/redstone/redstonetools/mixin/TelemetryInitializeMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/telemetry/InitializeTelemetryClientMixin.java index 590a0104..5c924b8d 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/TelemetryInitializeMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/InitializeTelemetryClientMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.telemetry; import tools.redstone.redstonetools.telemetry.TelemetryClient; import net.minecraft.client.MinecraftClient; @@ -10,7 +10,7 @@ import static tools.redstone.redstonetools.RedstoneToolsClient.INJECTOR; @Mixin(MinecraftClient.class) -public class TelemetryInitializeMixin { +public class InitializeTelemetryClientMixin { @Inject(method = "", at = @At("TAIL")) public void init(CallbackInfo ci) { INJECTOR.getInstance(TelemetryClient.class); diff --git a/src/main/java/tools/redstone/redstonetools/mixin/CommandTelemetryMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCommandMixin.java similarity index 92% rename from src/main/java/tools/redstone/redstonetools/mixin/CommandTelemetryMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCommandMixin.java index fd03dbe9..78316884 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/CommandTelemetryMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCommandMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.telemetry; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.client.MinecraftClient; @@ -12,7 +12,7 @@ import java.util.Objects; @Mixin(net.minecraft.server.command.CommandManager.class) -public class CommandTelemetryMixin { +public class SendCommandMixin { @Inject(method = "execute", at = @At("HEAD")) private void execute(net.minecraft.server.command.ServerCommandSource source, String command, CallbackInfoReturnable cir) { ServerPlayerEntity player; diff --git a/src/main/java/tools/redstone/redstonetools/mixin/CrashTelemetryMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCrashReportMixin.java similarity index 86% rename from src/main/java/tools/redstone/redstonetools/mixin/CrashTelemetryMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCrashReportMixin.java index e7f01238..3878d572 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/CrashTelemetryMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/SendCrashReportMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.telemetry; import tools.redstone.redstonetools.utils.TelemetryUtils; import net.minecraft.client.MinecraftClient; @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MinecraftClient.class) -public class CrashTelemetryMixin { +public class SendCrashReportMixin { @Inject(method = "printCrashReport", at = @At("TAIL")) private static void printCrashReport(CrashReport report, CallbackInfo ci) { TelemetryUtils.sendCrash(report); diff --git a/src/main/java/tools/redstone/redstonetools/mixin/TelemetryPromptPopupMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java similarity index 86% rename from src/main/java/tools/redstone/redstonetools/mixin/TelemetryPromptPopupMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java index a22eda82..3d2168aa 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/TelemetryPromptPopupMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.telemetry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; @@ -14,8 +14,8 @@ import static tools.redstone.redstonetools.RedstoneToolsClient.INJECTOR; @Mixin(TitleScreen.class) -public class TelemetryPromptPopupMixin extends Screen { - public TelemetryPromptPopupMixin(Text title) { +public class ShowTelemetryPopupMixin extends Screen { + public ShowTelemetryPopupMixin(Text title) { super(title); } diff --git a/src/main/java/tools/redstone/redstonetools/mixin/UpdatePopupMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java similarity index 95% rename from src/main/java/tools/redstone/redstonetools/mixin/UpdatePopupMixin.java rename to src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java index 10228ad0..1b87ef6c 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/UpdatePopupMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java @@ -1,4 +1,4 @@ -package tools.redstone.redstonetools.mixin; +package tools.redstone.redstonetools.mixin.update; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -24,10 +24,10 @@ @Mixin(TitleScreen.class) -public class UpdatePopupMixin extends Screen { +public class CheckUpdateMixin extends Screen { public boolean updateChecked = false; - public UpdatePopupMixin(Text title) { + public CheckUpdateMixin(Text title) { super(title); } diff --git a/src/main/resources/redstonetools.mixins.json b/src/main/resources/redstonetools.mixins.json index dbee0c57..a9409a5e 100644 --- a/src/main/resources/redstonetools.mixins.json +++ b/src/main/resources/redstonetools.mixins.json @@ -7,22 +7,23 @@ "defaultRequire": 1 }, "mixins": [ - "BlockItemMixin", - "BlockMixin", - "CommandTelemetryMixin", - "ItemScattererMixin", - "MinecraftClientMixin", - "OptionsScreenMixin", - "TelemetryPromptPopupMixin", - "UpdatePopupMixin" + "features.CopyStateMixin", + "features.AutoDustMixin", + "telemetry.SendCommandMixin", + "update.CheckUpdateMixin", + "gamerules.DoContainerDropsMixin", + "telemetry.ShowTelemetryPopupMixin" ], "client": [ - "ClientPlayerEntityMixinImpl", - "CommandDispatcherMixin", - "CommandSuggestorMixin", - "CrashTelemetryMixin", - "KeyBindingMixinImpl", - "MinecraftClientAccessor", - "TelemetryInitializeMixin" + "macros.autocomplete.ClientPlayerEntityMixinImpl", + "macros.autocomplete.CommandDispatcherMixin", + "macros.autocomplete.CommandSuggestorMixin", + "telemetry.SendCrashReportMixin", + "macros.KeyBindingMixinImpl", + "accessors.MinecraftClientAccessor", + "features.AirplaceMixin", + "macros.AddMacroButtonMixin", + "macros.InitializeMacroManagerMixin", + "telemetry.InitializeTelemetryClientMixin" ] } From 64b7fc3c9632f8d9c3a7775d1afc5cadc5e14db2 Mon Sep 17 00:00:00 2001 From: Matthias Wijnsma Date: Sat, 3 Jun 2023 15:36:28 +0200 Subject: [PATCH 2/4] Use confirmscreen and fix url --- .../mixin/update/CheckUpdateMixin.java | 42 ++++++++++++------- src/main/resources/redstonetools.mixins.json | 18 ++++---- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java index 1b87ef6c..72eba267 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/update/CheckUpdateMixin.java @@ -3,27 +3,26 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ConfirmScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.text.Text; +import net.minecraft.util.Util; 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 tools.redstone.redstonetools.RedstoneToolsClient; -import tools.redstone.redstonetools.gui.UpdatePopupScreen; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; -import java.time.Duration; -import java.time.temporal.ChronoUnit; import static tools.redstone.redstonetools.RedstoneToolsClient.LOGGER; +import static tools.redstone.redstonetools.RedstoneToolsClient.MOD_VERSION; @Mixin(TitleScreen.class) - public class CheckUpdateMixin extends Screen { public boolean updateChecked = false; @@ -39,22 +38,20 @@ public void init(CallbackInfo ci) { try { LOGGER.info("Checking for updates..."); - // timeout before aborting connection - // gh took quite long to respond on some machines - // so i think the timeout should be 1s - final long timeout = 1000; - HttpClient client = HttpClient.newBuilder() - .connectTimeout(Duration.of(timeout, ChronoUnit.MILLIS)) .build(); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("https://api.github.com/repos/RedstoneTools/redstonetools/releases/latest")) + .uri(URI.create("https://api.github.com/repositories/597142955/releases/latest")) .GET() .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); String responseBody = response.body(); - if (response.statusCode() != 200) + + if (response.statusCode() < 200 || 299 < response.statusCode()) { + LOGGER.error("Got status code " + response.statusCode() + " while trying to check for updates"); return; + } Gson gson = new Gson(); JsonObject release = gson.fromJson(responseBody, JsonObject.class); @@ -62,13 +59,28 @@ public void init(CallbackInfo ci) { String newVersion = release.get("tag_name").getAsString(); LOGGER.info("Found latest version: " + newVersion); - if (RedstoneToolsClient.MOD_VERSION.equals(newVersion) || newVersion.contains("alpha") || newVersion.contains("beta")) { - LOGGER.info("Already up to date, current version: " + RedstoneToolsClient.MOD_VERSION + ", new version: " + newVersion); + if (newVersion.contains("alpha") || newVersion.contains("beta")) { + LOGGER.info("Not showing an update popup for alpha or beta release, current version: " + MOD_VERSION + ", new version: " + newVersion); + return; + } + + if (RedstoneToolsClient.MOD_VERSION.equals(newVersion)) { + LOGGER.info("Already up to date, current version: " + MOD_VERSION); return; } LOGGER.info("Found newer version, current version: " + RedstoneToolsClient.MOD_VERSION + ", new version: " + newVersion); - MinecraftClient.getInstance().setScreen(new UpdatePopupScreen(this, uri, newVersion)); + + var parentScreen = MinecraftClient.getInstance().currentScreen; + var popup = new ConfirmScreen(confirmed -> { + MinecraftClient.getInstance().setScreen(parentScreen); + + if (confirmed) { + Util.getOperatingSystem().open(uri); + } + }, Text.of("Update Available"), Text.of("An update is available for redstone tools! You are on version " + MOD_VERSION + " but version " + newVersion + " is available."), Text.of("Go to release"), Text.of("Ignore")); + + MinecraftClient.getInstance().setScreen(popup); } catch (Exception e) { LOGGER.warn("Failed to check for RedstoneTools updates"); e.printStackTrace(); diff --git a/src/main/resources/redstonetools.mixins.json b/src/main/resources/redstonetools.mixins.json index a9409a5e..5aaa9e1e 100644 --- a/src/main/resources/redstonetools.mixins.json +++ b/src/main/resources/redstonetools.mixins.json @@ -7,23 +7,23 @@ "defaultRequire": 1 }, "mixins": [ - "features.CopyStateMixin", "features.AutoDustMixin", - "telemetry.SendCommandMixin", - "update.CheckUpdateMixin", + "features.CopyStateMixin", "gamerules.DoContainerDropsMixin", + "telemetry.SendCommandMixin", "telemetry.ShowTelemetryPopupMixin" ], "client": [ - "macros.autocomplete.ClientPlayerEntityMixinImpl", - "macros.autocomplete.CommandDispatcherMixin", - "macros.autocomplete.CommandSuggestorMixin", - "telemetry.SendCrashReportMixin", - "macros.KeyBindingMixinImpl", "accessors.MinecraftClientAccessor", "features.AirplaceMixin", "macros.AddMacroButtonMixin", "macros.InitializeMacroManagerMixin", - "telemetry.InitializeTelemetryClientMixin" + "macros.KeyBindingMixinImpl", + "macros.autocomplete.ClientPlayerEntityMixinImpl", + "macros.autocomplete.CommandDispatcherMixin", + "macros.autocomplete.CommandSuggestorMixin", + "telemetry.InitializeTelemetryClientMixin", + "telemetry.SendCrashReportMixin", + "update.CheckUpdateMixin" ] } From 945c9a289715d7c99a76423ca02d15634e9cd8d4 Mon Sep 17 00:00:00 2001 From: Matthias Wijnsma Date: Sat, 3 Jun 2023 15:41:33 +0200 Subject: [PATCH 3/4] Remove popup screen and implementations and use confirmscreen instead of telemetry popup --- .../redstonetools/gui/PopupScreen.java | 55 ------------------- .../redstonetools/gui/UpdatePopupScreen.java | 33 ----------- .../telemetry/ShowTelemetryPopupMixin.java | 16 +++++- .../telemetry/gui/TelemetryPromptScreen.java | 42 -------------- 4 files changed, 14 insertions(+), 132 deletions(-) delete mode 100644 src/main/java/tools/redstone/redstonetools/gui/PopupScreen.java delete mode 100644 src/main/java/tools/redstone/redstonetools/gui/UpdatePopupScreen.java delete mode 100644 src/main/java/tools/redstone/redstonetools/telemetry/gui/TelemetryPromptScreen.java diff --git a/src/main/java/tools/redstone/redstonetools/gui/PopupScreen.java b/src/main/java/tools/redstone/redstonetools/gui/PopupScreen.java deleted file mode 100644 index 919ac42b..00000000 --- a/src/main/java/tools/redstone/redstonetools/gui/PopupScreen.java +++ /dev/null @@ -1,55 +0,0 @@ -package tools.redstone.redstonetools.gui; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.MultilineText; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.option.GameOptionsScreen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.StringVisitable; -import net.minecraft.text.Text; - -public abstract class PopupScreen extends GameOptionsScreen { - private static final float MESSAGE_WIDTH_MULTIPLIER = 0.85f; - private static final int PADDING = 24; - private static final int TITLE_Y = PADDING; - - private final String message; - private int messageY; - private MultilineText messageText; - - public PopupScreen(Screen parent, String title, String message) { - super(parent, MinecraftClient.getInstance().options, Text.of(title)); - - this.message = message; - } - - protected abstract void addButtons(int y); - - protected int getButtonsHeight() - { - return 20; - } - - @Override - protected void init() { - super.init(); - - messageText = MultilineText.create(textRenderer, StringVisitable.plain(message), (int)(this.width * MESSAGE_WIDTH_MULTIPLIER)); - - var messageHeight = messageText.count() * 9; - messageY = this.height / 2 - messageHeight / 2; - - int buttonsY = this.height - PADDING - getButtonsHeight(); - this.addButtons(buttonsY); - } - - @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(matrices); - - drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, TITLE_Y, 0xffffff); - messageText.drawCenterWithShadow(matrices, this.width / 2, messageY); - - super.render(matrices, mouseX, mouseY, delta); - } -} diff --git a/src/main/java/tools/redstone/redstonetools/gui/UpdatePopupScreen.java b/src/main/java/tools/redstone/redstonetools/gui/UpdatePopupScreen.java deleted file mode 100644 index f0741f31..00000000 --- a/src/main/java/tools/redstone/redstonetools/gui/UpdatePopupScreen.java +++ /dev/null @@ -1,33 +0,0 @@ -package tools.redstone.redstonetools.gui; - -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Util; - -import java.net.URI; - -import static tools.redstone.redstonetools.RedstoneToolsClient.MOD_VERSION; - -public class UpdatePopupScreen extends PopupScreen { - - URI uri; - - public UpdatePopupScreen(Screen parent, URI uri, String newVersion) { - super(parent, "Update Available", - "An update is available for redstone tools! You are on version " + MOD_VERSION + " but version " + newVersion + " is available."); - this.uri = uri; - } - - @Override - protected void addButtons(int y) { - this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, y, 150, 20, Text.of("Go to release"), (button) -> { - Util.getOperatingSystem().open(uri); - - this.close(); - })); - this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, y, 150, 20, Text.of("Ignore"), (button) -> { - this.close(); - })); - } -} diff --git a/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java index 3d2168aa..2639b213 100644 --- a/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java +++ b/src/main/java/tools/redstone/redstonetools/mixin/telemetry/ShowTelemetryPopupMixin.java @@ -1,6 +1,7 @@ package tools.redstone.redstonetools.mixin.telemetry; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ConfirmScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.text.Text; @@ -9,12 +10,13 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import tools.redstone.redstonetools.telemetry.TelemetryManager; -import tools.redstone.redstonetools.telemetry.gui.TelemetryPromptScreen; import static tools.redstone.redstonetools.RedstoneToolsClient.INJECTOR; @Mixin(TitleScreen.class) public class ShowTelemetryPopupMixin extends Screen { + private static final String TELEMETRY_PROMPT = "Redstone Tools includes an optional telemetry feature that collects anonymous usage data to help us improve the mod. By enabling telemetry, you can help us better understand how the mod is being used and identify areas for improvement.\n\n\n\nWould you like to help us improve Redstone Tools by enabling anonymous usage data?"; // TODO: Add "You can turn this off at any time in the settings menu." once you can actually turn it off in the settings menu + public ShowTelemetryPopupMixin(Text title) { super(title); } @@ -27,6 +29,16 @@ public void init(CallbackInfo ci) { return; } - MinecraftClient.getInstance().setScreen(new TelemetryPromptScreen(this)); + var parentScreen = MinecraftClient.getInstance().currentScreen; + var popup = new ConfirmScreen(accepted -> { + manager.showTelemetryPrompt = false; + manager.telemetryEnabled = accepted; + + manager.saveChanges(); + + MinecraftClient.getInstance().setScreen(parentScreen); + }, Text.of("Telemetry"), Text.of(TELEMETRY_PROMPT)); + + MinecraftClient.getInstance().setScreen(popup); } } diff --git a/src/main/java/tools/redstone/redstonetools/telemetry/gui/TelemetryPromptScreen.java b/src/main/java/tools/redstone/redstonetools/telemetry/gui/TelemetryPromptScreen.java deleted file mode 100644 index 2530b636..00000000 --- a/src/main/java/tools/redstone/redstonetools/telemetry/gui/TelemetryPromptScreen.java +++ /dev/null @@ -1,42 +0,0 @@ -package tools.redstone.redstonetools.telemetry.gui; - -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import tools.redstone.redstonetools.gui.PopupScreen; -import tools.redstone.redstonetools.telemetry.TelemetryManager; - -import static tools.redstone.redstonetools.RedstoneToolsClient.INJECTOR; - -public class TelemetryPromptScreen extends PopupScreen { - private static final String TELEMETRY_PROMPT = "Redstone Tools includes an optional telemetry feature that collects anonymous usage data to help us improve the mod. By enabling telemetry, you can help us better understand how the mod is being used and identify areas for improvement.\n\n\n\nWould you like to help us improve Redstone Tools by enabling anonymous usage data?"; // TODO: Add "You can turn this off at any time in the settings menu." once you can actually turn it off in the settings menu - - public TelemetryPromptScreen(Screen parent) { - super(parent, "Telemetry", TELEMETRY_PROMPT); - } - - @Override - protected void addButtons(int y) { - this.addDrawableChild(new ButtonWidget(this.width / 2 - 155, y, 150, 20, Text.of("Yes"), (button) -> { - var manager = INJECTOR.getInstance(TelemetryManager.class); - - manager.showTelemetryPrompt = false; - manager.telemetryEnabled = true; - - manager.saveChanges(); - - this.client.setScreen(this.parent); - })); - - this.addDrawableChild(new ButtonWidget(this.width / 2 + 5, y, 150, 20, Text.of("No"), (button) -> { - var manager = INJECTOR.getInstance(TelemetryManager.class); - - manager.showTelemetryPrompt = false; - manager.telemetryEnabled = false; - - manager.saveChanges(); - - this.client.setScreen(this.parent); - })); - } -} From 7a62f6d345b53741baef98c9b0a9ba7304266954 Mon Sep 17 00:00:00 2001 From: Matthias Wijnsma Date: Sat, 3 Jun 2023 15:46:06 +0200 Subject: [PATCH 4/4] Update to 1.1.3 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ef629cd0..02ed04b1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx4G loader_version=0.14.6 # Mod Properties - mod_version = 1.18.2-1.1.2 + mod_version = 1.18.2-1.1.3 maven_group = tools.redstone archives_base_name = redstonetools