Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 120 lines 4.1 kB view raw
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}