diff --git a/.gitignore b/.gitignore index 47cd4121..e86013c1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,6 @@ eclipse/ build.number run/ .DS_Store -launch.json \ No newline at end of file +launch.json +out/ +.idea/ \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7b629f14..30a08749 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.4-SNAPSHOT' + id 'fabric-loom' version '1.6-SNAPSHOT' } sourceCompatibility = JavaVersion.VERSION_17 @@ -9,6 +9,7 @@ repositories { maven { url 'https://masa.dy.fi/maven' } maven { url 'https://maven.terraformersmc.com/releases/' } // maven { url 'https://maven.quiltmc.org/repository/release/' } + maven { url 'https://jitpack.io' } } dependencies { @@ -17,7 +18,9 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}" implementation "com.google.code.findbugs:jsr305:3.0.2" - modImplementation "fi.dy.masa.malilib:malilib-fabric-${project.minecraft_version_out}:${project.malilib_version}" +// modImplementation "fi.dy.masa.malilib:malilib-fabric-${project.minecraft_version_out}:${project.malilib_version}" + modImplementation "com.github.sakura-ryoko:malilib:${project.malilib_sr}" + // Fabric API. This is technically optional, but you probably want it anyway. //modCompile "net.fabricmc.fabric-api:fabric-api:" + project.fabric_version diff --git a/gradle.properties b/gradle.properties index 97f6388c..ea51b5c7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,11 +13,12 @@ mod_version = craftfix-1.2.8 # Required malilib version malilib_version = 0.18.0 +malilib_sr=1.21-sakura.4 # Minecraft, Fabric and mappings versions -minecraft_version_out = 1.20.4 -minecraft_version = 1.20.4 -mappings_version = 1.20.4+build.1 +minecraft_version_out = 1.21 +minecraft_version = 1.21 +mappings_version = 1.21+build.2 -fabric_loader_version = 0.15.1 -mod_menu_version = 9.0.0-pre.1 +fabric_loader_version = 0.15.11 +mod_menu_version = 11.0.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a5952066..17655d0e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/fi/dy/masa/itemscroller/ItemScroller.java b/src/main/java/fi/dy/masa/itemscroller/ItemScroller.java index 13e0a493..bcda8a5e 100644 --- a/src/main/java/fi/dy/masa/itemscroller/ItemScroller.java +++ b/src/main/java/fi/dy/masa/itemscroller/ItemScroller.java @@ -1,5 +1,6 @@ package fi.dy.masa.itemscroller; +import fi.dy.masa.itemscroller.compat.carpet.StackingShulkerBoxes; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import fi.dy.masa.malilib.event.InitializationHandler; @@ -13,6 +14,6 @@ public class ItemScroller implements ModInitializer public void onInitialize() { InitializationHandler.getInstance().registerInitializationHandler(new InitHandler()); - fi.dy.masa.itemscroller.compat.carpet.StackingShulkerBoxes.init(); + StackingShulkerBoxes.init(); } } diff --git a/src/main/java/fi/dy/masa/itemscroller/compat/carpet/StackingShulkerBoxes.java b/src/main/java/fi/dy/masa/itemscroller/compat/carpet/StackingShulkerBoxes.java index f1b8ea17..3aac7162 100644 --- a/src/main/java/fi/dy/masa/itemscroller/compat/carpet/StackingShulkerBoxes.java +++ b/src/main/java/fi/dy/masa/itemscroller/compat/carpet/StackingShulkerBoxes.java @@ -2,11 +2,12 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.ShulkerBoxBlock; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.ContainerComponent; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import java.lang.invoke.*; -import java.util.function.Function; import java.util.function.IntSupplier; public class StackingShulkerBoxes { @@ -17,14 +18,6 @@ public static void init(){ try { enabled = true; MethodHandles.Lookup lookup = MethodHandles.lookup(); - MethodHandle shulkerBoxHasItemsTarget = lookup.findStatic(Class.forName("carpet.helpers.InventoryHelper"), "shulkerBoxHasItems", MethodType.methodType(boolean.class, ItemStack.class)); - shulkerBoxHasItems = (ItemStack stack) -> { - try { - return (Boolean) shulkerBoxHasItemsTarget.invokeWithArguments(stack); - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; MethodHandle shulkerBoxStackSizeHandle = lookup.findStaticVarHandle(Class.forName("carpet.CarpetSettings"), "shulkerBoxStackSize", int.class).toMethodHandle(VarHandle.AccessMode.GET); shulkerBoxStackSizeGetter = ()-> { try { @@ -39,8 +32,7 @@ public static void init(){ } } } - private static IntSupplier shulkerBoxStackSizeGetter = null; - private static Function shulkerBoxHasItems = null; + private static IntSupplier shulkerBoxStackSizeGetter = () -> 1; // avoid init fail cause NullPointerException /** * @param stack {@link ItemStack} @@ -51,10 +43,10 @@ public static void init(){ public static int getMaxCount(ItemStack stack){ if (!enabled) return stack.getMaxCount(); int shulkerBoxStackSize = shulkerBoxStackSizeGetter.getAsInt(); - if (shulkerBoxStackSize > 1 && - stack.getItem() instanceof BlockItem && - ((BlockItem)stack.getItem()).getBlock() instanceof ShulkerBoxBlock && - !shulkerBoxHasItems.apply(stack) + if (shulkerBoxStackSize > 1 + && stack.getItem() instanceof BlockItem + && ((BlockItem)stack.getItem()).getBlock() instanceof ShulkerBoxBlock + && stack.getOrDefault(DataComponentTypes.CONTAINER, ContainerComponent.DEFAULT).stream().findAny().isEmpty() ) { return shulkerBoxStackSize; } diff --git a/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java b/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java index 232f0484..47f655b4 100644 --- a/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/event/RenderEventHandler.java @@ -18,6 +18,7 @@ import fi.dy.masa.itemscroller.util.AccessorUtils; import fi.dy.masa.itemscroller.util.InputUtils; import fi.dy.masa.itemscroller.util.InventoryUtils; +import org.joml.Matrix4fStack; public class RenderEventHandler { @@ -51,10 +52,10 @@ public void renderRecipeView(DrawContext drawContext) this.calculateRecipePositions(gui); - MatrixStack matrixStack = RenderSystem.getModelViewStack(); - matrixStack.push(); - matrixStack.translate(this.recipeListX, this.recipeListY, 0); - matrixStack.scale((float) this.scale, (float) this.scale, 1); + Matrix4fStack matrix4fStack = RenderSystem.getModelViewStack(); + matrix4fStack.pushMatrix(); + matrix4fStack.translate(this.recipeListX, this.recipeListY, 0); + matrix4fStack.scale((float) this.scale, (float) this.scale, 1); String str = StringUtils.translate("itemscroller.gui.label.recipe_page", (first / countPerPage) + 1, recipes.getTotalRecipeCount() / countPerPage); @@ -80,7 +81,7 @@ public void renderRecipeView(DrawContext drawContext) this.renderRecipeItems(recipe, recipes.getRecipeCountPerPage(), gui, drawContext); } - matrixStack.pop(); + matrix4fStack.popMatrix(); RenderSystem.applyModelViewMatrix(); RenderSystem.enableBlend(); // Fixes the crafting book icon rendering } @@ -106,9 +107,9 @@ public void onDrawScreenPost(MinecraftClient mc, DrawContext drawContext) final int recipeId = this.getHoveredRecipeId(mouseX, mouseY, recipes, gui); float offset = 300f; - MatrixStack matrixStack = RenderSystem.getModelViewStack(); - matrixStack.push(); - matrixStack.translate(0, 0, offset); + Matrix4fStack matrix4fStack = RenderSystem.getModelViewStack(); + matrix4fStack.pushMatrix(); + matrix4fStack.translate(0, 0, offset); if (recipeId >= 0) { @@ -126,7 +127,7 @@ else if (Configs.Generic.CRAFTING_RENDER_RECIPE_ITEMS.getBooleanValue()) } } - matrixStack.pop(); + matrix4fStack.popMatrix(); RenderSystem.applyModelViewMatrix(); } } diff --git a/src/main/java/fi/dy/masa/itemscroller/event/WorldLoadListener.java b/src/main/java/fi/dy/masa/itemscroller/event/WorldLoadListener.java index ef3f1580..7010f13e 100644 --- a/src/main/java/fi/dy/masa/itemscroller/event/WorldLoadListener.java +++ b/src/main/java/fi/dy/masa/itemscroller/event/WorldLoadListener.java @@ -7,6 +7,7 @@ import fi.dy.masa.itemscroller.recipes.RecipeStorage; import fi.dy.masa.itemscroller.villager.VillagerDataStorage; import fi.dy.masa.malilib.interfaces.IWorldLoadListener; +import net.minecraft.registry.DynamicRegistryManager; public class WorldLoadListener implements IWorldLoadListener { @@ -16,7 +17,7 @@ public void onWorldLoadPre(@Nullable ClientWorld worldBefore, @Nullable ClientWo // Quitting to main menu, save the settings before the integrated server gets shut down if (worldBefore != null && worldAfter == null) { - this.writeData(); + this.writeData(worldBefore.getRegistryManager()); VillagerDataStorage.getInstance().writeToDisk(); } } @@ -27,24 +28,24 @@ public void onWorldLoadPost(@Nullable ClientWorld worldBefore, @Nullable ClientW // Logging in to a world, load the data if (worldBefore == null && worldAfter != null) { - this.readStoredData(); + this.readStoredData(worldAfter.getRegistryManager()); VillagerDataStorage.getInstance().readFromDisk(); } } - private void writeData() + private void writeData(DynamicRegistryManager registryManager) { if (Configs.Generic.SCROLL_CRAFT_STORE_RECIPES_TO_FILE.getBooleanValue()) { - RecipeStorage.getInstance().writeToDisk(); + RecipeStorage.getInstance().writeToDisk(registryManager); } } - private void readStoredData() + private void readStoredData(DynamicRegistryManager registryManager) { if (Configs.Generic.SCROLL_CRAFT_STORE_RECIPES_TO_FILE.getBooleanValue()) { - RecipeStorage.getInstance().readFromDisk(); + RecipeStorage.getInstance().readFromDisk(registryManager); } } } diff --git a/src/main/java/fi/dy/masa/itemscroller/gui/ItemScrollerIcons.java b/src/main/java/fi/dy/masa/itemscroller/gui/ItemScrollerIcons.java index 2abf639d..bb0c35e8 100644 --- a/src/main/java/fi/dy/masa/itemscroller/gui/ItemScrollerIcons.java +++ b/src/main/java/fi/dy/masa/itemscroller/gui/ItemScrollerIcons.java @@ -13,7 +13,7 @@ public enum ItemScrollerIcons implements IGuiIcon STAR_5_YELLOW (112, 18, 5, 5), STAR_5_PURPLE (117, 18, 5, 5); - public static final Identifier TEXTURE = new Identifier(Reference.MOD_ID, "textures/gui/gui_widgets.png"); + public static final Identifier TEXTURE = Identifier.splitOn("itemscroller:textures/gui/gui_widgets.png", ':'); private final int u; private final int v; 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 b432b6b1..241dcff8 100644 --- a/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java +++ b/src/main/java/fi/dy/masa/itemscroller/mixin/MixinCraftingScreenHandler.java @@ -1,5 +1,7 @@ package fi.dy.masa.itemscroller.mixin; +import net.minecraft.recipe.CraftingRecipe; +import net.minecraft.recipe.RecipeEntry; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -31,7 +33,8 @@ private static void onUpdateResult( World world, PlayerEntity player, RecipeInputInventory craftingInventory, - CraftingResultInventory resultInv, + CraftingResultInventory resultInventory, + RecipeEntry recipe, CallbackInfo ci) { //InventoryUtils.onSlotChangedCraftingGrid(player, craftingInv, resultInv); diff --git a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java index 372bec9a..22484631 100644 --- a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java +++ b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipePattern.java @@ -12,6 +12,7 @@ import net.minecraft.nbt.NbtList; import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.RecipeEntry; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; import fi.dy.masa.itemscroller.recipes.CraftingHandler.SlotRange; @@ -117,7 +118,7 @@ public void copyRecipeFrom(RecipePattern other) this.initializeRecipe(); } - public void readFromNBT(@Nonnull NbtCompound nbt) + public void readFromNBT(@Nonnull NbtCompound nbt, DynamicRegistryManager registryManager) { if (nbt.contains("Result", Constants.NBT.TAG_COMPOUND) && nbt.contains("Ingredients", Constants.NBT.TAG_LIST)) { @@ -137,22 +138,23 @@ public void readFromNBT(@Nonnull NbtCompound nbt) if (slot >= 0 && slot < this.recipe.length) { - this.recipe[slot] = ItemStack.fromNbt(tag); + this.recipe[slot] = ItemStack.fromNbtOrEmpty(registryManager, tag); } } - this.result = ItemStack.fromNbt(nbt.getCompound("Result")); + this.result = ItemStack.fromNbtOrEmpty(registryManager, nbt.getCompound("Result")); this.initializeRecipe(); } } @Nonnull - public NbtCompound writeToNBT(@Nonnull NbtCompound nbt) + public NbtCompound writeToNBT(DynamicRegistryManager registryManager) { + NbtCompound nbt = new NbtCompound(); + if (this.isValid()) { - NbtCompound tag = new NbtCompound(); - this.result.writeNbt(tag); + NbtCompound tag = (NbtCompound) this.result.encode(registryManager); nbt.putInt("Length", this.recipe.length); nbt.put("Result", tag); @@ -161,11 +163,12 @@ public NbtCompound writeToNBT(@Nonnull NbtCompound nbt) for (int i = 0; i < this.recipe.length; i++) { - if (InventoryUtils.isStackEmpty(this.recipe[i]) == false) + if (this.recipe[i].isEmpty() == false && InventoryUtils.isStackEmpty(this.recipe[i]) == false) { tag = new NbtCompound(); + tag.copyFrom((NbtCompound) this.recipe[i].encode(registryManager)); + tag.putInt("Slot", i); - this.recipe[i].writeNbt(tag); tagIngredients.add(tag); } } diff --git a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java index 8520659a..c8bbc4ad 100644 --- a/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java +++ b/src/main/java/fi/dy/masa/itemscroller/recipes/RecipeStorage.java @@ -9,7 +9,8 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtTagSizeTracker; +import net.minecraft.nbt.NbtSizeTracker; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.screen.slot.Slot; import fi.dy.masa.itemscroller.ItemScroller; @@ -123,7 +124,7 @@ public void clearRecipe(int index) this.dirty = true; } - private void readFromNBT(NbtCompound nbt) + private void readFromNBT(NbtCompound nbt, DynamicRegistryManager registryManager) { if (nbt == null || nbt.contains("Recipes", Constants.NBT.TAG_LIST) == false) { @@ -146,24 +147,24 @@ private void readFromNBT(NbtCompound nbt) if (index >= 0 && index < this.recipes.length) { - this.recipes[index].readFromNBT(tag); + this.recipes[index].readFromNBT(tag, registryManager); } } this.changeSelectedRecipe(nbt.getByte("Selected")); } - private NbtCompound writeToNBT(@Nonnull NbtCompound nbt) + private NbtCompound writeToNBT(DynamicRegistryManager registryManager) { NbtList tagRecipes = new NbtList(); + NbtCompound nbt = new NbtCompound(); for (int i = 0; i < this.recipes.length; i++) { if (this.recipes[i].isValid()) { - NbtCompound tag = new NbtCompound(); + NbtCompound tag = this.recipes[i].writeToNBT(registryManager); tag.putByte("RecipeIndex", (byte) i); - this.recipes[i].writeToNBT(tag); tagRecipes.add(tag); } } @@ -194,7 +195,7 @@ private File getSaveDir() return new File(FileUtils.getMinecraftDirectory(), Reference.MOD_ID); } - public void readFromDisk() + public void readFromDisk(DynamicRegistryManager registryManager) { try { @@ -207,7 +208,7 @@ public void readFromDisk() if (file.exists() && file.isFile() && file.canRead()) { FileInputStream is = new FileInputStream(file); - this.readFromNBT(NbtIo.readCompressed(is, NbtTagSizeTracker.ofUnlimitedBytes())); + this.readFromNBT(NbtIo.readCompressed(is, NbtSizeTracker.ofUnlimitedBytes()), registryManager); is.close(); //ItemScroller.logger.info("Read recipes from file '{}'", file.getPath()); } @@ -219,7 +220,7 @@ public void readFromDisk() } } - public void writeToDisk() + public void writeToDisk(DynamicRegistryManager registryManager) { if (this.dirty) { @@ -239,7 +240,7 @@ public void writeToDisk() File fileTmp = new File(saveDir, this.getFileName() + ".tmp"); File fileReal = new File(saveDir, this.getFileName()); FileOutputStream os = new FileOutputStream(fileTmp); - NbtIo.writeCompressed(this.writeToNBT(new NbtCompound()), os); + NbtIo.writeCompressed(this.writeToNBT(registryManager), os); os.close(); if (fileReal.exists()) 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 00590cb5..b04780ae 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/InventoryUtils.java @@ -30,6 +30,7 @@ import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.RecipeManager; import net.minecraft.recipe.RecipeType; +import net.minecraft.recipe.input.CraftingRecipeInput; import net.minecraft.registry.Registries; import net.minecraft.screen.Generic3x3ContainerScreenHandler; import net.minecraft.screen.MerchantScreenHandler; @@ -98,10 +99,10 @@ public static Optional> getRecipeFromPattern(RecipeP // Set dummy slots with recipe pattern for (int i = 0; i < items.length; i++) { search.setStack(i, items[i]); - ; } + CraftingRecipeInput input = search.createRecipeInput(); - return recipeManager.getFirstMatch(RecipeType.CRAFTING, search, mc.world); + return recipeManager.getFirstMatch(RecipeType.CRAFTING, input, mc.world); } public static String getStackString(ItemStack stack) @@ -111,7 +112,7 @@ public static String getStackString(ItemStack stack) Identifier rl = Registries.ITEM.getId(stack.getItem()); String idStr = rl != null ? rl.toString() : "null"; String displayName = stack.getName().getString(); - String nbtStr = stack.getNbt() != null ? stack.getNbt().toString() : ""; + String nbtStr = stack.getComponents() != null ? stack.getComponents().toString() : ""; return String.format("[%s - display: %s - NBT: %s] (%s)", idStr, displayName, nbtStr, stack); } @@ -1073,8 +1074,8 @@ private static void tryMoveItemsToMerchantBuySlots(MerchantScreen gui, return; } - ItemStack buy1 = recipe.getAdjustedFirstBuyItem(); - ItemStack buy2 = recipe.getSecondBuyItem(); + ItemStack buy1 = recipe.getDisplayedFirstBuyItem(); + ItemStack buy2 = recipe.getDisplayedSecondBuyItem(); if (isStackEmpty(buy1) == false) { @@ -1947,7 +1948,7 @@ private static IntArrayList getSlotNumbersOfEmptySlotsInPlayerInventory(ScreenHa public static boolean areStacksEqual(ItemStack stack1, ItemStack stack2) { - return ItemStack.canCombine(stack1, stack2); + return ItemStack.areItemsAndComponentsEqual(stack1, stack2); } private static boolean areSlotsInSameInventory(Slot slot1, Slot slot2) diff --git a/src/main/java/fi/dy/masa/itemscroller/util/ItemType.java b/src/main/java/fi/dy/masa/itemscroller/util/ItemType.java index 62772a7c..ab3db6bb 100644 --- a/src/main/java/fi/dy/masa/itemscroller/util/ItemType.java +++ b/src/main/java/fi/dy/masa/itemscroller/util/ItemType.java @@ -32,7 +32,7 @@ public int hashCode() int result = 1; //result = prime * result + ((stack == null) ? 0 : stack.hashCode()); result = prime * result + this.stack.getItem().hashCode(); - result = prime * result + (this.stack.getNbt() != null ? this.stack.getNbt().hashCode() : 0); + result = prime * result + (this.stack.getComponents() != null ? this.stack.getComponents().hashCode() : 0); return result; } @@ -48,7 +48,7 @@ public boolean equals(Object obj) ItemType other = (ItemType) obj; - return ItemStack.canCombine(this.stack, other.stack); + return ItemStack.areItemsAndComponentsEqual(this.stack, other.stack); } /** diff --git a/src/main/java/fi/dy/masa/itemscroller/villager/TradeType.java b/src/main/java/fi/dy/masa/itemscroller/villager/TradeType.java index 26256824..d8ed0f37 100644 --- a/src/main/java/fi/dy/masa/itemscroller/villager/TradeType.java +++ b/src/main/java/fi/dy/masa/itemscroller/villager/TradeType.java @@ -26,7 +26,7 @@ public TradeType(Item buyItem1, Item buyItem2, Item sellItem) public boolean matchesTrade(TradeOffer trade) { ItemStack stackBuyItem1 = trade.getOriginalFirstBuyItem(); - ItemStack stackBuyItem2 = trade.getSecondBuyItem(); + ItemStack stackBuyItem2 = trade.getDisplayedSecondBuyItem(); ItemStack stackSellItem = trade.getSellItem(); Item buyItem1 = stackBuyItem1.getItem(); Item buyItem2 = stackBuyItem2.getItem(); @@ -65,7 +65,7 @@ public static Item getItemForName(String name) { try { - Identifier id = new Identifier(name); + Identifier id = Identifier.of(name); return Registries.ITEM.get(id); } catch (Exception e) @@ -111,7 +111,7 @@ public int hashCode() public static TradeType of(TradeOffer trade) { ItemStack stackBuyItem1 = trade.getOriginalFirstBuyItem(); - ItemStack stackBuyItem2 = trade.getSecondBuyItem(); + ItemStack stackBuyItem2 = trade.getDisplayedSecondBuyItem(); ItemStack stackSellItem = trade.getSellItem(); Item buyItem1 = stackBuyItem1.getItem(); Item buyItem2 = stackBuyItem2.getItem(); diff --git a/src/main/java/fi/dy/masa/itemscroller/villager/VillagerDataStorage.java b/src/main/java/fi/dy/masa/itemscroller/villager/VillagerDataStorage.java index 7a8aedbc..8742b011 100644 --- a/src/main/java/fi/dy/masa/itemscroller/villager/VillagerDataStorage.java +++ b/src/main/java/fi/dy/masa/itemscroller/villager/VillagerDataStorage.java @@ -15,7 +15,7 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtTagSizeTracker; +import net.minecraft.nbt.NbtSizeTracker; import net.minecraft.screen.MerchantScreenHandler; import net.minecraft.village.TradeOffer; import net.minecraft.village.TradeOfferList; @@ -217,7 +217,7 @@ public void readFromDisk() if (file.exists() && file.isFile() && file.canRead()) { FileInputStream is = new FileInputStream(file); - this.readFromNBT(NbtIo.readCompressed(is, NbtTagSizeTracker.ofUnlimitedBytes())); + this.readFromNBT(NbtIo.readCompressed(is, NbtSizeTracker.ofUnlimitedBytes())); is.close(); } }