Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
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}