From dcf41398a1e8ce1717cbc6b1f58e615d3366e4cd Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 25 Apr 2020 23:22:43 +0200 Subject: [PATCH] Changed how overrides are done so they break fewer things --- .../com/minelittlepony/unicopia/TreeType.java | 3 ++- .../unicopia/item/AppleItem.java | 2 +- .../unicopia/item/ExtendedShearsItem.java | 4 +-- .../minelittlepony/unicopia/item/UItems.java | 14 +++-------- .../unicopia/item/VanillaOverrides.java | 23 +++++++++++++++++ .../unicopia/item/ZapAppleItem.java | 8 ++++-- .../unicopia/mixin/MixinItems.java | 25 +++++++++++++++++++ src/main/resources/unicopia.mixin.json | 1 + 8 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java diff --git a/src/main/java/com/minelittlepony/unicopia/TreeType.java b/src/main/java/com/minelittlepony/unicopia/TreeType.java index 577df70d..ef78f6b9 100644 --- a/src/main/java/com/minelittlepony/unicopia/TreeType.java +++ b/src/main/java/com/minelittlepony/unicopia/TreeType.java @@ -14,6 +14,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -25,7 +26,7 @@ public final class TreeType { public static final TreeType OAK = new TreeType("oak", new Weighted>() .put(1, () -> new ItemStack(UItems.ROTTEN_APPLE)) .put(2, () -> new ItemStack(UItems.GREEN_APPLE)) - .put(3, () -> new ItemStack(UItems.VanillaOverrides.APPLE)), Blocks.OAK_LOG, Blocks.OAK_LEAVES); + .put(3, () -> new ItemStack(Items.APPLE)), Blocks.OAK_LOG, Blocks.OAK_LEAVES); public static final TreeType BIRCH = new TreeType("birch", new Weighted>() .put(1, () -> new ItemStack(UItems.ROTTEN_APPLE)) .put(2, () -> new ItemStack(UItems.SWEET_APPLE)) diff --git a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java index 0cbc1974..a1fcb5fb 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java @@ -27,7 +27,7 @@ public class AppleItem extends Item implements ItemEntityCapabilities.TickableIt public ActionResult onGroundTick(IItemEntity item) { ItemEntity entity = item.get().getOwner(); - if (!entity.removed && item.getAge() > item.getPickupDelay()) { + if (!entity.removed && item.getPickupDelay() == 0 && item.getAge() > 200230 && entity.world.random.nextInt(200) < 10) { if (!entity.world.isClient) { entity.remove(); diff --git a/src/main/java/com/minelittlepony/unicopia/item/ExtendedShearsItem.java b/src/main/java/com/minelittlepony/unicopia/item/ExtendedShearsItem.java index ad24fc0c..cc25579b 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ExtendedShearsItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ExtendedShearsItem.java @@ -22,7 +22,7 @@ public class ExtendedShearsItem extends ShearsItem { public ExtendedShearsItem(Settings settings) { super(settings); final Optional vanillaDispenserBehaviour = Dispensable.getBehavior(new ItemStack(Items.SHEARS)); - DispenserBlock.registerBehavior(Items.SHEARS, Dispensable.setDispenseable(this, (source, stack) -> { + /*DispenserBlock.registerBehavior(Items.SHEARS,*/ Dispensable.setDispenseable(this, (source, stack) -> { BlockPos pos = source.getBlockPos().offset(source.getBlockState().get(DispenserBlock.FACING)); World w = source.getWorld(); @@ -38,7 +38,7 @@ public class ExtendedShearsItem extends ShearsItem { return TypedActionResult.pass(action.dispense(source, stack)); }) .orElseGet(() -> TypedActionResult.fail(stack)); - })); + })/*)*/; } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 15dfd196..0afedd9b 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -163,6 +163,9 @@ public interface UItems { Item BUTTERFLY_SPAWN_EGG = register(new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Settings().group(ItemGroup.MISC)), "butterfly_spawn_egg"); static T register(T item, String name) { + if (item instanceof BlockItem) { + ((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item); + } return Registry.ITEM.add(new Identifier("unicopia", name), item); } @@ -181,15 +184,4 @@ public interface UItems { Toxics.bootstrap(); } - - interface VanillaOverrides { - StickItem STICK = register(new StickItem(new Item.Settings().group(ItemGroup.MATERIALS)), Items.STICK); - ExtendedShearsItem SHEARS = register(new ExtendedShearsItem(new Item.Settings().maxDamage(238).group(ItemGroup.TOOLS)), Items.SHEARS); - - AppleItem APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), Items.APPLE); - - static T register(T newItem, Item oldItem) { - return Registry.ITEM.set(Registry.ITEM.getRawId(oldItem), Registry.ITEM.getId(oldItem), newItem); - } - } } diff --git a/src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java b/src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java new file mode 100644 index 00000000..f8915b42 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java @@ -0,0 +1,23 @@ +package com.minelittlepony.unicopia.item; + +import net.minecraft.item.FoodComponents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import net.minecraft.util.registry.SimpleRegistry; + +public final class VanillaOverrides { + + public static final Registry REGISTRY = new SimpleRegistry<>(); + + private static T register(String name, T newItem) { + return Registry.register(REGISTRY, new Identifier(name), newItem); + } + + static { + register("stick", new StickItem(new Item.Settings().group(ItemGroup.MATERIALS))); + register("shears", new ExtendedShearsItem(new Item.Settings().maxDamage(238).group(ItemGroup.TOOLS))); + register("apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + } +} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java index b82158f4..ab753323 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java @@ -34,7 +34,7 @@ import net.minecraft.world.World; public class ZapAppleItem extends AppleItem { private static final List ALIASABLE_ITEMS = Lists.newArrayList( - UItems.VanillaOverrides.APPLE, + Items.APPLE, UItems.GREEN_APPLE, UItems.SWEET_APPLE, UItems.SOUR_APPLE, @@ -96,7 +96,11 @@ public class ZapAppleItem extends AppleItem { public void appendStacks(ItemGroup tab, DefaultedList items) { super.appendStacks(tab, items); if (isIn(tab)) { - ALIASABLE_ITEMS.forEach(item -> items.add(new ItemStack(item))); + ALIASABLE_ITEMS.forEach(item -> { + ItemStack stack = new ItemStack(this); + stack.getOrCreateTag().putString("appearance", Registry.ITEM.getId(item).toString()); + items.add(stack); + }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java new file mode 100644 index 00000000..938c9b0c --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java @@ -0,0 +1,25 @@ +package com.minelittlepony.unicopia.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +import com.minelittlepony.unicopia.item.VanillaOverrides; + +import net.minecraft.item.Item; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; + +@Mixin(Items.class) +abstract class MixinItems { + @ModifyVariable(method = "register(Lnet/minecraft/util/Identifier;Lnet/minecraft/item/Item;)Lnet/minecraft/item/Item;", + at = @At("HEAD"), + index = 1, + argsOnly = true) + private static Item modifyItem(Item item, Identifier id, Item itemAlso) { + if (VanillaOverrides.REGISTRY.containsId(id)) { + return VanillaOverrides.REGISTRY.get(id); + } + return item; + } +} diff --git a/src/main/resources/unicopia.mixin.json b/src/main/resources/unicopia.mixin.json index 918778f1..08ce4a4e 100644 --- a/src/main/resources/unicopia.mixin.json +++ b/src/main/resources/unicopia.mixin.json @@ -10,6 +10,7 @@ "MixinFarmlandBlock", "MixinHoeItem", "MixinItem", + "MixinItems", "MixinItemEntity", "MixinLivingEntity", "MixinPlayerEntity",