Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.

Remove datapacks button

+47 -1
+44
common/src/main/java/net/lerariemann/infinity/mixin/qol/EditWorldScreenMixin.java
··· 1 + package net.lerariemann.infinity.mixin.qol; 2 + 3 + import com.llamalad7.mixinextras.sugar.Local; 4 + import it.unimi.dsi.fastutil.booleans.BooleanConsumer; 5 + import net.minecraft.client.MinecraftClient; 6 + import net.minecraft.client.gui.screen.world.EditWorldScreen; 7 + import net.minecraft.client.gui.widget.ButtonWidget; 8 + import net.minecraft.client.gui.widget.DirectionalLayoutWidget; 9 + import net.minecraft.server.world.ServerWorld; 10 + import net.minecraft.text.Text; 11 + import net.minecraft.util.PathUtil; 12 + import net.minecraft.util.Util; 13 + import net.minecraft.world.level.storage.LevelStorage; 14 + import org.apache.commons.io.FileUtils; 15 + import org.spongepowered.asm.mixin.Final; 16 + import org.spongepowered.asm.mixin.Mixin; 17 + import org.spongepowered.asm.mixin.Shadow; 18 + import org.spongepowered.asm.mixin.injection.At; 19 + import org.spongepowered.asm.mixin.injection.Inject; 20 + import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 21 + 22 + import java.io.IOException; 23 + import java.nio.file.Path; 24 + 25 + @Mixin(EditWorldScreen.class) 26 + public class EditWorldScreenMixin { 27 + 28 + @Shadow @Final private DirectionalLayoutWidget layout; 29 + 30 + @Shadow @Final private BooleanConsumer callback; 31 + 32 + @Inject(method = "<init>", at = @At(value = "RETURN", target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z")) 33 + void inj(MinecraftClient client, LevelStorage.Session session, String levelName, BooleanConsumer callback, CallbackInfo ci) { 34 + var screen = (EditWorldScreen) (Object) this; 35 + screen.addDrawableChild(ButtonWidget.builder(Text.literal("[Infinity] Delete Datapacks"), button -> { 36 + boolean bl = deleteLevel(session); 37 + this.callback.accept(!bl); 38 + }).width(200).build()); 39 + } 40 + 41 + private boolean deleteLevel(LevelStorage.Session session) { 42 + return FileUtils.deleteQuietly(session.getDirectory().path().resolve("datapacks").toFile()); 43 + } 44 + }
+2 -1
common/src/main/resources/infinity.accesswidener
··· 13 13 accessible method net/minecraft/block/NetherPortalBlock getExitPortalTarget (Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/BlockLocating$Rectangle;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/world/TeleportTarget$PostDimensionTransition;)Lnet/minecraft/world/TeleportTarget; 14 14 accessible method net/minecraft/block/NetherPortalBlock getOrCreateExitPortalTarget (Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;ZLnet/minecraft/world/border/WorldBorder;)Lnet/minecraft/world/TeleportTarget; 15 15 accessible class net/minecraft/entity/passive/FishEntity$FishMoveControl 16 - accessible field net/minecraft/loot/context/LootContextTypes MAP Lcom/google/common/collect/BiMap; 16 + accessible field net/minecraft/loot/context/LootContextTypes MAP Lcom/google/common/collect/BiMap; 17 + accessible method net/minecraft/client/gui/screen/Screen addDrawableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element;
+1
common/src/main/resources/infinity.mixins.json
··· 62 62 "options.MinecraftClientMixin", 63 63 "options.SoundSystemMixin", 64 64 "options.WorldRendererMixin", 65 + "qol.EditWorldScreenMixin", 65 66 "qol.KeyboardMixin" 66 67 ], 67 68 "injectors": {