ソースを参照

single thread recipe sync & fix bug

Fix #105
Unknown 6 年 前
コミット
5e9a5691c4

+ 2 - 2
gradle.properties

@@ -1,10 +1,10 @@
 mod_version=2.9.4
 minecraft_version=1.14.2
-yarn_version=1.14.2+build.2
+yarn_version=1.14.2+build.3
 fabricloader_version=0.4.7+build.147
 jankson_version=1.1.0
 cloth_events_version=0.3.1.23
-cloth_config_version=0.1.0
+cloth_config_version=0.2.0
 modmenu_version=1.5.4-85
 
 fabric_keybindings=0.1.0+59147463

+ 4 - 1
src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java

@@ -43,6 +43,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 public class RoughlyEnoughItemsCore implements ClientModInitializer {
@@ -53,6 +55,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
     private static final ItemRegistry ITEM_REGISTRY = new ItemRegistryImpl();
     private static final DisplayHelper DISPLAY_HELPER = new DisplayHelperImpl();
     private static final Map<Identifier, REIPluginEntry> plugins = Maps.newHashMap();
+    private static final ExecutorService SYNC_RECIPES = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "REI-SyncRecipes"));
     private static ConfigManagerImpl configManager;
     
     static {
@@ -208,7 +211,7 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
     private void registerClothEvents() {
         ClothClientHooks.SYNC_RECIPES.register((minecraftClient, recipeManager, synchronizeRecipesS2CPacket) -> {
             if (RoughlyEnoughItemsCore.getConfigManager().getConfig().registerRecipesInAnotherThread)
-                CompletableFuture.runAsync(() -> ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager));
+                CompletableFuture.runAsync(() -> ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager), SYNC_RECIPES);
             else
                 ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager);
         });

+ 1 - 1
src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java

@@ -289,7 +289,7 @@ public class RecipeViewingScreen extends Screen {
             int displayWidth = selectedCategory.getDisplayWidth(displaySupplier.get());
             final Rectangle displayBounds = new Rectangle((int) getBounds().getCenterX() - displayWidth / 2, getBounds().y + 40 + recipeHeight * i + 7 * i, displayWidth, recipeHeight);
             widgets.addAll(selectedCategory.setupDisplay(displaySupplier, displayBounds));
-            if (supplier.isPresent())
+            if (supplier.isPresent() && supplier.get().get(displayBounds) != null)
                 widgets.add(new SpeedCraftingButtonWidget(supplier.get().get(displayBounds), supplier.get().getButtonText(), functional, displaySupplier));
         }
         if (choosePageActivated)