Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at create-6.0 39 lines 1.7 kB view raw
1package net.lerariemann.infinity.options; 2 3import net.lerariemann.infinity.util.core.NbtUtils; 4import net.minecraft.entity.effect.InstantStatusEffect; 5import net.minecraft.entity.effect.StatusEffect; 6import net.minecraft.entity.effect.StatusEffectInstance; 7import net.minecraft.nbt.NbtCompound; 8import net.minecraft.registry.Registries; 9import net.minecraft.registry.RegistryKey; 10import net.minecraft.registry.RegistryKeys; 11import net.minecraft.registry.entry.RegistryEntry; 12import net.minecraft.server.network.ServerPlayerEntity; 13import net.minecraft.util.Identifier; 14 15public record EffectGiver(RegistryEntry<StatusEffect> id, int duration, int amplifier, int cooldown) { 16 public static RegistryEntry<StatusEffect> effectOf(String id) { 17 RegistryEntry<StatusEffect> entry = Registries.STATUS_EFFECT.entryOf(RegistryKey.of(RegistryKeys.STATUS_EFFECT, new Identifier(id))); 18 if (entry == null || entry.value() instanceof InstantStatusEffect) return null; 19 return entry; 20 } 21 22 public static EffectGiver of(NbtCompound data) { 23 if (data.contains("id")) return new EffectGiver(effectOf(data.getString("id")), 24 NbtUtils.getInt(data, "duration", 300), 25 NbtUtils.getInt(data, "amplifier", 0), 26 Math.min(NbtUtils.getInt(data, "cooldown", 100), 100)); 27 return new EffectGiver(null, 0,0,200); 28 } 29 30 public void tryGiveEffect(ServerPlayerEntity player) { 31 if (!isEmpty() && player.getWorld().getTime() % cooldown == 0) { 32 player.addStatusEffect(new StatusEffectInstance(id.value(), duration, amplifier)); 33 } 34 } 35 36 public boolean isEmpty() { 37 return id == null; 38 } 39}