diff --git a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java index 3aad25565e..7f0ac888eb 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/enchanter/EnchanterBlockEntity.java @@ -243,6 +243,9 @@ public static boolean isValidCenterEnchantingSetup(@NotNull EnchanterBlockEntity Map currentEnchantedBookEnchantments = EnchantmentHelper.get(virtualSlotStack); for (Enchantment enchantment : currentEnchantedBookEnchantments.keySet()) { if ((isEnchantableBookInCenter || enchantment.isAcceptableItem(centerStack)) && (!existingEnchantments.containsKey(enchantment) || existingEnchantments.get(enchantment) < currentEnchantedBookEnchantments.get(enchantment))) { + if(SpectrumEnchantmentTags.isIn(SpectrumEnchantmentTags.IGNORED_BY_ENCHANTER_ENCHANTING, enchantment)) { + continue; + } if (enchanterBlockEntity.canOwnerApplyConflictingEnchantments) { enchantedBookWithAdditionalEnchantmentsFound = true; break; @@ -338,10 +341,13 @@ public static void enchantCenterItem(@NotNull EnchanterBlockEntity enchanterBloc public static Map getHighestEnchantmentsInItemBowls(@NotNull EnchanterBlockEntity enchanterBlockEntity) { List bowlStacks = new ArrayList<>(); for (int i = 0; i < 8; i++) { - bowlStacks.add(enchanterBlockEntity.virtualInventoryIncludingBowlStacks.getStack(2 + i)); + ItemStack bowlStack = enchanterBlockEntity.virtualInventoryIncludingBowlStacks.getStack(2 + i); + if (!bowlStack.isIn(SpectrumItemTags.ENCHANTER_ENCHANTMENT_SOURCE_BLACKLISTED)) { + bowlStacks.add(bowlStack); + } } - return SpectrumEnchantmentHelper.collectHighestEnchantments(bowlStacks); + return SpectrumEnchantmentHelper.collectHighestEnchantments(bowlStacks, SpectrumEnchantmentTags.IGNORED_BY_ENCHANTER_ENCHANTING); } public static int getRequiredExperienceToEnchantCenterItem(@NotNull EnchanterBlockEntity enchanterBlockEntity) { diff --git a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java index ba86f6e61d..8c31193d27 100644 --- a/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java +++ b/src/main/java/de/dafuqs/spectrum/compat/SpectrumIntegrationPacks.java @@ -63,14 +63,18 @@ public static void register() { registerIntegrationPack(CREATE_ID, () -> new CreateCompat()); registerIntegrationPack(FARMERSDELIGHT_ID, () -> new FDCompat()); registerIntegrationPack(GOBBER_ID, () -> new GobberCompat()); - registerIntegrationPack(MALUM_ID, () -> new MalumCompat()); registerIntegrationPack(NEEPMEAT_ID, () -> new NEEPMeatCompat()); if (!CONNECTOR_LOADED) { // Traveler's Backpack for Forge crashes due to Fabric lacking Fluid#getFluidType (a Forge method) // This cannot be reasonably worked around AFAIK // ~unilock, 2025 + + //Malum for Fabric uses Create Porter Lib, Atemps to register enchantments though it create NoSuchField errors + // Needs replacement or hacky workaround + // ~Shibva, 2026 registerIntegrationPack(TRAVELERS_BACKPACK_ID, () -> new TravelersBackpackCompat()); + registerIntegrationPack(MALUM_ID, () -> new MalumCompat()); } for (ModIntegrationPack container : INTEGRATION_PACKS.values()) { diff --git a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java index b6c5b1b2be..a721b2c5f7 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/SpectrumEnchantmentHelper.java @@ -8,6 +8,7 @@ import net.minecraft.item.*; import net.minecraft.nbt.*; import net.minecraft.registry.*; +import net.minecraft.registry.tag.*; import net.minecraft.util.*; import org.jetbrains.annotations.*; @@ -141,13 +142,18 @@ public static boolean hasEnchantmentThatConflictsWith(ItemStack itemStack, Encha return false; } - public static Map collectHighestEnchantments(List itemStacks) { + //This instance of collectHighestEnchantments is to enable the use of an optional filter + public static Map collectHighestEnchantments(List itemStacks, @Nullable TagKey ignoreList) { Map enchantmentLevelMap = new LinkedHashMap<>(); - for (ItemStack itemStack : itemStacks) { Map itemStackEnchantments = EnchantmentHelper.get(itemStack); for (Enchantment enchantment : itemStackEnchantments.keySet()) { int level = itemStackEnchantments.get(enchantment); + + if (ignoreList != null && SpectrumEnchantmentTags.isIn(ignoreList, enchantment)) { + continue; + } + if (enchantmentLevelMap.containsKey(enchantment)) { int storedLevel = enchantmentLevelMap.get(enchantment); if (level > storedLevel) { diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEnchantmentTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEnchantmentTags.java index 7c519830ba..3cd90d42fe 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumEnchantmentTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumEnchantmentTags.java @@ -11,6 +11,7 @@ public class SpectrumEnchantmentTags { public static final TagKey SPECTRUM_ENCHANTMENT = of("enchantments"); + public static final TagKey IGNORED_BY_ENCHANTER_ENCHANTING = of("ignored_by_enchanter_enchanting"); private static TagKey of(String id) { return TagKey.of(RegistryKeys.ENCHANTMENT, SpectrumCommon.locate(id)); @@ -22,10 +23,7 @@ public static boolean isIn(TagKey tag, Enchantment enchantment) { return false; } Optional> registryEntry = Registries.ENCHANTMENT.getEntry(optionalKey.get()); - if (registryEntry.isEmpty()) { - return false; - } - return Registries.ENCHANTMENT.getOrCreateEntryList(tag).contains(registryEntry.get()); + return registryEntry.filter(enchantmentReference -> Registries.ENCHANTMENT.getOrCreateEntryList(tag).contains(enchantmentReference)).isPresent(); } } diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java index 6454fdea33..93510f36ba 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemTags.java @@ -32,7 +32,8 @@ public class SpectrumItemTags { public static final TagKey TAG_FILTERING_ITEMS = of("tag_filtering_items"); public static final TagKey WEEPING_GALA_LOGS = of("weeping_gala_logs"); public static final TagKey PLAYER_ATTRIBUTED_PLACEMENT = of("player_attributed_placement"); - + public static final TagKey ENCHANTER_ENCHANTMENT_SOURCE_BLACKLISTED = of("enchanter_enchantment_source_blacklisted"); + private static TagKey of(String id) { return TagKey.of(RegistryKeys.ITEM, SpectrumCommon.locate(id)); } diff --git a/src/main/resources/data/spectrum/tags/enchantment/ignored_by_enchanter_enchanting.json b/src/main/resources/data/spectrum/tags/enchantment/ignored_by_enchanter_enchanting.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/resources/data/spectrum/tags/enchantment/ignored_by_enchanter_enchanting.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/tags/items/enchanter_enchantment_source_blacklisted.json b/src/main/resources/data/spectrum/tags/items/enchanter_enchantment_source_blacklisted.json new file mode 100644 index 0000000000..f72d209df7 --- /dev/null +++ b/src/main/resources/data/spectrum/tags/items/enchanter_enchantment_source_blacklisted.json @@ -0,0 +1,3 @@ +{ + "values": [] +} \ No newline at end of file