mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-20 03:44:23 +01:00
We no longer replace the vanilla apple item.
This commit is contained in:
parent
cbec2e2d96
commit
abe8142482
16 changed files with 86 additions and 114 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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)));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
"MixinFallingBlockEntity",
|
"MixinFallingBlockEntity",
|
||||||
"MixinItem",
|
"MixinItem",
|
||||||
"MixinItemEntity",
|
"MixinItemEntity",
|
||||||
"MixinItems",
|
|
||||||
"MixinLivingEntity",
|
"MixinLivingEntity",
|
||||||
"MixinMilkBucketItem",
|
"MixinMilkBucketItem",
|
||||||
"MixinMobEntity",
|
"MixinMobEntity",
|
||||||
|
|
Loading…
Reference in a new issue