diff --git a/gradle.properties b/gradle.properties index 59c89bc..18473dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,21 +3,16 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/versions.html - minecraft_version=1.20.5 - yarn_mappings=1.20.5+build.1 - loader_version=0.15.10 + minecraft_version=1.20.6 + yarn_mappings=1.20.6+build.1 + loader_version=0.15.11 # Mod Properties - mod_version = 3.2.0 + mod_version = 3.2.1 maven_group = de.mschae23.minecraft.mod archives_base_name = grind-enchantments # Dependencies - fabric_api_version=0.97.6+1.20.5 + fabric_api_version=0.98.0+1.20.6 codec_config_api_version=2.0.0+1.20.5-rc3 tax_free_levels_version=loom-SNAPSHOT - -# Vineflower properties - # suppress inspection "TrailingSpacesInProperty" - vineflower.preference.ind =\ \ \ \ - vineflower.preference.nls =1 diff --git a/src/main/java/de/mschae23/grindenchantments/GrindEnchantments.java b/src/main/java/de/mschae23/grindenchantments/GrindEnchantments.java index 6128cf5..51a43da 100644 --- a/src/main/java/de/mschae23/grindenchantments/GrindEnchantments.java +++ b/src/main/java/de/mschae23/grindenchantments/GrindEnchantments.java @@ -23,8 +23,10 @@ import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ItemEnchantmentsComponent; import net.minecraft.component.type.LoreComponent; +import net.minecraft.component.type.NbtComponent; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.registry.RegistryWrapper; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -32,7 +34,6 @@ import de.mschae23.grindenchantments.config.DedicatedServerConfig; import de.mschae23.grindenchantments.config.FilterConfig; import de.mschae23.grindenchantments.cost.CostFunction; -import de.mschae23.grindenchantments.item.GrindEnchantmentsDataComponent; public class GrindEnchantments { public static int getLevelCost(ItemStack stack, CostFunction costFunction, FilterConfig filter, RegistryWrapper.WrapperLookup wrapperLookup) { @@ -51,7 +52,13 @@ public static ItemStack addLevelCostComponent(ItemStack stack, IntSupplier cost, return stack; ItemStack changed = stack.copy(); - changed.set(GrindEnchantmentsDataComponent.TYPE, new GrindEnchantmentsDataComponent(cost.getAsInt(), canTakeItem)); + changed.apply(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT, nbt -> nbt.apply(compound -> { + NbtCompound tag = new NbtCompound(); + tag.putInt("Cost", cost.getAsInt()); + tag.putBoolean("CanTake", canTakeItem); + + compound.put(GrindEnchantmentsMod.MODID, tag); + })); return changed; } @@ -71,7 +78,8 @@ public static ItemStack addLevelCostLore(ItemStack stack, IntSupplier cost, bool public static ItemStack removeLevelCostNbt(ItemStack stack) { // Relies on ItemStacks being mutable AND the stack not being copied into the player inventory before calling this method - stack.remove(GrindEnchantmentsDataComponent.TYPE); + stack.apply(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT, nbt -> nbt.apply(compound -> + compound.remove(GrindEnchantmentsMod.MODID))); return stack; } } diff --git a/src/main/java/de/mschae23/grindenchantments/GrindEnchantmentsMod.java b/src/main/java/de/mschae23/grindenchantments/GrindEnchantmentsMod.java index be70e5f..73f28f1 100644 --- a/src/main/java/de/mschae23/grindenchantments/GrindEnchantmentsMod.java +++ b/src/main/java/de/mschae23/grindenchantments/GrindEnchantmentsMod.java @@ -39,7 +39,6 @@ import de.mschae23.grindenchantments.impl.DisenchantOperation; import de.mschae23.grindenchantments.impl.MoveOperation; import de.mschae23.grindenchantments.impl.ResetRepairCostOperation; -import de.mschae23.grindenchantments.item.GrindEnchantmentsDataComponent; import de.mschae23.grindenchantments.registry.GrindEnchantmentsRegistries; import io.github.fourmisain.taxfreelevels.TaxFreeLevels; import org.apache.logging.log4j.Level; @@ -68,8 +67,6 @@ public void onInitialize() { GrindEnchantmentsRegistries.init(); CostFunctionType.init(); - GrindEnchantmentsDataComponent.init(); - DisenchantOperation disenchant = new DisenchantOperation(); MoveOperation move = new MoveOperation(); ResetRepairCostOperation resetRepairCost = new ResetRepairCostOperation(); diff --git a/src/main/java/de/mschae23/grindenchantments/item/GrindEnchantmentsDataComponent.java b/src/main/java/de/mschae23/grindenchantments/item/GrindEnchantmentsDataComponent.java deleted file mode 100644 index 929787e..0000000 --- a/src/main/java/de/mschae23/grindenchantments/item/GrindEnchantmentsDataComponent.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2024 mschae23 - * - * This file is part of Grind enchantments. - * - * Grind enchantments is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package de.mschae23.grindenchantments.item; - -import net.minecraft.component.DataComponentType; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import de.mschae23.grindenchantments.GrindEnchantmentsMod; -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; - -public record GrindEnchantmentsDataComponent(int cost, boolean canTake) { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.INT.fieldOf("cost").forGetter(GrindEnchantmentsDataComponent::cost), - Codec.BOOL.fieldOf("can_take").forGetter(GrindEnchantmentsDataComponent::canTake) - ).apply(instance, instance.stable(GrindEnchantmentsDataComponent::new))); - - public static final DataComponentType TYPE = Registry.register(Registries.DATA_COMPONENT_TYPE, - GrindEnchantmentsMod.id("grind_enchantments"), DataComponentType.builder().codec(CODEC).build()); - - public static void init() { - } -} diff --git a/src/main/java/de/mschae23/grindenchantments/mixin/GrindstoneScreenHandlerMixin.java b/src/main/java/de/mschae23/grindenchantments/mixin/GrindstoneScreenHandlerMixin.java index e37264b..9ef8aec 100644 --- a/src/main/java/de/mschae23/grindenchantments/mixin/GrindstoneScreenHandlerMixin.java +++ b/src/main/java/de/mschae23/grindenchantments/mixin/GrindstoneScreenHandlerMixin.java @@ -72,13 +72,6 @@ private void onGetOutputStack(ItemStack input1, ItemStack input2, CallbackInfoRe ItemStack result = GrindstoneEvents.UPDATE_RESULT.invoker().onUpdateResult(input1, input2, player, player.getRegistryManager()); if (!result.isEmpty()) { - int cost = GrindstoneEvents.LEVEL_COST.invoker().getLevelCost(input1, input2, player, player.getRegistryManager()); - - if (cost >= 0) { - boolean canTake = GrindstoneEvents.CAN_TAKE_RESULT.invoker().canTakeResult(input1, input2, player, player.getRegistryManager()); - result = GrindEnchantments.addLevelCostComponent(result, () -> cost, canTake, GrindEnchantmentsMod.getConfig().dedicatedServerConfig()); - } - cir.setReturnValue(result); } } diff --git a/src/main/java/de/mschae23/grindenchantments/mixin/ScreenHandlerMixin.java b/src/main/java/de/mschae23/grindenchantments/mixin/ScreenHandlerMixin.java deleted file mode 100644 index 0798dab..0000000 --- a/src/main/java/de/mschae23/grindenchantments/mixin/ScreenHandlerMixin.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2024 mschae23 - * - * This file is part of Grind enchantments. - * - * Grind enchantments is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package de.mschae23.grindenchantments.mixin; - -import java.util.function.Supplier; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import de.mschae23.grindenchantments.GrindEnchantments; -import de.mschae23.grindenchantments.GrindEnchantmentsMod; -import de.mschae23.grindenchantments.config.GrindEnchantmentsV3Config; -import de.mschae23.grindenchantments.item.GrindEnchantmentsDataComponent; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@Mixin(ScreenHandler.class) -public class ScreenHandlerMixin { - @WrapOperation(method = "sendContentUpdates", at = @At(value = "INVOKE", target = "Lcom/google/common/base/Suppliers;memoize(Lcom/google/common/base/Supplier;)Lcom/google/common/base/Supplier;", remap = false)) - private com.google.common.base.Supplier addLoreOnSendUpdates(com.google.common.base.Supplier delegate, Operation> original) { - GrindEnchantmentsV3Config config = GrindEnchantmentsMod.getConfig(); - - if (!config.dedicatedServerConfig().alternativeCostDisplay()) { - return original.call(delegate); - } - - return original.call((com.google.common.base.Supplier) () -> { - ItemStack copy = delegate.get(); - - if (copy != null) { - GrindEnchantmentsDataComponent modComponent = copy.get(GrindEnchantmentsDataComponent.TYPE); - copy.remove(GrindEnchantmentsDataComponent.TYPE); - - if (modComponent != null) { - GrindEnchantments.addLevelCostLore(copy, modComponent::cost, modComponent.canTake()); - } - } - - return copy; - }); - } - - @WrapOperation(method = "updateToClient", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;")) - private ItemStack addLoreOnUpdateToClient(Slot slot, Operation original) { - GrindEnchantmentsV3Config config = GrindEnchantmentsMod.getConfig(); - ItemStack stack = original.call(slot).copy(); - - if (!config.dedicatedServerConfig().alternativeCostDisplay()) { - return stack; - } - - if (stack != null) { - GrindEnchantmentsDataComponent modComponent = stack.get(GrindEnchantmentsDataComponent.TYPE); - stack.remove(GrindEnchantmentsDataComponent.TYPE); - - if (modComponent != null) { - GrindEnchantments.addLevelCostLore(stack, modComponent::cost, modComponent.canTake()); - } - } - - return stack; - } - - @ModifyArg(method = "updateToClient", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/ScreenHandler;updateTrackedSlot(ILnet/minecraft/item/ItemStack;Ljava/util/function/Supplier;)V"), index = 2) - private Supplier removeAdditionalCopy(int slot, ItemStack stack, Supplier copySupplier) { - return () -> stack; - } - - @ModifyArg(method = "checkCursorStackUpdates", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/ScreenHandlerSyncHandler;updateCursorStack(Lnet/minecraft/screen/ScreenHandler;Lnet/minecraft/item/ItemStack;)V"), index = 1) - private ItemStack removeComponentOnCursorStackUpdate(ItemStack stack) { - if (stack != null) { - stack.remove(GrindEnchantmentsDataComponent.TYPE); - } - - return stack; - } - - @WrapOperation(method = "syncState", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;copy()Lnet/minecraft/item/ItemStack;")) - private ItemStack removeComponentOnSyncState(ItemStack instance, Operation original) { - ItemStack stack = original.call(instance); - - if (stack != null) { - stack.remove(GrindEnchantmentsDataComponent.TYPE); - } - - return stack; - } -} diff --git a/src/main/resources/grindenchantments.mixins.json b/src/main/resources/grindenchantments.mixins.json index 9b53d99..54a5b76 100644 --- a/src/main/resources/grindenchantments.mixins.json +++ b/src/main/resources/grindenchantments.mixins.json @@ -7,8 +7,7 @@ "GrindstoneScreenHandlerMixin", "GrindstoneScreenHandlerMixin$Anonymous2Mixin", "GrindstoneScreenHandlerMixin$Anonymous3Mixin", - "GrindstoneScreenHandlerMixin$Anonymous4Mixin", - "ScreenHandlerMixin" + "GrindstoneScreenHandlerMixin$Anonymous4Mixin" ], "client": [ "GrindstoneScreenMixin"