Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.item;
2
3import net.lerariemann.infinity.iridescence.Iridescence;
4import net.lerariemann.infinity.registry.core.ModComponentTypes;
5import net.lerariemann.infinity.registry.core.ModStatusEffects;
6import net.lerariemann.infinity.util.VersionMethods;
7import net.minecraft.advancements.CriteriaTriggers;
8import net.minecraft.network.chat.Component;
9import net.minecraft.server.level.ServerPlayer;
10import net.minecraft.stats.Stats;
11import net.minecraft.world.InteractionHand;
12import net.minecraft.world.InteractionResult;
13//? if >1.21.4 {
14
15import net.minecraft.world.item.component.TooltipDisplay;
16//?} else {
17/*import net.minecraft.world.InteractionResultHolder;
18import net.minecraft.world.item.UseAnim;
19*///?}
20import net.minecraft.world.effect.MobEffectInstance;
21import net.minecraft.world.entity.LivingEntity;
22import net.minecraft.world.entity.player.Player;
23import net.minecraft.world.item.*;
24import java.util.function.Consumer;
25//? if >1.21 {
26import net.minecraft.world.item.alchemy.PotionContents;
27//?} else {
28/*import net.minecraft.world.item.alchemy.PotionUtils;
29*///?}
30import net.minecraft.world.level.Level;
31import net.minecraft.world.level.gameevent.GameEvent;
32import java.util.List;
33
34public class IridescentPotionItem extends Item {
35 int level;
36
37 public IridescentPotionItem(Properties settings, int level) {
38 super(settings);
39 this.level = level;
40 }
41
42 @Override
43 public ItemStack finishUsingItem(ItemStack stack, Level world, LivingEntity user) {
44 if (!world.isClientSide()) Iridescence.tryBeginJourney(user, level, true);
45 if (user instanceof Player player) {
46 if (user instanceof ServerPlayer spe) {
47 CriteriaTriggers.CONSUME_ITEM.trigger(spe, stack);
48 }
49 player.awardStat(Stats.ITEM_USED.get(this));
50 VersionMethods.consumeWithRemainder(player, stack, Items.GLASS_BOTTLE.getDefaultInstance());
51 }
52 else if (stack.isEmpty()) {
53 return new ItemStack(Items.GLASS_BOTTLE);
54 }
55 user.gameEvent(GameEvent.DRINK);
56 return stack;
57 }
58
59 @Override
60 public int getUseDuration(ItemStack stack
61 //? if >1.21
62 , LivingEntity user
63 ) {
64 return 32;
65 }
66
67 //? if >1.21.4 {
68 @Override
69 public ItemUseAnimation getUseAnimation(ItemStack stack) {
70 return ItemUseAnimation.DRINK;
71 }
72 //?} else {
73 /*@Override
74 public UseAnim getUseAnimation(ItemStack stack) {
75 return UseAnim.DRINK;
76 }
77 *///?}
78
79
80 @Override
81 public
82 //? if >1.21.4 {
83 InteractionResult
84 //?} else {
85 /*InteractionResultHolder<ItemStack>
86 *///?}
87 use(Level world, Player user, InteractionHand hand) {
88 return ItemUtils.startUsingInstantly(world, user, hand);
89 }
90
91 @Override
92 public void appendHoverText(ItemStack stack,
93 //? if >1.21 {
94 TooltipContext
95 //?} else {
96 /*Level
97 *///?}
98 context,
99 //? if >1.21.4 {
100 TooltipDisplay display, Consumer<Component>tooltipAdder
101 //?} else {
102 /*List<Component> tooltip
103 *///?}
104 , TooltipFlag type) {
105 int level = VersionMethods.getOrDefaultInt(stack, ModComponentTypes.CHARGE, this.level);
106 List<MobEffectInstance> effects = List.of(new MobEffectInstance(ModStatusEffects.IRIDESCENT_EFFECT
107 //? if <1.21
108 /*.value()*/
109 ,
110 Iridescence.getFullEffectLength(level), level));
111 //? if <1.21.4 {
112 /*Consumer<Component> tooltipAdder = tooltip::add;
113 *///?}
114 //? if >1.21 {
115 PotionContents.addPotionTooltip(effects, tooltipAdder, 1.0F, context.tickRate());
116 //?} else {
117 /*PotionUtils.addPotionTooltip(effects, tooltip, 1.0F);
118 *///?}
119 }
120}