diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index 591401180..b9da685f5 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -5,6 +5,7 @@ import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDh import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; import com.seibel.distanthorizons.common.commands.CommandInitializer; import com.seibel.distanthorizons.common.wrappers.DependencySetup; +import com.seibel.distanthorizons.common.wrappers.gui.DebugScreenEntry; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftServerWrapper; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.api.internal.SharedApi; @@ -83,6 +84,8 @@ public abstract class AbstractModInitializer LOGGER.info(ModInfo.READABLE_NAME + " client Initialized."); + DebugScreenEntry.register(); + this.subscribeClientStartedEvent(this::postInit); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/DebugScreenEntry.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/DebugScreenEntry.java new file mode 100644 index 000000000..e5478f37f --- /dev/null +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/DebugScreenEntry.java @@ -0,0 +1,79 @@ +package com.seibel.distanthorizons.common.wrappers.gui; + +import com.seibel.distanthorizons.core.logging.f3.F3Screen; +import com.seibel.distanthorizons.coreapi.ModInfo; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.gui.components.debug.DebugScreenDisplayer; +import net.minecraft.client.gui.components.debug.DebugScreenEntries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; + +public class DebugScreenEntry implements net.minecraft.client.gui.components.debug.DebugScreenEntry +{ + public static void register() + { + // This method is private, so its access will need to be widened + DebugScreenEntries.register( + // The id, this will be displayed on the options screen + ResourceLocation.fromNamespaceAndPath(ModInfo.RESOURCE_NAMESPACE, "distant_horizons"), + // The screen entry + new DebugScreenEntry() + ); + } + + + @Override + public void display(@NotNull DebugScreenDisplayer displayer, @Nullable Level level, @Nullable LevelChunk clientChunk, @Nullable LevelChunk serverChunk) + { + List messageList = new ArrayList<>(); + F3Screen.addStringToDisplay(messageList); + + for (String message : messageList) + { + displayer.addLine(message); + } + + //// The following will display like so if it is the only entry on the screen: + //// First left! First Right! + //// + //// Hello world! Random text! + //// Lorem ipsum. + //// I am another group! + //// I am one group This will appear after with no line breaks! + //// All in a row + //// Provided in a list. + //// + // + //displayer.addLine("Hello world!"); + //displayer.addLine("Lorem ipsum."); + //displayer.addLine("Random text!"); + // + //// These will be displayed first + //displayer.addPriorityLine("First left!"); + //displayer.addPriorityLine("First right!"); + // + //// These will be grouped separately based on the key + //displayer.addToGroup(GROUP_ONE, List.of( + // "I am one group", + // "All in a row", + // "Provided in a list." + //)); + // + //displayer.addToGroup(GROUP_TWO, "I am another group!"); + //displayer.addToGroup(GROUP_TWO, "This will appear after with no line breaks!"); + } + + @Override + public boolean isAllowed(boolean reducedDebugInfo) + { + // Always show regardless of accessibility option + return true; + } +} diff --git a/common/src/main/resources/1_21_9.distanthorizons.accesswidener b/common/src/main/resources/1_21_9.distanthorizons.accesswidener new file mode 100644 index 000000000..d39ed6469 --- /dev/null +++ b/common/src/main/resources/1_21_9.distanthorizons.accesswidener @@ -0,0 +1,53 @@ +accessWidener v1 named + +# used when determining where to save files to +accessible field net/minecraft/world/level/storage/DimensionDataStorage dataFolder Ljava/nio/file/Path; +# used to help determine what folder a clientLevel is +accessible field net/minecraft/world/level/biome/BiomeManager biomeZoomSeed J + +# used when rendering +accessible method net/minecraft/client/renderer/GameRenderer getFov (Lnet/minecraft/client/Camera;FZ)F +accessible field net/minecraft/client/Minecraft deltaTracker Lnet/minecraft/client/DeltaTracker$Timer; + + +# used for grabbing vanilla rendered chunks +accessible field net/minecraft/client/renderer/LevelRenderer visibleSections Lit/unimi/dsi/fastutil/objects/ObjectArrayList; + +# world generation +# accessible method net/minecraft/world/level/lighting/LayerLightEngine queueSectionData (JLnet/minecraft/world/level/chunk/DataLayer;Z)V +accessible field net/minecraft/world/level/chunk/LevelChunk loaded Z +accessible field net/minecraft/world/level/lighting/LightEngine storage Lnet/minecraft/world/level/lighting/LayerLightSectionStorage; +accessible method net/minecraft/world/level/lighting/LayerLightSectionStorage lightOnInSection (J)Z +accessible field net/minecraft/server/level/ServerChunkCache distanceManager Lnet/minecraft/server/level/DistanceManager; +accessible method net/minecraft/server/level/ChunkMap getUpdatingChunkIfPresent (J)Lnet/minecraft/server/level/ChunkHolder; +accessible method net/minecraft/server/level/ChunkMap tick (Ljava/util/function/BooleanSupplier;)V +accessible field net/minecraft/server/level/ServerLevel entityManager Lnet/minecraft/world/level/entity/PersistentEntitySectionManager; +accessible field net/minecraft/server/level/ChunkMap mainThreadExecutor Lnet/minecraft/util/thread/BlockableEventLoop; + +# lod generation from save file +accessible field net/minecraft/world/level/chunk/storage/ChunkStorage worker Lnet/minecraft/world/level/chunk/storage/IOWorker; +accessible field net/minecraft/world/level/chunk/storage/IOWorker storage Lnet/minecraft/world/level/chunk/storage/RegionFileStorage; +accessible field net/minecraft/world/level/chunk/storage/RegionFileStorage regionCache Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; +accessible field net/minecraft/world/level/chunk/storage/RegionFileStorage folder Ljava/nio/file/Path; + +# grabbing textures +accessible class net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture +accessible method net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture getFrameX (I)I +accessible method net/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture getFrameY (I)I +accessible field net/minecraft/client/renderer/texture/SpriteContents animatedTexture Lnet/minecraft/client/renderer/texture/SpriteContents$AnimatedTexture; +accessible field net/minecraft/client/renderer/texture/SpriteContents originalImage Lcom/mojang/blaze3d/platform/NativeImage; + +# UI stuff +accessible field net/minecraft/client/gui/components/AbstractButton SPRITES Lnet/minecraft/client/gui/components/WidgetSprites; +# Handles inserting the config button +accessible field net/minecraft/client/gui/layouts/HeaderAndFooterLayout headerFrame Lnet/minecraft/client/gui/layouts/FrameLayout; +accessible field net/minecraft/client/gui/layouts/FrameLayout children Ljava/util/List; +accessible class net/minecraft/client/gui/layouts/FrameLayout$ChildContainer +accessible field net/minecraft/client/gui/layouts/LinearLayout wrapped Lnet/minecraft/client/gui/layouts/GridLayout; +accessible method net/minecraft/client/gui/components/debug/DebugScreenEntries register (Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/client/gui/components/debug/DebugScreenEntry;)Lnet/minecraft/resources/ResourceLocation; + +# hacky stuff +accessible field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; +mutable field net/minecraft/util/ThreadingDetector lock Ljava/util/concurrent/Semaphore; + + diff --git a/coreSubProjects b/coreSubProjects index a8748471d..569a5442a 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit a8748471dfedeb6bcd4197782958c4a5641ab600 +Subproject commit 569a5442a9a4be7b62c8ce87f6351254552429c4 diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinDebugScreenOverlay.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinDebugScreenOverlay.java index 2b8cddded..56fcf95ca 100644 --- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinDebugScreenOverlay.java +++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinDebugScreenOverlay.java @@ -1,5 +1,6 @@ package com.seibel.distanthorizons.neoforge.mixins.client; +#if MC_VER < MC_1_21_9 import com.seibel.distanthorizons.core.logging.f3.F3Screen; import net.minecraft.client.gui.components.DebugScreenOverlay; import org.spongepowered.asm.mixin.Mixin; @@ -8,16 +9,24 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; +#else +import org.spongepowered.asm.mixin.Mixin; +import net.minecraft.client.gui.components.DebugScreenOverlay; +#endif @Mixin(DebugScreenOverlay.class) public class MixinDebugScreenOverlay { + #if MC_VER < MC_1_21_9 @Inject(method = "getSystemInformation", at = @At("RETURN")) private void addCustomF3(CallbackInfoReturnable> cir) { List messages = cir.getReturnValue(); F3Screen.addStringToDisplay(messages); } + #else + // handled by DebugScreenEntry for MC versions after 1.21.9 + #endif } diff --git a/versionProperties/1.21.9.properties b/versionProperties/1.21.9.properties index 95d25bd22..8f224294c 100644 --- a/versionProperties/1.21.9.properties +++ b/versionProperties/1.21.9.properties @@ -3,7 +3,7 @@ java_version=21 minecraft_version=1.21.9 parchment_version=1.21:2024.07.28 compatible_minecraft_versions=["1.21.9"] -accessWidenerVersion=1_21_4 +accessWidenerVersion=1_21_9 builds_for=fabric,neoforge # forge is broken due to gradle/build script issues