Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 49 lines 2.0 kB view raw
1package net.lerariemann.infinity.options; 2 3import net.lerariemann.infinity.util.VersionMethods; 4import net.lerariemann.infinity.util.core.NbtUtils; 5import net.minecraft.core.Holder; 6import net.minecraft.core.registries.BuiltInRegistries; 7import net.minecraft.core.registries.Registries; 8import net.minecraft.nbt.CompoundTag; 9import net.minecraft.resources.ResourceKey; 10import net.minecraft.server.level.ServerPlayer; 11import net.minecraft.world.effect.InstantenousMobEffect; 12import net.minecraft.world.effect.MobEffect; 13import net.minecraft.world.effect.MobEffectInstance; 14 15import java.util.Optional; 16 17public record EffectGiver(Holder<MobEffect> id, int duration, int amplifier, int cooldown) { 18 public static Holder<MobEffect> effectOf(String id) { 19 Optional<Holder.Reference<MobEffect>> entry = BuiltInRegistries.MOB_EFFECT 20 //? if >1.21.2 { 21 .get(ResourceKey.create(Registries.MOB_EFFECT, VersionMethods.id(id))); 22 //?} else { 23 /*.getHolder(ResourceKey.create(Registries.MOB_EFFECT, VersionMethods.id(id))); 24 *///?} 25 if (entry.isEmpty() || entry.get().value() instanceof InstantenousMobEffect) return null; 26 return entry.get(); 27 } 28 29 public static EffectGiver of(CompoundTag data) { 30 if (data.contains("id")) return new EffectGiver(effectOf(NbtUtils.getString(data, "id")), 31 NbtUtils.getInt(data, "duration", 300), 32 NbtUtils.getInt(data, "amplifier", 0), 33 Math.min(NbtUtils.getInt(data, "cooldown", 100), 100)); 34 return new EffectGiver(null, 0,0,200); 35 } 36 37 public void tryGiveEffect(ServerPlayer player) { 38 if (!isEmpty() && player.level().getGameTime() % cooldown == 0) { 39 player.addEffect(new MobEffectInstance(id 40 //? if <1.21 41 /*.value()*/ 42 , duration, amplifier)); 43 } 44 } 45 46 public boolean isEmpty() { 47 return id == null; 48 } 49}