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"