From 04ca2e19cfce91fb106941027c4c336e31e436ef Mon Sep 17 00:00:00 2001 From: FirstMegaGame4 <84094287+FirstMegaGame4@users.noreply.github.com> Date: Thu, 31 Aug 2023 21:34:32 +0200 Subject: [PATCH] Change EnchantmentType Add DefaultEnchantmentType, SimpleEnchantmentType, TableExclusionEnchantmentType And FilteredEnchantmentType Add FilterList, BlackList And WhiteList Change Some Mixins Update Quilt Loader --- gradle/libs.versions.toml | 2 +- .../library/base/AdvancedModContainer.java | 5 ++ .../enchantments/CustomEnchantedBookItem.java | 20 +++---- .../enchantments/CustomEnchantment.java | 2 + .../library/enchantments/EnchantmentType.java | 26 -------- .../types/DefaultEnchantmentType.java | 25 ++++++++ .../enchantments/types/EnchantmentType.java | 59 +++++++++++++++++++ .../types/FilteredEnchantmentType.java | 20 +++++++ .../types/SimpleEnchantmentType.java | 34 +++++++++++ .../types/TableExclusionEnchantmentType.java | 19 ++++++ .../library/fluids/FluidGroup.java | 2 +- .../mmodding_lib/library/utils/BlackList.java | 18 ++++++ .../library/utils/FilterList.java | 14 +++++ .../mmodding_lib/library/utils/WhiteList.java | 18 ++++++ .../injectors/AnvilScreenHandlerMixin.java | 24 ++++++++ .../injectors/EnchantedBookItemMixin.java | 23 ++++++++ .../injectors/EnchantmentHelperMixin.java | 2 +- .../mixin/injectors/EnchantmentMixin.java | 25 ++++++++ .../mixin/injectors/ExplosionMixin.java | 12 ++-- .../FishingBobberEntityRendererMixin.java | 9 +-- src/main/resources/mmodding_lib.mixins.json | 3 + 21 files changed, 311 insertions(+), 51 deletions(-) delete mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/EnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/DefaultEnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/EnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/FilteredEnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/SimpleEnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/TableExclusionEnchantmentType.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/utils/BlackList.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/utils/FilterList.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/library/utils/WhiteList.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/mixin/injectors/AnvilScreenHandlerMixin.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantedBookItemMixin.java create mode 100644 src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentMixin.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 94ee502..6c45a83 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ # The latest versions are available at https://lambdaurora.dev/tools/import_quilt.html minecraft = "1.19.2" quilt_mappings = "1.19.2+build.22" -quilt_loader = "0.17.6" +quilt_loader = "0.19.2" mixin_extras = "0.2.0-beta.11" quilted_fabric_api = "4.0.0-beta.18+0.64.0-1.19.2" diff --git a/src/main/java/com/mmodding/mmodding_lib/library/base/AdvancedModContainer.java b/src/main/java/com/mmodding/mmodding_lib/library/base/AdvancedModContainer.java index a34f5e9..35a167a 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/base/AdvancedModContainer.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/base/AdvancedModContainer.java @@ -33,6 +33,11 @@ public List> getSourcePaths() { public BasicSourceType getSourceType() { return mod.getSourceType(); } + + @Override + public ClassLoader getClassLoader() { + return mod.getClassLoader(); + } }; } diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantedBookItem.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantedBookItem.java index 508e5df..9fb7bed 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantedBookItem.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantedBookItem.java @@ -1,13 +1,13 @@ package com.mmodding.mmodding_lib.library.enchantments; -import com.mmodding.mmodding_lib.library.items.settings.AdvancedItemSettings; +import com.mmodding.mmodding_lib.library.enchantments.types.EnchantmentType; import com.mmodding.mmodding_lib.library.items.ItemRegistrable; +import com.mmodding.mmodding_lib.library.utils.TextUtils; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentLevelEntry; import net.minecraft.item.EnchantedBookItem; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.registry.Registry; @@ -17,20 +17,17 @@ public class CustomEnchantedBookItem extends EnchantedBookItem implements ItemRe private final AtomicBoolean registered = new AtomicBoolean(false); - private EnchantmentType type; + private final EnchantmentType type; - public CustomEnchantedBookItem(AdvancedItemSettings settings) { + public CustomEnchantedBookItem(EnchantmentType type, Settings settings) { super(settings); - } - - public void setType(EnchantmentType type) { this.type = type; } public ItemStack forCustomEnchantment(EnchantmentLevelEntry info) { - ItemStack stack = new ItemStack(this.type.bookItem()); - stack.setCustomName(Text.of(this.type.prefix() + " " + stack.getName())); - addEnchantment(stack, info); + ItemStack stack = new ItemStack(this.type.getEnchantedBook()); + stack.setCustomName(TextUtils.spaceBetween(this.type.getPrefix().copy(), stack.getName())); + CustomEnchantedBookItem.addEnchantment(stack, info); return stack; } @@ -48,7 +45,8 @@ public void appendStacks(ItemGroup group, DefaultedList stacks) { } } } - } else if (group.getEnchantments().length != 0) { + } + else if (group.getEnchantments().length != 0) { for(Enchantment enchantment : Registry.ENCHANTMENT) { if (group.containsEnchantments(enchantment.type)) { if (enchantment instanceof CustomEnchantment customEnchantment) { diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantment.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantment.java index e065623..0c2abeb 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantment.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/CustomEnchantment.java @@ -1,5 +1,6 @@ package com.mmodding.mmodding_lib.library.enchantments; +import com.mmodding.mmodding_lib.library.enchantments.types.EnchantmentType; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentTarget; import net.minecraft.entity.EquipmentSlot; @@ -9,6 +10,7 @@ public class CustomEnchantment extends Enchantment implements EnchantmentRegistrable { private final AtomicBoolean registered = new AtomicBoolean(false); + private final EnchantmentType type; public CustomEnchantment(Rarity rarity, EnchantmentTarget enchantmentTarget, EquipmentSlot... equipmentSlots) { diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/EnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/EnchantmentType.java deleted file mode 100644 index 84ca236..0000000 --- a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/EnchantmentType.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mmodding.mmodding_lib.library.enchantments; - -import com.mmodding.mmodding_lib.library.items.settings.AdvancedItemSettings; -import net.minecraft.item.EnchantedBookItem; -import net.minecraft.item.Items; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import org.jetbrains.annotations.ApiStatus; - -@ApiStatus.Experimental -public record EnchantmentType(String name, Text prefix, EnchantedBookItem bookItem, boolean inEnchantingTable) { - - public static EnchantmentType DEFAULT = new EnchantmentType("default", Text.of(""), (EnchantedBookItem) Items.ENCHANTED_BOOK, true); - - public EnchantmentType { - if (bookItem instanceof CustomEnchantedBookItem customBookItem) { - customBookItem.setType(this); - } - } - - public static EnchantmentType createWithCustomBook(String name, Text prefix, boolean inEnchantingTable, Identifier bookIdentifier, AdvancedItemSettings bookSettings) { - CustomEnchantedBookItem enchantedBookItem = new CustomEnchantedBookItem(bookSettings); - enchantedBookItem.register(bookIdentifier); - return new EnchantmentType(name, prefix, enchantedBookItem, inEnchantingTable); - } -} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/DefaultEnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/DefaultEnchantmentType.java new file mode 100644 index 0000000..4b1017e --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/DefaultEnchantmentType.java @@ -0,0 +1,25 @@ +package com.mmodding.mmodding_lib.library.enchantments.types; + +import net.minecraft.item.EnchantedBookItem; +import net.minecraft.item.Items; +import net.minecraft.text.Text; + +public class DefaultEnchantmentType implements EnchantmentType { + + DefaultEnchantmentType() {} + + @Override + public String getQualifier() { + return "default"; + } + + @Override + public Text getPrefix() { + return Text.of(""); + } + + @Override + public EnchantedBookItem getEnchantedBook() { + return (EnchantedBookItem) Items.ENCHANTED_BOOK; + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/EnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/EnchantmentType.java new file mode 100644 index 0000000..2b8e022 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/EnchantmentType.java @@ -0,0 +1,59 @@ +package com.mmodding.mmodding_lib.library.enchantments.types; + +import com.mmodding.mmodding_lib.library.enchantments.CustomEnchantedBookItem; +import com.mmodding.mmodding_lib.library.items.settings.AdvancedItemSettings; +import com.mmodding.mmodding_lib.library.utils.FilterList; +import net.minecraft.item.EnchantedBookItem; +import net.minecraft.item.Item; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; + +public interface EnchantmentType { + + EnchantmentType DEFAULT = new DefaultEnchantmentType(); + + static EnchantmentType of(String qualifier, Text prefix) { + return EnchantmentType.of(qualifier, prefix, new AdvancedItemSettings().maxCount(1).rarity(Rarity.UNCOMMON)); + } + + static EnchantmentType of(String qualifier, Text prefix, boolean inEnchantingTable) { + return new TableExclusionEnchantmentType(qualifier, prefix, new AdvancedItemSettings().maxCount(1).rarity(Rarity.UNCOMMON), inEnchantingTable); + } + + static EnchantmentType of(String qualifier, Text prefix, boolean inEnchantingTable, FilterList filter) { + return new FilteredEnchantmentType(qualifier, prefix, new AdvancedItemSettings().maxCount(1).rarity(Rarity.UNCOMMON), inEnchantingTable, filter); + } + + static EnchantmentType of(String qualifier, Text prefix, Item.Settings enchantedBookSettings) { + return new SimpleEnchantmentType(qualifier, prefix, enchantedBookSettings); + } + + static EnchantmentType of(String qualifier, Text prefix, Item.Settings enchantedBookSettings, boolean inEnchantingTable) { + return new TableExclusionEnchantmentType(qualifier, prefix, enchantedBookSettings, inEnchantingTable); + } + + static EnchantmentType of(String qualifier, Text prefix, Item.Settings enchantedBookSettings, boolean inEnchantingTable, FilterList filter) { + return new FilteredEnchantmentType(qualifier, prefix, enchantedBookSettings, inEnchantingTable, filter); + } + + String getQualifier(); + + Text getPrefix(); + + EnchantedBookItem getEnchantedBook(); + + default boolean isInEnchantingTable() { + return true; + } + + default FilterList typeCompatibilities() { + return FilterList.always(); + } + + default void register(Identifier identifier) { + if (this.getEnchantedBook() instanceof CustomEnchantedBookItem item) { + item.register(identifier); + } + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/FilteredEnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/FilteredEnchantmentType.java new file mode 100644 index 0000000..f907bd4 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/FilteredEnchantmentType.java @@ -0,0 +1,20 @@ +package com.mmodding.mmodding_lib.library.enchantments.types; + +import com.mmodding.mmodding_lib.library.utils.FilterList; +import net.minecraft.item.Item; +import net.minecraft.text.Text; + +public class FilteredEnchantmentType extends TableExclusionEnchantmentType { + + private final FilterList filterList; + + FilteredEnchantmentType(String qualifier, Text prefix, Item.Settings enchantedBookSettings, boolean inEnchantingTable, FilterList filterList) { + super(qualifier, prefix, enchantedBookSettings, inEnchantingTable); + this.filterList = filterList; + } + + @Override + public FilterList typeCompatibilities() { + return this.filterList; + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/SimpleEnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/SimpleEnchantmentType.java new file mode 100644 index 0000000..a46c447 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/SimpleEnchantmentType.java @@ -0,0 +1,34 @@ +package com.mmodding.mmodding_lib.library.enchantments.types; + +import com.mmodding.mmodding_lib.library.enchantments.CustomEnchantedBookItem; +import net.minecraft.item.EnchantedBookItem; +import net.minecraft.item.Item; +import net.minecraft.text.Text; + +public class SimpleEnchantmentType implements EnchantmentType { + + private final String qualifier; + private final Text prefix; + private final EnchantedBookItem enchantedBook; + + SimpleEnchantmentType(String qualifier, Text prefix, Item.Settings enchantedBookSettings) { + this.qualifier = qualifier; + this.prefix = prefix; + this.enchantedBook = new CustomEnchantedBookItem(this, enchantedBookSettings); + } + + @Override + public String getQualifier() { + return this.qualifier; + } + + @Override + public Text getPrefix() { + return this.prefix; + } + + @Override + public EnchantedBookItem getEnchantedBook() { + return this.enchantedBook; + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/TableExclusionEnchantmentType.java b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/TableExclusionEnchantmentType.java new file mode 100644 index 0000000..e7783ea --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/enchantments/types/TableExclusionEnchantmentType.java @@ -0,0 +1,19 @@ +package com.mmodding.mmodding_lib.library.enchantments.types; + +import net.minecraft.item.Item; +import net.minecraft.text.Text; + +public class TableExclusionEnchantmentType extends SimpleEnchantmentType { + + private final boolean inEnchantingTable; + + TableExclusionEnchantmentType(String qualifier, Text prefix, Item.Settings enchantedBookSettings, boolean inEnchantingTable) { + super(qualifier, prefix, enchantedBookSettings); + this.inEnchantingTable = inEnchantingTable; + } + + @Override + public boolean isInEnchantingTable() { + return this.inEnchantingTable; + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/fluids/FluidGroup.java b/src/main/java/com/mmodding/mmodding_lib/library/fluids/FluidGroup.java index c4d0dab..1f5e084 100644 --- a/src/main/java/com/mmodding/mmodding_lib/library/fluids/FluidGroup.java +++ b/src/main/java/com/mmodding/mmodding_lib/library/fluids/FluidGroup.java @@ -32,7 +32,7 @@ public FluidGroup(CustomFluid still, CustomFluid flowing, AbstractBlock.Settings this.still.getDefaultState().with(FlowableFluid.FALLING, Boolean.FALSE), value -> this.flowing.getDefaultState().with(FlowableFluid.LEVEL, value == 8 ? 8 : 8 - value).with(FlowableFluid.FALLING, value == 8 ? Boolean.TRUE : Boolean.FALSE) ); - this.bucket = new CustomBucketItem(this.still, itemSettings); + this.bucket = itemSettings != null ? new CustomBucketItem(this.still, itemSettings) : null; } public CustomFluid getStill() { diff --git a/src/main/java/com/mmodding/mmodding_lib/library/utils/BlackList.java b/src/main/java/com/mmodding/mmodding_lib/library/utils/BlackList.java new file mode 100644 index 0000000..eb9ca07 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/utils/BlackList.java @@ -0,0 +1,18 @@ +package com.mmodding.mmodding_lib.library.utils; + +import java.util.List; + +public class BlackList implements FilterList { + + private final List elements; + + @SafeVarargs + public BlackList(E... elements) { + this.elements = List.of(elements); + } + + @Override + public boolean check(E element) { + return !this.elements.contains(element); + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/utils/FilterList.java b/src/main/java/com/mmodding/mmodding_lib/library/utils/FilterList.java new file mode 100644 index 0000000..ed02b5d --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/utils/FilterList.java @@ -0,0 +1,14 @@ +package com.mmodding.mmodding_lib.library.utils; + +public interface FilterList { + + static FilterList always() { + return element -> true; + } + + static FilterList never() { + return element -> false; + } + + boolean check(E element); +} diff --git a/src/main/java/com/mmodding/mmodding_lib/library/utils/WhiteList.java b/src/main/java/com/mmodding/mmodding_lib/library/utils/WhiteList.java new file mode 100644 index 0000000..63d5af1 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/library/utils/WhiteList.java @@ -0,0 +1,18 @@ +package com.mmodding.mmodding_lib.library.utils; + +import java.util.List; + +public class WhiteList implements FilterList { + + private final List elements; + + @SafeVarargs + public WhiteList(E... elements) { + this.elements = List.of(elements); + } + + @Override + public boolean check(E element) { + return this.elements.contains(element); + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/AnvilScreenHandlerMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/AnvilScreenHandlerMixin.java new file mode 100644 index 0000000..be6bb14 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/AnvilScreenHandlerMixin.java @@ -0,0 +1,24 @@ +package com.mmodding.mmodding_lib.mixin.injectors; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mmodding.mmodding_lib.library.enchantments.CustomEnchantedBookItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.AnvilScreenHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(AnvilScreenHandler.class) +public class AnvilScreenHandlerMixin { + + @WrapOperation(method = "updateResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z", ordinal = 0)) + private boolean updateResultFirst(ItemStack stack, Item item, Operation original) { + return stack.getItem() instanceof CustomEnchantedBookItem || original.call(stack, item); + } + + @WrapOperation(method = "updateResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z", ordinal = 2)) + private boolean updateResultSecond(ItemStack stack, Item item, Operation original) { + return stack.getItem() instanceof CustomEnchantedBookItem || original.call(stack, item); + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantedBookItemMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantedBookItemMixin.java new file mode 100644 index 0000000..da3bc21 --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantedBookItemMixin.java @@ -0,0 +1,23 @@ +package com.mmodding.mmodding_lib.mixin.injectors; + +import com.google.common.collect.Iterators; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.mmodding.mmodding_lib.library.enchantments.CustomEnchantment; +import com.mmodding.mmodding_lib.library.enchantments.types.EnchantmentType; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.EnchantedBookItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.Iterator; + +@Mixin(EnchantedBookItem.class) +public class EnchantedBookItemMixin { + + @ModifyExpressionValue(method = "appendStacks", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/registry/Registry;iterator()Ljava/util/Iterator;")) + private Iterator appendStacks(Iterator original) { + return Iterators.filter( + original, enchantment -> !(enchantment instanceof CustomEnchantment customEnchantment) || customEnchantment.getType() == EnchantmentType.DEFAULT + ); + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentHelperMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentHelperMixin.java index e0f0fef..25d4b10 100644 --- a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentHelperMixin.java +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentHelperMixin.java @@ -21,7 +21,7 @@ public class EnchantmentHelperMixin { @Inject(method = "getPossibleEntries", at = @At(value = "INVOKE", target = "Ljava/util/List;add(Ljava/lang/Object;)Z", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true) private static void getPossibleEntries(int power, ItemStack stack, boolean treasureAllowed, CallbackInfoReturnable> cir, List list, Item item, boolean bl, Iterator iterator, Enchantment enchantment, int i) { if (enchantment instanceof CustomEnchantment customEnchantment) { - if (!customEnchantment.getType().inEnchantingTable()) { + if (!customEnchantment.getType().isInEnchantingTable()) { if (iterator.hasNext()) iterator.next(); cir.setReturnValue(list); } } diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentMixin.java new file mode 100644 index 0000000..e158e0f --- /dev/null +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/EnchantmentMixin.java @@ -0,0 +1,25 @@ +package com.mmodding.mmodding_lib.mixin.injectors; + +import com.mmodding.mmodding_lib.library.enchantments.CustomEnchantment; +import com.mmodding.mmodding_lib.library.enchantments.types.EnchantmentType; +import com.mmodding.mmodding_lib.library.utils.Self; +import net.minecraft.enchantment.Enchantment; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Enchantment.class) +public class EnchantmentMixin implements Self { + + @Inject(method = "canCombine", at = @At("HEAD"), cancellable = true) + private void canCombine(Enchantment other, CallbackInfoReturnable cir) { + EnchantmentType thisType = this.getObject() instanceof CustomEnchantment enchantment ? enchantment.getType() : EnchantmentType.DEFAULT; + EnchantmentType otherType = other instanceof CustomEnchantment enchantment ? enchantment.getType() : EnchantmentType.DEFAULT; + if (thisType != otherType) { + if (!thisType.typeCompatibilities().check(otherType) || !otherType.typeCompatibilities().check(thisType)) { + cir.setReturnValue(false); + } + } + } +} diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/ExplosionMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/ExplosionMixin.java index 3891ca2..61a8324 100644 --- a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/ExplosionMixin.java +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/ExplosionMixin.java @@ -1,5 +1,7 @@ package com.mmodding.mmodding_lib.mixin.injectors; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mmodding.mmodding_lib.library.MModdingDamageSources; import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; @@ -7,7 +9,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(Explosion.class) public abstract class ExplosionMixin { @@ -15,11 +16,8 @@ public abstract class ExplosionMixin { @Shadow public abstract DamageSource getDamageSource(); - @Redirect(method = "collectBlocksAndDamageEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z")) - private boolean injected(Entity entity, DamageSource source, float amount) { - if (this.getDamageSource() != MModdingDamageSources.PUSH) { - return entity.damage(source, amount); - } - return false; + @WrapOperation(method = "collectBlocksAndDamageEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z")) + private boolean injected(Entity entity, DamageSource source, float amount, Operation original) { + return this.getDamageSource() != MModdingDamageSources.PUSH ? original.call(entity, source, amount) : false; } } diff --git a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/client/FishingBobberEntityRendererMixin.java b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/client/FishingBobberEntityRendererMixin.java index 54eeb74..b0343b2 100644 --- a/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/client/FishingBobberEntityRendererMixin.java +++ b/src/main/java/com/mmodding/mmodding_lib/mixin/injectors/client/FishingBobberEntityRendererMixin.java @@ -1,18 +1,19 @@ package com.mmodding.mmodding_lib.mixin.injectors.client; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.mmodding.mmodding_lib.library.items.CustomFishingRodItem; import net.minecraft.client.render.entity.FishingBobberEntityRenderer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(FishingBobberEntityRenderer.class) public class FishingBobberEntityRendererMixin { - @Redirect(method = "render(Lnet/minecraft/entity/projectile/FishingBobberEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z")) - private boolean render(ItemStack itemStack, Item item) { - return itemStack.getItem() instanceof CustomFishingRodItem || itemStack.isOf(item); + @WrapOperation(method = "render(Lnet/minecraft/entity/projectile/FishingBobberEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z")) + private boolean render(ItemStack stack, Item item, Operation original) { + return original.call(stack, item) || stack.getItem() instanceof CustomFishingRodItem; } } diff --git a/src/main/resources/mmodding_lib.mixins.json b/src/main/resources/mmodding_lib.mixins.json index 305b3bc..48f21d3 100644 --- a/src/main/resources/mmodding_lib.mixins.json +++ b/src/main/resources/mmodding_lib.mixins.json @@ -29,13 +29,16 @@ "injectors.AbstractBlockMixin", "injectors.AbstractBlockSettingsMixin", "injectors.AbstractFireBlockMixin", + "injectors.AnvilScreenHandlerMixin", "injectors.BlockMixin", "injectors.BootStrapMixin", "injectors.BuiltinChunkGeneratorsMixin", "injectors.CauldronBehaviorMixin", "injectors.ChunkNoiseSamplerMixin", "injectors.CraftingScreenHandlerMixin", + "injectors.EnchantedBookItemMixin", "injectors.EnchantmentHelperMixin", + "injectors.EnchantmentMixin", "injectors.EntityMixin", "injectors.ExplosionMixin", "injectors.FallingBlockEntityMixin",