Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.access;
2
3import net.lerariemann.infinity.util.InfinityMethods;
4import net.lerariemann.infinity.util.VersionMethods;
5import net.lerariemann.infinity.util.core.RandomProvider;
6import net.lerariemann.infinity.util.teleport.WarpLogic;
7import net.minecraft.core.Holder;
8import net.minecraft.core.Registry;
9import net.minecraft.core.registries.Registries;
10import net.minecraft.server.level.ServerPlayer;
11import net.minecraft.world.damagesource.DamageSource;
12import net.minecraft.world.damagesource.DamageType;
13import net.lerariemann.infinity.registry.var.ModCriteria;
14
15public interface Timebombable {
16 void infinity$timebomb();
17 boolean infinity$tryRestore();
18
19 boolean infinity$isTimebombed();
20 int infinity$getTimebombProgress();
21
22 static int getCooldownTicks() {
23 int i = RandomProvider.ruleInt("resetChargeCooldown");
24 if (i <= 0) i = Integer.MAX_VALUE;
25 return i;
26 }
27
28 default void tickTimebombProgress(ServerPlayer player) {
29 int i = infinity$getTimebombProgress();
30 if (i > 3540) {
31 WarpLogic.respawnAlive(player);
32 }
33 else if (i > 3500) {
34 ModCriteria.WHO_REMAINS.get().trigger(player);
35 }
36 else if (i > 200) {
37 if (i%4 == 0) {
38 Registry<DamageType> r = VersionMethods.getRegistry(player.level().getServer().registryAccess(), Registries.DAMAGE_TYPE);
39 Holder<DamageType> entry = r.wrapAsHolder(VersionMethods.getFromRegistry(r, InfinityMethods.getId("world_ceased")));
40 player.hurt(new DamageSource(entry), i > 400 ? 2.0f : 1.0f);
41 }
42 }
43 }
44}