瀏覽代碼

Fix KeyCodeEntry and mouse

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel 5 年之前
父節點
當前提交
89ee96a0f8

+ 1 - 1
gradle.properties

@@ -3,6 +3,6 @@ minecraft_version=20w18a
 yarn_mappings=20w18a+build.1
 loader_version=0.8.2+build.194
 fabric_version=0.7.1+build.331-1.16
-mod_version=4.3.0-unstable
+mod_version=4.3.1-unstable
 modmenu_version=1.11.2+build.6
 nec_version=1.2.3+1.15.1

+ 0 - 1
src/main/java/me/shedaniel/clothconfig2/api/Modifier.java

@@ -140,5 +140,4 @@ public class Modifier {
     public int hashCode() {
         return Objects.hash(value);
     }
-    
 }

+ 6 - 9
src/main/java/me/shedaniel/clothconfig2/api/ModifierKeyCode.java

@@ -1,12 +1,12 @@
 package me.shedaniel.clothconfig2.api;
 
 import me.shedaniel.clothconfig2.impl.ModifierKeyCodeImpl;
-import me.shedaniel.clothconfig2.mixin.MouseHooks;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.util.InputUtil;
 import net.minecraft.text.Text;
+import org.lwjgl.glfw.GLFW;
 
 @Environment(EnvType.CLIENT)
 public interface ModifierKeyCode {
@@ -34,6 +34,10 @@ public interface ModifierKeyCode {
     
     ModifierKeyCode setModifier(Modifier modifier);
     
+    default ModifierKeyCode copy() {
+        return copyOf(this);
+    }
+    
     default boolean matchesMouse(int button) {
         return !isUnknown() && getType() == InputUtil.Type.MOUSE && getKeyCode().getKeyCode() == button && getModifier().matchesCurrent();
     }
@@ -50,14 +54,7 @@ public interface ModifierKeyCode {
     
     default boolean matchesCurrentMouse() {
         if (!isUnknown() && getType() == InputUtil.Type.MOUSE && getModifier().matchesCurrent()) {
-            switch (getKeyCode().getKeyCode()) {
-                case 0:
-                    return MinecraftClient.getInstance().mouse.wasLeftButtonClicked();
-                case 1:
-                    return MinecraftClient.getInstance().mouse.wasRightButtonClicked();
-                case 2:
-                    return ((MouseHooks) MinecraftClient.getInstance().mouse).middleButtonClicked();
-            }
+            return GLFW.glfwGetMouseButton(MinecraftClient.getInstance().getWindow().getHandle(), getKeyCode().getKeyCode()) == GLFW.GLFW_PRESS;
         }
         return false;
     }

+ 3 - 17
src/main/java/me/shedaniel/clothconfig2/gui/ClothConfigScreen.java

@@ -55,7 +55,7 @@ public abstract class ClothConfigScreen extends AbstractTabbedConfigScreen {
     private final LinkedHashMap<Text, List<AbstractConfigEntry<?>>> categorizedEntries = Maps.newLinkedHashMap();
     private final List<Pair<Text, Integer>> tabs;
     private final boolean confirmSave;
-    private AbstractButtonWidget quitButton, saveButton, applyButton, buttonLeftTab, buttonRightTab;
+    private AbstractButtonWidget quitButton, saveButton, buttonLeftTab, buttonRightTab;
     private Rectangle tabsBounds, tabsLeftBounds, tabsRightBounds;
     private double tabsMaximumScrolled = -1d;
     private final List<ClothConfigTabButton> tabButtons = Lists.newArrayList();
@@ -207,13 +207,13 @@ public abstract class ClothConfigScreen extends AbstractTabbedConfigScreen {
             listWidget.children().addAll((List) Lists.newArrayList(categorizedEntries.values()).get(selectedTabIndex));
         }
         int buttonWidths = Math.min(200, (width - 50 - 12) / 3);
-        addButton(quitButton = new ButtonWidget(width / 2 - buttonWidths / 2 - buttonWidths - 6, height - 26, buttonWidths, 20, isEdited() ? new TranslatableText("text.cloth-config.cancel_discard") : new TranslatableText("gui.cancel"), widget -> {
+        addButton(quitButton = new ButtonWidget(width / 2 - buttonWidths - 3, height - 26, buttonWidths, 20, isEdited() ? new TranslatableText("text.cloth-config.cancel_discard") : new TranslatableText("gui.cancel"), widget -> {
             if (confirmSave && isEdited())
                 client.openScreen(new ConfirmScreen(new QuitSaveConsumer(), new TranslatableText("text.cloth-config.quit_config"), new TranslatableText("text.cloth-config.quit_config_sure"), new TranslatableText("text.cloth-config.quit_discard"), new TranslatableText("gui.cancel")));
             else
                 client.openScreen(parent);
         }));
-        addButton(saveButton = new AbstractPressableButtonWidget(width / 2 + buttonWidths / 2 + 6, height - 26, buttonWidths, 20, NarratorManager.EMPTY) {
+        addButton(saveButton = new AbstractPressableButtonWidget(width / 2 + 3, height - 26, buttonWidths, 20, NarratorManager.EMPTY) {
             @Override
             public void onPress() {
                 saveAll(true);
@@ -236,20 +236,6 @@ public abstract class ClothConfigScreen extends AbstractTabbedConfigScreen {
                 super.render(matrices, mouseX, mouseY, delta);
             }
         });
-        addButton(applyButton = new AbstractPressableButtonWidget(width / 2 - buttonWidths / 2, height - 26, buttonWidths, 20, new TranslatableText("text.cloth-config.apply")) {
-            @Override
-            public void onPress() {
-                if (isRequiresRestart())
-                    ClothConfigScreen.this.client.openScreen(new ClothRequiresRestartScreen(ClothConfigScreen.this));
-                saveAll(false);
-            }
-            
-            @Override
-            public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
-                active = saveButton.active;
-                super.render(matrices, mouseX, mouseY, delta);
-            }
-        });
         saveButton.active = isEdited();
         if (isShowingTabs()) {
             tabsBounds = new Rectangle(0, 41, width, 24);

+ 12 - 7
src/main/java/me/shedaniel/clothconfig2/gui/entries/KeyCodeEntry.java

@@ -25,6 +25,7 @@ import java.util.function.Supplier;
 public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
     
     private ModifierKeyCode value;
+    private ModifierKeyCode original;
     private ButtonWidget buttonWidget, resetButton;
     private Consumer<ModifierKeyCode> saveConsumer;
     private Supplier<ModifierKeyCode> defaultValue;
@@ -36,20 +37,24 @@ public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
     public KeyCodeEntry(Text fieldName, ModifierKeyCode value, Text resetButtonKey, Supplier<ModifierKeyCode> defaultValue, Consumer<ModifierKeyCode> saveConsumer, Supplier<Optional<Text[]>> tooltipSupplier, boolean requiresRestart) {
         super(fieldName, tooltipSupplier, requiresRestart);
         this.defaultValue = defaultValue;
-        this.value = value;
+        this.value = value.copy();
+        this.original = value.copy();
         this.buttonWidget = new ButtonWidget(0, 0, 150, 20, NarratorManager.EMPTY, widget -> {
             getScreen().setFocusedBinding(this);
-            getScreen().setEdited(true, isRequiresRestart());
         });
         this.resetButton = new ButtonWidget(0, 0, MinecraftClient.getInstance().textRenderer.getWidth(resetButtonKey) + 6, 20, resetButtonKey, widget -> {
-            KeyCodeEntry.this.value = getDefaultValue().orElse(null);
+            KeyCodeEntry.this.value = getDefaultValue().orElse(null).copy();
             getScreen().setFocusedBinding(null);
-            getScreen().setEdited(true, isRequiresRestart());
         });
         this.saveConsumer = saveConsumer;
         this.widgets = Lists.newArrayList(buttonWidget, resetButton);
     }
     
+    @Override
+    public boolean isEdited() {
+        return super.isEdited() || !this.original.equals(getValue());
+    }
+    
     public boolean isAllowModifiers() {
         return allowModifiers;
     }
@@ -91,7 +96,7 @@ public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
     
     @Override
     public Optional<ModifierKeyCode> getDefaultValue() {
-        return Optional.ofNullable(defaultValue).map(Supplier::get);
+        return Optional.ofNullable(defaultValue).map(Supplier::get).map(ModifierKeyCode::copy);
     }
     
     private Text getLocalizedName() {
@@ -102,13 +107,13 @@ public class KeyCodeEntry extends TooltipListEntry<ModifierKeyCode> {
     public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean isSelected, float delta) {
         super.render(matrices, index, y, x, entryWidth, entryHeight, mouseX, mouseY, isSelected, delta);
         Window window = MinecraftClient.getInstance().getWindow();
-        this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !getDefaultValue().get().equals(value);
+        this.resetButton.active = isEditable() && getDefaultValue().isPresent() && !getDefaultValue().get().equals(getValue());
         this.resetButton.y = y;
         this.buttonWidget.active = isEditable();
         this.buttonWidget.y = y;
         this.buttonWidget.setMessage(getLocalizedName());
         if (getScreen().getFocusedBinding() == this)
-            this.buttonWidget.setMessage(new LiteralText(  "> ").formatted(Formatting.WHITE).append(this.buttonWidget.getMessage().copy().formatted(Formatting.YELLOW)).append(new LiteralText(  " <").formatted(Formatting.WHITE)));
+            this.buttonWidget.setMessage(new LiteralText("> ").formatted(Formatting.WHITE).append(this.buttonWidget.getMessage().copy().formatted(Formatting.YELLOW)).append(new LiteralText(" <").formatted(Formatting.WHITE)));
         Text displayedFieldName = getDisplayedFieldName();
         if (MinecraftClient.getInstance().textRenderer.isRightToLeft()) {
             MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayedFieldName, window.getScaledWidth() - x - MinecraftClient.getInstance().textRenderer.getWidth(displayedFieldName), y + 5, 16777215);

+ 0 - 11
src/main/java/me/shedaniel/clothconfig2/mixin/MouseHooks.java

@@ -1,11 +0,0 @@
-package me.shedaniel.clothconfig2.mixin;
-
-import net.minecraft.client.Mouse;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.gen.Accessor;
-
-@Mixin(Mouse.class)
-public interface MouseHooks {
-    @Accessor("middleButtonClicked")
-    boolean middleButtonClicked();
-}

+ 1 - 1
src/main/resources/mixin.cloth-config2.json

@@ -3,7 +3,7 @@
   "package": "me.shedaniel.clothconfig2.mixin",
   "minVersion": "0.7.11",
   "compatibilityLevel": "JAVA_8",
-  "client": ["ButtonWidgetHooks", "MixinControlsOptionsScreen", "MixinGameOptions", "MixinKeyBinding", "MouseHooks"],
+  "client": ["ButtonWidgetHooks", "MixinControlsOptionsScreen", "MixinGameOptions", "MixinKeyBinding"],
   "injectors": {
     "defaultRequire": 1
   }