Ver Fonte

Fix #469

Signed-off-by: shedaniel <daniel@shedaniel.me>
shedaniel há 4 anos atrás
pai
commit
62aaa590ce

+ 35 - 13
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsInitializer.java

@@ -28,6 +28,8 @@ import net.fabricmc.api.ClientModInitializer;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.ModInitializer;
 import net.fabricmc.loader.api.FabricLoader;
+import net.fabricmc.loader.api.SemanticVersion;
+import net.fabricmc.loader.api.VersionParsingException;
 
 import java.lang.reflect.InvocationTargetException;
 
@@ -35,9 +37,12 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer {
     @Override
     public void onInitialize() {
         checkRequiredFabricModules();
-        checkClothConfig();
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+            checkClothConfig();
+            checkModMenu();
+        }
         
-        if (checkRequiredFabricModules() && checkRequiredFabricModules()) {
+        if (RoughlyEnoughItemsState.getErrors().isEmpty()) {
             initializeEntryPoint("me.shedaniel.rei.RoughlyEnoughItemsNetwork");
             
             if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
@@ -47,7 +52,9 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer {
             }
         }
         
-        initializeEntryPoint("me.shedaniel.rei.impl.ErrorDisplayer");
+        if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
+            initializeEntryPoint("me.shedaniel.rei.impl.ErrorDisplayer");
+        }
     }
     
     public void initializeEntryPoint(String className) {
@@ -63,7 +70,7 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer {
         }
     }
     
-    public static boolean checkRequiredFabricModules() {
+    public static void checkRequiredFabricModules() {
         ImmutableSet<String> requiredModules = FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT ?
                 ImmutableSet.<String>builder()
                         .add("fabric-api-base")
@@ -82,19 +89,34 @@ public class RoughlyEnoughItemsInitializer implements ModInitializer {
             boolean moduleLoaded = FabricLoader.getInstance().isModLoaded(module);
             if (!moduleLoaded) {
                 RoughlyEnoughItemsState.error("Fabric API is not installed!", "https://www.curseforge.com/minecraft/mc-mods/fabric-api/files/all");
-                return false;
+                break;
             }
         }
-        
-        return true;
     }
     
-    public static boolean checkClothConfig() {
-        if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) {
-            RoughlyEnoughItemsState.error("Cloth Config is not installed!", "https://www.curseforge.com/minecraft/mc-mods/cloth-config/files/all");
-            return false;
+    public static void checkClothConfig() {
+        try {
+            if (!FabricLoader.getInstance().isModLoaded("cloth-config2")) {
+                RoughlyEnoughItemsState.error("Cloth Config is not installed!", "https://www.curseforge.com/minecraft/mc-mods/cloth-config/files/all");
+            } else if (SemanticVersion.parse(FabricLoader.getInstance().getModContainer("cloth-config2").get().getMetadata().getVersion().getFriendlyString()).compareTo(SemanticVersion.parse("4.10.9")) < 0) {
+                RoughlyEnoughItemsState.error("Your Cloth Config version is too old!", "https://www.curseforge.com/minecraft/mc-mods/cloth-config/files/all");
+            }
+        } catch (VersionParsingException e) {
+            RoughlyEnoughItemsState.error("Failed to parse Cloth Config version: " + e.getMessage());
+            e.printStackTrace();
+        }
+    }
+    
+    public static void checkModMenu() {
+        try {
+            if (FabricLoader.getInstance().isModLoaded("modmenu")) {
+                if (SemanticVersion.parse(FabricLoader.getInstance().getModContainer("modmenu").get().getMetadata().getVersion().getFriendlyString()).compareTo(SemanticVersion.parse("1.16.7")) < 0) {
+                    RoughlyEnoughItemsState.error("Your Mod Menu version is too old!", "https://www.curseforge.com/minecraft/mc-mods/modmenu/files/all");
+                }
+            }
+        } catch (VersionParsingException e) {
+            RoughlyEnoughItemsState.error("Failed to parse Mod Menu version: " + e.getMessage());
+            e.printStackTrace();
         }
-        
-        return true;
     }
 }

+ 77 - 80
RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsNetwork.java

@@ -25,7 +25,6 @@ package me.shedaniel.rei;
 
 import com.google.common.collect.Lists;
 import io.netty.buffer.Unpooled;
-import me.shedaniel.math.api.Executor;
 import me.shedaniel.rei.server.InputSlotCrafter;
 import net.fabricmc.api.ModInitializer;
 import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
@@ -57,93 +56,91 @@ public class RoughlyEnoughItemsNetwork implements ModInitializer {
     
     @Override
     public void onInitialize() {
-        Executor.run(() -> () -> {
-            FabricLoader.getInstance().getEntrypoints("rei_containers", Runnable.class).forEach(Runnable::run);
-            ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
-                ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
-                if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
-                    player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
-                    return;
-                }
-                if (!player.inventory.getCarried().isEmpty()) {
-                    player.inventory.setCarried(ItemStack.EMPTY);
-                    player.broadcastCarriedItem();
-                }
-            });
-            ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
-                ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
-                if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
-                    player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
-                    return;
-                }
-                ItemStack stack = packetByteBuf.readItem();
-                if (player.inventory.add(stack.copy())) {
-                    ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(stack.copy()).writeUtf(player.getScoreboardName(), 32767));
-                } else
-                    player.displayClientMessage(new TranslatableComponent("text.rei.failed_cheat_items"), false);
-            });
-            ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_GRAB_PACKET, (packetContext, packetByteBuf) -> {
-                ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
-                if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
-                    player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
-                    return;
-                }
-                
-                Inventory inventory = player.inventory;
-                ItemStack itemStack = packetByteBuf.readItem();
-                ItemStack stack = itemStack.copy();
-                if (!inventory.getCarried().isEmpty() && ItemStack.isSameIgnoreDurability(inventory.getCarried(), stack) && ItemStack.tagMatches(inventory.getCarried(), stack)) {
-                    stack.setCount(Mth.clamp(stack.getCount() + inventory.getCarried().getCount(), 1, stack.getMaxStackSize()));
-                } else if (!inventory.getCarried().isEmpty()) {
-                    return;
-                }
-                inventory.setCarried(stack.copy());
+        FabricLoader.getInstance().getEntrypoints("rei_containers", Runnable.class).forEach(Runnable::run);
+        ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
+            ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
+            if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
+                player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
+                return;
+            }
+            if (!player.inventory.getCarried().isEmpty()) {
+                player.inventory.setCarried(ItemStack.EMPTY);
                 player.broadcastCarriedItem();
-                ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(itemStack.copy()).writeUtf(player.getScoreboardName(), 32767));
-            });
-            ServerSidePacketRegistry.INSTANCE.register(MOVE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
-                ResourceLocation category = packetByteBuf.readResourceLocation();
-                ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
-                AbstractContainerMenu container = player.containerMenu;
-                InventoryMenu playerContainer = player.inventoryMenu;
+            }
+        });
+        ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
+            ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
+            if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
+                player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
+                return;
+            }
+            ItemStack stack = packetByteBuf.readItem();
+            if (player.inventory.add(stack.copy())) {
+                ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(stack.copy()).writeUtf(player.getScoreboardName(), 32767));
+            } else
+                player.displayClientMessage(new TranslatableComponent("text.rei.failed_cheat_items"), false);
+        });
+        ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_GRAB_PACKET, (packetContext, packetByteBuf) -> {
+            ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
+            if (player.getServer().getProfilePermissions(player.getGameProfile()) < player.getServer().getOperatorUserPermissionLevel()) {
+                player.displayClientMessage(new TranslatableComponent("text.rei.no_permission_cheat").withStyle(ChatFormatting.RED), false);
+                return;
+            }
+            
+            Inventory inventory = player.inventory;
+            ItemStack itemStack = packetByteBuf.readItem();
+            ItemStack stack = itemStack.copy();
+            if (!inventory.getCarried().isEmpty() && ItemStack.isSameIgnoreDurability(inventory.getCarried(), stack) && ItemStack.tagMatches(inventory.getCarried(), stack)) {
+                stack.setCount(Mth.clamp(stack.getCount() + inventory.getCarried().getCount(), 1, stack.getMaxStackSize()));
+            } else if (!inventory.getCarried().isEmpty()) {
+                return;
+            }
+            inventory.setCarried(stack.copy());
+            player.broadcastCarriedItem();
+            ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, RoughlyEnoughItemsNetwork.CREATE_ITEMS_MESSAGE_PACKET, new FriendlyByteBuf(Unpooled.buffer()).writeItem(itemStack.copy()).writeUtf(player.getScoreboardName(), 32767));
+        });
+        ServerSidePacketRegistry.INSTANCE.register(MOVE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
+            ResourceLocation category = packetByteBuf.readResourceLocation();
+            ServerPlayer player = (ServerPlayer) packetContext.getPlayer();
+            AbstractContainerMenu container = player.containerMenu;
+            InventoryMenu playerContainer = player.inventoryMenu;
+            try {
+                boolean shift = packetByteBuf.readBoolean();
+                NonNullList<List<ItemStack>> input = NonNullList.create();
+                int mapSize = packetByteBuf.readInt();
+                for (int i = 0; i < mapSize; i++) {
+                    List<ItemStack> list = Lists.newArrayList();
+                    int count = packetByteBuf.readInt();
+                    for (int j = 0; j < count; j++) {
+                        list.add(packetByteBuf.readItem());
+                    }
+                    input.add(list);
+                }
                 try {
-                    boolean shift = packetByteBuf.readBoolean();
-                    NonNullList<List<ItemStack>> input = NonNullList.create();
-                    int mapSize = packetByteBuf.readInt();
-                    for (int i = 0; i < mapSize; i++) {
-                        List<ItemStack> list = Lists.newArrayList();
-                        int count = packetByteBuf.readInt();
-                        for (int j = 0; j < count; j++) {
-                            list.add(packetByteBuf.readItem());
+                    InputSlotCrafter.start(category, container, player, input, shift);
+                } catch (InputSlotCrafter.NotEnoughMaterialsException e) {
+                    if (!(container instanceof RecipeBookMenu))
+                        return;
+                    FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
+                    buf.writeInt(input.size());
+                    for (List<ItemStack> stacks : input) {
+                        buf.writeInt(stacks.size());
+                        for (ItemStack stack : stacks) {
+                            buf.writeItem(stack);
                         }
-                        input.add(list);
                     }
-                    try {
-                        InputSlotCrafter.start(category, container, player, input, shift);
-                    } catch (InputSlotCrafter.NotEnoughMaterialsException e) {
-                        if (!(container instanceof RecipeBookMenu))
-                            return;
-                        FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
-                        buf.writeInt(input.size());
-                        for (List<ItemStack> stacks : input) {
-                            buf.writeInt(stacks.size());
-                            for (ItemStack stack : stacks) {
-                                buf.writeItem(stack);
-                            }
-                        }
-                        if (ServerSidePacketRegistry.INSTANCE.canPlayerReceive(player, NOT_ENOUGH_ITEMS_PACKET)) {
-                            ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, NOT_ENOUGH_ITEMS_PACKET, buf);
-                        }
-                    } catch (IllegalStateException e) {
-                        player.sendMessage(new TranslatableComponent(e.getMessage()).withStyle(ChatFormatting.RED), Util.NIL_UUID);
-                    } catch (Exception e) {
-                        player.sendMessage(new TranslatableComponent("error.rei.internal.error", e.getMessage()).withStyle(ChatFormatting.RED), Util.NIL_UUID);
-                        e.printStackTrace();
+                    if (ServerSidePacketRegistry.INSTANCE.canPlayerReceive(player, NOT_ENOUGH_ITEMS_PACKET)) {
+                        ServerSidePacketRegistry.INSTANCE.sendToPlayer(player, NOT_ENOUGH_ITEMS_PACKET, buf);
                     }
+                } catch (IllegalStateException e) {
+                    player.sendMessage(new TranslatableComponent(e.getMessage()).withStyle(ChatFormatting.RED), Util.NIL_UUID);
                 } catch (Exception e) {
+                    player.sendMessage(new TranslatableComponent("error.rei.internal.error", e.getMessage()).withStyle(ChatFormatting.RED), Util.NIL_UUID);
                     e.printStackTrace();
                 }
-            });
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         });
     }
     

+ 0 - 3
src/main/resources/fabric.mod.json

@@ -17,9 +17,6 @@
     "cloth-client-events-v0": ">=1.5.47",
     "minecraft": "~1.16.2-rc.1"
   },
-  "breaks": {
-    "cloth-config2": "<4.10.9"
-  },
   "license": "MIT",
   "icon": "icon.png"
 }