diff --git a/gradle.properties b/gradle.properties index 4082175..6c16802 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,17 +9,17 @@ author = masa mod_file_name = itemscroller-fabric # Current mod version -mod_version = 0.24.999-snap +mod_version = 0.24.59-alpha.1 # Required malilib version -malilib_version = 0.20.999-snap -malilib_id = 67cc3ca61a +malilib_version = 0.21.59-alpha.1 +malilib_id = 14f11c739d # Minecraft, Fabric Loader and API and mappings versions -minecraft_version_out = 24w40a -minecraft_version = 24w40a -mappings_version = 24w40a+build.9 +minecraft_version_out = 1.21.2-pre1 +minecraft_version = 1.21.2-pre1 +mappings_version = 1.21.2-pre1+build.1 fabric_loader_version = 0.16.5 mod_menu_version = 12.0.0-alpha.1 -# fabric_api_version = 0.105.2+1.21.2 \ No newline at end of file +# fabric_api_version = 0.105.3+1.21.2 \ No newline at end of file diff --git a/src/main/java/fi/dy/masa/itemscroller/data/DataManager.java b/src/main/java/fi/dy/masa/itemscroller/data/DataManager.java index 6d59005..2bf741f 100644 --- a/src/main/java/fi/dy/masa/itemscroller/data/DataManager.java +++ b/src/main/java/fi/dy/masa/itemscroller/data/DataManager.java @@ -16,7 +16,9 @@ import net.minecraft.recipe.RecipeManager; import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.RegistryKey; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; +import net.minecraft.world.World; import fi.dy.masa.malilib.network.ClientPlayHandler; import fi.dy.masa.malilib.network.IPluginClientPlayHandler; @@ -134,6 +136,22 @@ public String getServuxVersion() public boolean hasServuxServer() { return this.servuxServer; } + public boolean hasIntegratedServer() + { + return mc.isIntegratedServerRunning(); + } + + public @Nullable ServerWorld getServerWorld() + { + if (this.hasIntegratedServer() && + mc.getServer() != null && mc.world != null) + { + return mc.getServer().getWorld(mc.world.getRegistryKey()); + } + + return null; + } + /** * Store's the world registry manager for Dynamic Lookup for various data * Set this at WorldLoadPost diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinRecipeBookWidget.java b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinRecipeBookWidget.java index e504a12..e93e00a 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinRecipeBookWidget.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/IMixinRecipeBookWidget.java @@ -1,5 +1,6 @@ package fi.dy.masa.itemscroller.mixin; +import net.minecraft.client.gui.screen.recipebook.GhostRecipe; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.recipe.NetworkRecipeId; import org.spongepowered.asm.mixin.Mixin; @@ -8,7 +9,6 @@ @Mixin(RecipeBookWidget.class) public interface IMixinRecipeBookWidget { - // FIXME - @Accessor("field_54830") - NetworkRecipeId itemscroller_getGhostSlots(); + @Accessor("ghostRecipe") + GhostRecipe itemscroller_getGhostSlots(); } diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractCraftingRecipeBookWidget.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractCraftingRecipeBookWidget.java index 01e8585..49b68e1 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractCraftingRecipeBookWidget.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinAbstractCraftingRecipeBookWidget.java @@ -1,6 +1,8 @@ package fi.dy.masa.itemscroller.mixin; import fi.dy.masa.itemscroller.util.InventoryUtils; + +import net.minecraft.class_10352; import net.minecraft.client.gui.screen.recipebook.AbstractCraftingRecipeBookWidget; import net.minecraft.client.gui.screen.recipebook.GhostRecipe; import net.minecraft.client.gui.screen.recipebook.RecipeResultCollection; @@ -24,19 +26,19 @@ private void itemscroller_populateRecipes(RecipeResultCollection recipeResultCol } } + // FIXME -- Annoying code to deal with // Seems to be (intended) bug from Mojang @Inject( - method = "method_64868", + method = "showGhostRecipe", at = @At("HEAD"), cancellable = true ) - private void itemscroller_nShowGhostRecipe(GhostRecipe ghostRecipe, RecipeDisplay recipeDisplay, SlotDisplay.Context context, CallbackInfo ci) + private void itemscroller_onShowGhostRecipe(GhostRecipe ghostRecipe, RecipeDisplay recipeDisplay, class_10352 context, CallbackInfo ci) { - /* - if (((IMixinRecipeBookWidget) this).itemscroller_getGhostSlots() == recipe) { + if (((IMixinRecipeBookWidget) this).itemscroller_getGhostSlots() == ghostRecipe) + { ci.cancel(); } - */ } } diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinClientPlayNetworkHandler.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinClientPlayNetworkHandler.java index f10ea52..033cc28 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinClientPlayNetworkHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinClientPlayNetworkHandler.java @@ -36,8 +36,7 @@ private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER - ), - cancellable = true + ) ) private void onCraftFailedResponse(CraftFailedResponseS2CPacket packet, CallbackInfo ci) { diff --git a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java index a69beb5..6a5aa50 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java @@ -27,14 +27,12 @@ public abstract class MixinCraftingScreenHandler private void onSlotChangedCraftingGrid(net.minecraft.inventory.Inventory inventory, CallbackInfo ci) { // FIXME - /* if (MinecraftClient.getInstance().isOnThread()) { InventoryUtils.onSlotChangedCraftingGrid(this.player, ((IMixinAbstractCraftingScreenHandler) this).itemscroller_getCraftingInventory(), ((IMixinAbstractCraftingScreenHandler) this).itemscroller_getCraftingResultInventory()); } - */ } // FIXME @@ -43,11 +41,9 @@ private static void onUpdateResult( ScreenHandler handler, ServerWorld serverWorld, PlayerEntity player, RecipeInputInventory craftingInventory, CraftingResultInventory resultInventory, RecipeEntry recipe, CallbackInfo ci) { // FIXME - /* if (MinecraftClient.getInstance().isOnThread()) { InventoryUtils.onSlotChangedCraftingGrid(player, craftingInventory, resultInventory); } - */ } } diff --git a/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java b/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java index 4889836..4317f55 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java @@ -43,6 +43,7 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; import net.minecraft.screen.slot.TradeOutputSlot; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; import net.minecraft.util.collection.DefaultedList; import net.minecraft.village.TradeOffer; @@ -53,6 +54,7 @@ import fi.dy.masa.itemscroller.ItemScroller; import fi.dy.masa.itemscroller.config.Configs; import fi.dy.masa.itemscroller.config.Hotkeys; +import fi.dy.masa.itemscroller.data.DataManager; import fi.dy.masa.itemscroller.mixin.IMixinCraftingResultSlot; import fi.dy.masa.itemscroller.recipes.CraftingHandler; import fi.dy.masa.itemscroller.recipes.CraftingHandler.SlotRange; @@ -94,7 +96,6 @@ public static void setInhibitCraftingOutputUpdate(boolean inhibitUpdate) } // FIXME - /* public static void onSlotChangedCraftingGrid(PlayerEntity player, RecipeInputInventory craftMatrix, CraftingResultInventory inventoryCraftResult) @@ -122,15 +123,14 @@ public static void updateCraftingOutputSlot(Slot outputSlot) updateCraftingOutputSlot(player, craftingInv, resultInv, true); } } - */ // FIXME - /* public static void updateCraftingOutputSlot(PlayerEntity player, RecipeInputInventory craftMatrix, CraftingResultInventory inventoryCraftResult, boolean setEmptyStack) { + ServerWorld serverWorld = DataManager.getInstance().getServerWorld(); World world = player.getEntityWorld(); if ((world instanceof ClientWorld) && player instanceof ClientPlayerEntity) @@ -140,11 +140,19 @@ public static void updateCraftingOutputSlot(PlayerEntity player, RecipeEntry recipeEntry = null; CraftingRecipeInput recipeInput = craftMatrix.createRecipeInput(); - if (recipe == null || recipe.matches(recipeInput, world) == false) + if ((recipe == null || recipe.matches(recipeInput, world) == false) && + (serverWorld != null)) + { + Optional> opt = serverWorld.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, recipeInput, serverWorld); + recipe = opt.map(RecipeEntry::value).orElse(null); + recipeEntry = opt.orElse(null); + } + else if ((recipe == null || recipe.matches(recipeInput, world) == false) && + (DataManager.getInstance().getPreparedRecipes() != null)) { - Optional> optional = world.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, recipeInput, world); - recipe = optional.map(RecipeEntry::value).orElse(null); - recipeEntry = optional.orElse(null); + Optional> opt = DataManager.getInstance().getPreparedRecipes().find(RecipeType.CRAFTING, recipeInput, world).findFirst(); + recipe = opt.map(RecipeEntry::value).orElse(null); + recipeEntry = opt.orElse(null); } // TODO -- See if this works (GameRules) @@ -153,8 +161,9 @@ public static void updateCraftingOutputSlot(PlayerEntity player, GameRules rules = new GameRules(((ClientPlayerEntity) player).networkHandler.getEnabledFeatures()); if ((recipe.isIgnoredInRecipeBook() || - rules.getBoolean(GameRules.DO_LIMITED_CRAFTING) == false || - ((ClientPlayerEntity) player).getRecipeBook().contains(recipeEntry))) + rules.getBoolean(GameRules.DO_LIMITED_CRAFTING) == false)) + // FIXME + //|| ((ClientPlayerEntity) player).getRecipeBook().contains(recipeEntry))) { inventoryCraftResult.setLastRecipe(recipeEntry); stack = recipe.craft(recipeInput, world.getRegistryManager()); @@ -170,7 +179,6 @@ public static void updateCraftingOutputSlot(PlayerEntity player, lastRecipe = recipe; } } - */ public static String getStackString(ItemStack stack) { @@ -1687,7 +1695,6 @@ public static void throwAllNonRecipeItemsToGround(RecipePattern recipe, } // FIXME - /* public static void setCraftingGridContentsUsingSwaps(HandledScreen gui, PlayerInventory inv, RecipePattern recipe, @@ -1760,7 +1767,6 @@ public static void setCraftingGridContentsUsingSwaps(HandledScreen gui, IntArrayList targetSlots, diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b9948e0..8286fe3 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ ], "accessWidener": "itemscroller.accesswidener", "depends": { - "minecraft": ">1.21.1", - "malilib": "0.20.999-snap" + "minecraft": "1.21.2-beta.1", + "malilib": "0.21.59-alpha.1" } }