Эх сурвалжийг харах

option to disable recipe book

Unknown 6 жил өмнө
parent
commit
a539128f70

+ 2 - 0
.gitignore

@@ -25,3 +25,5 @@ private.properties
 # Files from bad operating systems :^)
 Thumbs.db
 .DS_Store
+
+secret\.properties

+ 7 - 0
CHANGELOG.md

@@ -0,0 +1,7 @@
+# v2.4.0
+- Config with comments
+- Fix creative even more
+- No longer uses Fabric internals
+- Config to disable Recipe Book
+# v2.3.2.56
+- Removed Plugin Update Checker

+ 31 - 0
build.gradle

@@ -3,6 +3,7 @@ import net.fabricmc.loom.task.RemapJar
 plugins {
     id 'fabric-loom' version '0.2.0-SNAPSHOT'
     id "com.github.johnrengelman.shadow" version "4.0.3"
+    id "com.matthewprenger.cursegradle" version "1.1.2"
 }
 
 sourceCompatibility = 1.8
@@ -54,3 +55,33 @@ dependencies {
     compile "blue.endless:jankson:${project.janksonVersion}"
     contained "blue.endless:jankson:${project.janksonVersion}"
 }
+
+curseforge {
+    if (project.hasProperty("curseForgeApiKey")) {
+        apiKey = project.properties.curseForgeApiKey
+    }
+    project {
+        id = "310111"
+        changelogType = "markdown"
+        changelog = file("CHANGELOG.md")
+        releaseType = "release"
+        addGameVersion "1.14-Snapshot"
+        mainArtifact(remapShadowJar.jar) {
+            displayName = "[Fabric $project.minecraftVersion] v$project.version"
+            relations {
+                requiredDependency "fabric"
+                optionalDependency "pluginloader"
+                tool "rei-addons"
+            }
+        }
+    }
+    options {
+        forgeGradleIntegration = false
+    }
+}
+
+afterEvaluate {
+    // CurseGradle generates tasks in afterEvaluate for each project
+    // There isn't really any other way to make it depend on a task unless it is an AbstractArchiveTask
+    tasks.curseforge310111.dependsOn remapShadowJar
+}

+ 0 - 2
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -81,8 +81,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali
             RoughlyEnoughItemsCore.LOGGER.warn("REI: Plugin Loader is not loaded! Please consider installing https://minecraft.curseforge.com/projects/pluginloader for REI plugin compatibility!");
             registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin());
         }
-        
-        ClientTickCallback.EVENT.register(GuiHelper::onTick);
     }
     
     @Override

+ 3 - 0
src/main/java/me/shedaniel/rei/client/ConfigObject.java

@@ -43,6 +43,9 @@ public class ConfigObject {
     @Comment("Toggle utils buttons")
     public boolean showUtilsButtons = false;
     
+    @Comment("Disable Recipe Book")
+    public boolean disableRecipeBook = false;
+    
     @Comment("The location of choose page dialog")
     public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5);
     

+ 12 - 5
src/main/java/me/shedaniel/rei/client/GuiHelper.java

@@ -1,11 +1,14 @@
 package me.shedaniel.rei.client;
 
 import com.google.common.collect.Lists;
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.gui.ContainerScreenOverlay;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
 import me.shedaniel.rei.listeners.ContainerScreenHooks;
-import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.InputListener;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
 import net.minecraft.item.ItemStack;
 
 import java.util.List;
@@ -38,10 +41,14 @@ public class GuiHelper {
         return getLastOverlay(false);
     }
     
-    public static void onTick(MinecraftClient client) {
-        if (client.currentScreen instanceof ContainerScreen && lastContainerScreen != client.currentScreen) {
-            GuiHelper.lastContainerScreen = (ContainerScreen) client.currentScreen;
-        }
+    public static void disableRecipeBook(ContainerScreen lastContainerScreen, List<InputListener> listeners, List<ButtonWidget> buttonWidgets) {
+        RoughlyEnoughItemsCore.LOGGER.info("%d %d", listeners.size(), buttonWidgets.size());
+        for(InputListener listener : listeners)
+            if (listener instanceof RecipeBookButtonWidget)
+                listeners.remove(listener);
+        for(ButtonWidget buttonWidget : buttonWidgets)
+            if (buttonWidget instanceof RecipeBookButtonWidget)
+                buttonWidgets.remove(buttonWidget);
     }
     
     public static ContainerScreen getLastContainerScreen() {

+ 19 - 0
src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java

@@ -207,6 +207,25 @@ public class ConfigScreen extends Screen {
                 return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons);
             }
         }));
+        entryListWidget.configAddEntry(new ConfigEntry.ButtonConfigEntry(new TranslatableTextComponent("text.rei.config.disable_recipe_book"), new ConfigEntry.ButtonConfigEntry.ConfigEntryButtonProvider() {
+            @Override
+            public boolean onPressed(int button, double mouseX, double mouseY) {
+                if (button == 0)
+                    RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = !RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook;
+                try {
+                    RoughlyEnoughItemsCore.getConfigManager().saveConfig();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    return false;
+                }
+                return true;
+            }
+        
+            @Override
+            public String getText() {
+                return getTrueFalseText(RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook);
+            }
+        }));
         entryListWidget.configAddEntry(new ConfigEntry.CategoryTitleConfigEntry(new TranslatableTextComponent("text.rei.config.advanced")));
         entryListWidget.configAddEntry(new ConfigEntry.TextFieldConfigEntry(new TranslatableTextComponent("text.rei.give_command"), new ConfigEntry.TextFieldConfigEntry.ConfigEntryTextFieldProvider() {
             @Override

+ 5 - 6
src/main/java/me/shedaniel/rei/listeners/ContainerScreenHooks.java

@@ -1,18 +1,17 @@
 package me.shedaniel.rei.listeners;
 
 import net.minecraft.container.Slot;
-import net.minecraft.item.ItemStack;
 
 public interface ContainerScreenHooks {
     
-    public int rei_getContainerLeft();
+    int rei_getContainerLeft();
     
-    public int rei_getContainerTop();
+    int rei_getContainerTop();
     
-    public int rei_getContainerWidth();
+    int rei_getContainerWidth();
     
-    public int rei_getContainerHeight();
+    int rei_getContainerHeight();
     
-    public Slot rei_getHoveredSlot();
+    Slot rei_getHoveredSlot();
     
 }

+ 2 - 1
src/main/java/me/shedaniel/rei/mixin/MixinContainerScreen.java

@@ -1,5 +1,6 @@
 package me.shedaniel.rei.mixin;
 
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.api.TabGetter;
 import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
@@ -9,9 +10,9 @@ import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.ContainerScreen;
 import net.minecraft.client.gui.Screen;
 import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
+import net.minecraft.client.gui.widget.ButtonWidget;
 import net.minecraft.container.Slot;
 import net.minecraft.item.ItemGroup;
-import net.minecraft.item.ItemStack;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.injection.At;

+ 22 - 0
src/main/java/me/shedaniel/rei/mixin/MixinScreen.java

@@ -0,0 +1,22 @@
+package me.shedaniel.rei.mixin;
+
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
+import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
+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.CallbackInfoReturnable;
+
+@Mixin(Screen.class)
+public class MixinScreen {
+    
+    @Inject(method = "addButton", at = @At("HEAD"), cancellable = true)
+    protected void addButton(ButtonWidget buttonWidget, CallbackInfoReturnable info) {
+        if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && ((Screen) (Object) this) instanceof ContainerScreen && buttonWidget instanceof RecipeBookButtonWidget)
+            info.cancel();
+    }
+    
+}

+ 1 - 0
src/main/resources/assets/roughlyenoughitems/lang/en_us.json

@@ -53,6 +53,7 @@
   "text.rei.config.appearance": "Appearance",
   "text.rei.config.modules": "Modules",
   "text.rei.config.advanced": "Advanced",
+  "text.rei.config.disable_recipe_book": "Disable Recipe Book:",
   "text.rei.choose_page": "Choose Page",
   "text.rei.config.disable_credits_button": "Disable Credits Button:",
   "text.rei.config.max_recipes_per_page": "Maximum Recipes Each Page:",

+ 1 - 0
src/main/resources/roughlyenoughitems.client.json

@@ -4,6 +4,7 @@
   "minVersion": "0.7.11",
   "compatibilityLevel": "JAVA_8",
   "mixins": [
+    "MixinScreen",
     "MixinContainerScreen",
     "MixinClientPlayNetworkHandler",
     "MixinPlayerInventoryScreen",