We no longer replace the vanilla apple item.

This commit is contained in:
Sollace 2022-03-26 23:51:34 +02:00
parent cbec2e2d96
commit abe8142482
16 changed files with 86 additions and 114 deletions

View file

@ -1,5 +1,6 @@
package com.minelittlepony.unicopia.entity; package com.minelittlepony.unicopia.entity;
import java.util.List;
import java.util.Random; import java.util.Random;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -113,8 +114,8 @@ public class ItemImpl implements Equine<ItemEntity>, Owned<ItemEntity> {
} }
} }
if (stack.getItem() instanceof TickableItem) { if (stack.getItem() instanceof GroundTickCallback) {
return ((TickableItem)stack.getItem()).onGroundTick(i) == ActionResult.SUCCESS; return ((GroundTickCallback)stack.getItem()).onGroundTick(i).isAccepted();
} }
} }
@ -165,7 +166,32 @@ public class ItemImpl implements Equine<ItemEntity>, Owned<ItemEntity> {
return owner; return owner;
} }
public interface TickableItem { public static <T extends Item> T registerTickCallback(T item, GroundTickCallback callback) {
((ItemImpl.TickableItem)item).addGroundTickCallback(callback);
return item;
}
public interface TickableItem extends GroundTickCallback {
List<GroundTickCallback> getCallbacks();
default void addGroundTickCallback(GroundTickCallback callback) {
getCallbacks().add(callback);
}
@Override
default ActionResult onGroundTick(IItemEntity entity) {
for (var callback : getCallbacks()) {
ActionResult result = callback.onGroundTick(entity);
if (result.isAccepted()) {
return result;
}
}
return ActionResult.PASS;
}
}
public interface GroundTickCallback {
ActionResult onGroundTick(IItemEntity entity); ActionResult onGroundTick(IItemEntity entity);
} }

View file

@ -11,7 +11,6 @@ import com.minelittlepony.unicopia.AwaitTickQueue;
import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.entity.IItemEntity; import com.minelittlepony.unicopia.entity.IItemEntity;
import com.minelittlepony.unicopia.entity.ItemImpl; import com.minelittlepony.unicopia.entity.ItemImpl;
import com.minelittlepony.unicopia.entity.ItemImpl.TickableItem;
import com.minelittlepony.unicopia.entity.effect.UEffects; import com.minelittlepony.unicopia.entity.effect.UEffects;
import com.minelittlepony.unicopia.entity.player.MagicReserves; import com.minelittlepony.unicopia.entity.player.MagicReserves;
import com.minelittlepony.unicopia.entity.player.PlayerCharmTracker; import com.minelittlepony.unicopia.entity.player.PlayerCharmTracker;
@ -47,7 +46,7 @@ import net.minecraft.world.LocalDifficulty;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.explosion.Explosion.DestructionType; import net.minecraft.world.explosion.Explosion.DestructionType;
public class AlicornAmuletItem extends AmuletItem implements PlayerCharmTracker.Charm, ItemImpl.ClingyItem, TickableItem { public class AlicornAmuletItem extends AmuletItem implements PlayerCharmTracker.Charm, ItemImpl.ClingyItem, ItemImpl.GroundTickCallback {
public AlicornAmuletItem(FabricItemSettings settings) { public AlicornAmuletItem(FabricItemSettings settings) {
super(settings, 0, new AmuletItem.ModifiersBuilder() super(settings, 0, new AmuletItem.ModifiersBuilder()

View file

@ -1,33 +1,28 @@
package com.minelittlepony.unicopia.item; package com.minelittlepony.unicopia.item;
import java.util.List;
import org.jetbrains.annotations.Nullable;
import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.USounds;
import com.minelittlepony.unicopia.entity.IItemEntity; import com.minelittlepony.unicopia.entity.IItemEntity;
import com.minelittlepony.unicopia.entity.ItemImpl; import com.minelittlepony.unicopia.entity.ItemImpl;
import com.minelittlepony.unicopia.item.toxin.Toxicity;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.Entity.RemovalReason; import net.minecraft.entity.Entity.RemovalReason;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.ItemEntity; import net.minecraft.entity.ItemEntity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.particle.ParticleTypes; import net.minecraft.particle.ParticleTypes;
import net.minecraft.text.Text;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
public class AppleItem extends Item implements ItemImpl.TickableItem { public class AppleItem {
private static final ItemImpl.GroundTickCallback TICK_CALLBACK = AppleItem::onGroundTick;
public AppleItem(Settings settings) { private AppleItem() { }
super(settings);
public static <T extends Item> T registerTickCallback(T item) {
return ItemImpl.registerTickCallback(item, TICK_CALLBACK);
} }
@Override private static ActionResult onGroundTick(IItemEntity item) {
public ActionResult onGroundTick(IItemEntity item) {
ItemEntity entity = item.get().getMaster(); ItemEntity entity = item.get().getMaster();
if (!entity.isRemoved() && item.getPickupDelay() == 0 && item.getAge() > 2030 && entity.world.random.nextInt(150) < 10) { if (!entity.isRemoved() && item.getPickupDelay() == 0 && item.getAge() > 2030 && entity.world.random.nextInt(150) < 10) {
@ -62,13 +57,4 @@ public class AppleItem extends Item implements ItemImpl.TickableItem {
return ActionResult.PASS; return ActionResult.PASS;
} }
@Override
public void appendTooltip(ItemStack stack, @Nullable World worldIn, List<Text> tooltip, TooltipContext context) {
tooltip.add(getToxicity(stack).getTooltip());
}
public Toxicity getToxicity(ItemStack stack) {
return Toxicity.SAFE;
}
} }

View file

@ -29,7 +29,7 @@ public class DrinkableItem extends Item {
stack.decrement(1); stack.decrement(1);
} }
((ToxicHolder)this).getToxic().ifPresent(t -> t.finishUsing(stack, world, user)); ((ToxicHolder)this).getToxic(stack).ifPresent(t -> t.finishUsing(stack, world, user));
return stack.isEmpty() ? new ItemStack(getRecipeRemainder()) : stack; return stack.isEmpty() ? new ItemStack(getRecipeRemainder()) : stack;
} }

View file

@ -33,7 +33,7 @@ import net.minecraft.world.Heightmap;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.WorldEvents; import net.minecraft.world.WorldEvents;
public class JarItem extends Item implements ProjectileDelegate, ItemImpl.TickableItem { public class JarItem extends Item implements ProjectileDelegate, ItemImpl.GroundTickCallback {
private final boolean rain; private final boolean rain;
private final boolean thunder; private final boolean thunder;

View file

@ -1,19 +1,12 @@
package com.minelittlepony.unicopia.item; package com.minelittlepony.unicopia.item;
import com.minelittlepony.unicopia.entity.IItemEntity;
import net.fabricmc.fabric.api.registry.FuelRegistry; import net.fabricmc.fabric.api.registry.FuelRegistry;
import net.minecraft.util.ActionResult; import net.minecraft.item.Item;
public class RottenAppleItem extends AppleItem { public class RottenAppleItem extends Item {
public RottenAppleItem(Settings settings) { public RottenAppleItem(Settings settings) {
super(settings); super(settings);
FuelRegistry.INSTANCE.add(this, 150); FuelRegistry.INSTANCE.add(this, 150);
} }
@Override
public ActionResult onGroundTick(IItemEntity item) {
return ActionResult.PASS;
}
} }

View file

@ -6,6 +6,7 @@ import com.minelittlepony.unicopia.item.toxin.ToxicHolder;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.collection.DefaultedList;
@ -13,7 +14,7 @@ import net.minecraft.util.registry.Registry;
public interface UItemGroups { public interface UItemGroups {
ItemGroup ALL_ITEMS = FabricItemGroupBuilder.create(new Identifier("unicopia", "items")).appendItems(list -> { ItemGroup ALL_ITEMS = FabricItemGroupBuilder.create(new Identifier("unicopia", "items")).appendItems(list -> {
list.addAll(VanillaOverrides.REGISTRY.stream().map(Item::getDefaultStack).collect(Collectors.toList())); list.add(Items.APPLE.getDefaultStack());
DefaultedList<ItemStack> defs = DefaultedList.of(); DefaultedList<ItemStack> defs = DefaultedList.of();
UItems.ITEMS.stream() UItems.ITEMS.stream()
@ -25,8 +26,8 @@ public interface UItemGroups {
}).icon(UItems.EMPTY_JAR::getDefaultStack).build(); }).icon(UItems.EMPTY_JAR::getDefaultStack).build();
ItemGroup HORSE_FEED = FabricItemGroupBuilder.create(new Identifier("unicopia", "horsefeed")).appendItems(list -> { ItemGroup HORSE_FEED = FabricItemGroupBuilder.create(new Identifier("unicopia", "horsefeed")).appendItems(list -> {
list.addAll(Registry.ITEM.stream() list.addAll(Registry.ITEM.stream()
.filter(item -> item instanceof ToxicHolder && ((ToxicHolder)item).getToxic().isPresent())
.map(Item::getDefaultStack) .map(Item::getDefaultStack)
.filter(item -> item.getItem() instanceof ToxicHolder && ((ToxicHolder)item.getItem()).getToxic(item).isPresent())
.collect(Collectors.toList())); .collect(Collectors.toList()));
}).icon(UItems.ZAP_APPLE::getDefaultStack).build(); }).icon(UItems.ZAP_APPLE::getDefaultStack).build();

View file

@ -28,14 +28,14 @@ public interface UItems {
List<Item> ITEMS = new ArrayList<>(); List<Item> ITEMS = new ArrayList<>();
AppleItem GREEN_APPLE = register("green_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item GREEN_APPLE = register("green_apple", AppleItem.registerTickCallback(new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))));
AppleItem SWEET_APPLE = register("sweet_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item SWEET_APPLE = register("sweet_apple", AppleItem.registerTickCallback(new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))));
AppleItem SOUR_APPLE = register("sour_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item SOUR_APPLE = register("sour_apple", AppleItem.registerTickCallback(new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))));
ZapAppleItem ZAP_APPLE = register("zap_apple", new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE))); ZapAppleItem ZAP_APPLE = register("zap_apple", AppleItem.registerTickCallback(new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE))));
AppleItem ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)));
AppleItem COOKED_ZAP_APPLE = register("cooked_zap_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item COOKED_ZAP_APPLE = register("cooked_zap_apple", new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)));
Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE); Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE);
Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET); Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET);
@ -114,6 +114,8 @@ public interface UItems {
} }
static void bootstrap() { static void bootstrap() {
AppleItem.registerTickCallback(Items.APPLE);
UEnchantments.bootstrap(); UEnchantments.bootstrap();
URecipes.bootstrap(); URecipes.bootstrap();
UItemGroups.bootstrap(); UItemGroups.bootstrap();

View file

@ -1,22 +0,0 @@
package com.minelittlepony.unicopia.item;
import com.minelittlepony.unicopia.util.Registries;
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;
public final class VanillaOverrides {
public static final Registry<Item> REGISTRY = Registries.createSimple(new Identifier("unicopia", "overrides"));
private static <T extends Item> T register(String name, T newItem) {
return Registry.register(REGISTRY, new Identifier(name), newItem);
}
static {
register("apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)));
}
}

View file

@ -1,11 +1,16 @@
package com.minelittlepony.unicopia.item; package com.minelittlepony.unicopia.item;
import static com.minelittlepony.unicopia.item.toxin.Toxin.INNERT;
import java.util.Optional; import java.util.Optional;
import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.UTags;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.advancement.UCriteria;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.item.toxin.Ailment;
import com.minelittlepony.unicopia.item.toxin.Toxic;
import com.minelittlepony.unicopia.item.toxin.ToxicHolder;
import com.minelittlepony.unicopia.item.toxin.Toxicity; import com.minelittlepony.unicopia.item.toxin.Toxicity;
import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.ParticleUtils;
import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.particle.UParticles;
@ -21,6 +26,7 @@ import net.minecraft.entity.mob.CreeperEntity;
import net.minecraft.entity.passive.PigEntity; import net.minecraft.entity.passive.PigEntity;
import net.minecraft.entity.passive.VillagerEntity; import net.minecraft.entity.passive.VillagerEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.predicate.entity.EntityPredicates;
@ -37,7 +43,9 @@ import net.minecraft.util.registry.Registry;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.event.GameEvent; import net.minecraft.world.event.GameEvent;
public class ZapAppleItem extends AppleItem implements ChameleonItem { public class ZapAppleItem extends Item implements ChameleonItem, ToxicHolder {
private static final Optional<Toxic> TOXIC = Optional.of(new Toxic.Builder(Ailment.of(Toxicity.SEVERE, INNERT)).build("zap"));
private static final Optional<Toxic> HIDDEN_TOXIC = Optional.of(new Toxic.Builder(Ailment.of(Toxicity.SAFE, INNERT)).build("zap_hidden"));
public ZapAppleItem(Settings settings) { public ZapAppleItem(Settings settings) {
super(settings); super(settings);
@ -128,8 +136,8 @@ public class ZapAppleItem extends AppleItem implements ChameleonItem {
} }
@Override @Override
public Toxicity getToxicity(ItemStack stack) { public Optional<Toxic> getToxic(ItemStack stack) {
return hasAppearance(stack) ? Toxicity.SEVERE : Toxicity.SAFE; return hasAppearance(stack) ? TOXIC : HIDDEN_TOXIC;
} }
@Override @Override

View file

@ -2,8 +2,10 @@ package com.minelittlepony.unicopia.item.toxin;
import java.util.Optional; import java.util.Optional;
import net.minecraft.item.ItemStack;
public interface ToxicHolder { public interface ToxicHolder {
default Optional<Toxic> getToxic() { default Optional<Toxic> getToxic(ItemStack stack) {
return Optional.empty(); return Optional.empty();
} }
} }

View file

@ -18,14 +18,14 @@ abstract class MixinBlockItem extends Item implements ToxicHolder {
@Override @Override
public UseAction getUseAction(ItemStack stack) { public UseAction getUseAction(ItemStack stack) {
return getToxic() return getToxic(stack)
.map(t -> t.getUseAction(stack)) .map(t -> t.getUseAction(stack))
.orElseGet(() -> super.getUseAction(stack)); .orElseGet(() -> super.getUseAction(stack));
} }
@Override @Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) { public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
return getToxic() return getToxic(player.getStackInHand(hand))
.map(t -> t.use(world, player, hand)) .map(t -> t.use(world, player, hand))
.orElseGet(() -> super.use(world, player, hand)); .orElseGet(() -> super.use(world, player, hand));
} }

View file

@ -1,11 +1,8 @@
package com.minelittlepony.unicopia.mixin; package com.minelittlepony.unicopia.mixin;
import java.io.OutputStream; import java.util.ArrayList;
import java.io.PrintStream; import java.util.List;
import java.io.StringWriter;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -15,12 +12,13 @@ import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.minelittlepony.unicopia.item.toxin.Toxic; import com.minelittlepony.unicopia.item.toxin.Toxic;
import com.minelittlepony.unicopia.item.toxin.ToxicHolder; import com.minelittlepony.unicopia.item.toxin.ToxicHolder;
import com.minelittlepony.unicopia.item.toxin.Toxics; import com.minelittlepony.unicopia.item.toxin.Toxics;
import com.minelittlepony.unicopia.entity.ItemImpl;
import com.minelittlepony.unicopia.entity.ItemImpl.GroundTickCallback;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.FoodComponent; import net.minecraft.item.FoodComponent;
@ -29,7 +27,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
@Mixin(Item.class) @Mixin(Item.class)
abstract class MixinItem implements ToxicHolder { abstract class MixinItem implements ToxicHolder, ItemImpl.TickableItem {
private boolean foodLoaded; private boolean foodLoaded;
@Nullable @Nullable
@ -38,8 +36,18 @@ abstract class MixinItem implements ToxicHolder {
@Shadow @Mutable @Shadow @Mutable
private @Final FoodComponent foodComponent; private @Final FoodComponent foodComponent;
private List<ItemImpl.GroundTickCallback> tickCallbacks;
@Override @Override
public Optional<Toxic> getToxic() { public List<GroundTickCallback> getCallbacks() {
if (tickCallbacks == null) {
tickCallbacks = new ArrayList<>();
}
return tickCallbacks;
}
@Override
public Optional<Toxic> getToxic(ItemStack stack) {
if (!foodLoaded) { if (!foodLoaded) {
foodLoaded = true; foodLoaded = true;
originalFoodComponent = ((Item)(Object)this).getFoodComponent(); originalFoodComponent = ((Item)(Object)this).getFoodComponent();
@ -63,6 +71,6 @@ abstract class MixinItem implements ToxicHolder {
@Inject(method = "finishUsing", at = @At("HEAD"), cancellable = true) @Inject(method = "finishUsing", at = @At("HEAD"), cancellable = true)
private void finishUsing(ItemStack stack, World world, LivingEntity entity, CallbackInfoReturnable<ItemStack> info) { private void finishUsing(ItemStack stack, World world, LivingEntity entity, CallbackInfoReturnable<ItemStack> info) {
getToxic().ifPresent(t -> t.finishUsing(stack, world, entity)); getToxic(stack).ifPresent(t -> t.finishUsing(stack, world, entity));
} }
} }

View file

@ -1,30 +0,0 @@
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;
import net.minecraft.util.registry.Registry;
@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) {
// Registry#containsId is client-only :thonkjang:
// TODO: Move onGroundTick() event to MixinItem and make it a registerable event so we don't have to do this
Item replacement = VanillaOverrides.REGISTRY.get(id);
if (replacement != null) {
Registry.register(Registry.ITEM, new Identifier("unicopia_overriden", id.getPath()), item);
return replacement;
}
return item;
}
}

View file

@ -21,6 +21,6 @@ import net.minecraft.world.World;
abstract class MixinItem implements ToxicHolder { abstract class MixinItem implements ToxicHolder {
@Inject(method = "appendTooltip", at = @At("RETURN")) @Inject(method = "appendTooltip", at = @At("RETURN"))
private void onAppendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context, CallbackInfo into) { private void onAppendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context, CallbackInfo into) {
getToxic().ifPresent(t -> t.getAilmentFor(MinecraftClient.getInstance().player).appendTooltip(tooltip, context)); getToxic(stack).ifPresent(t -> t.getAilmentFor(MinecraftClient.getInstance().player).appendTooltip(tooltip, context));
} }
} }

View file

@ -16,7 +16,6 @@
"MixinFallingBlockEntity", "MixinFallingBlockEntity",
"MixinItem", "MixinItem",
"MixinItemEntity", "MixinItemEntity",
"MixinItems",
"MixinLivingEntity", "MixinLivingEntity",
"MixinMilkBucketItem", "MixinMilkBucketItem",
"MixinMobEntity", "MixinMobEntity",