diff --git a/.gitignore b/.gitignore index 75c6db86..98260c4e 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,93 @@ runs/ macos/*.dmg **/.intentionally-empty-file.o +# AI agents and assistants +# +# Some common agent instruction and project configuration files are listed +# below as commented-out examples. They are often intentionally committed and +# shared with a team, so only uncomment them if they are local-only in your +# project. + +# GEMINI.md +# WARP.md +# CRUSH.md +# QWEN.md + +# OpenAI Codex +AGENTS.md +.codex/ + +# Aider +.aider.input.history +.aider.chat.history.md +.aider.llm.history +.aider.tags.cache.v* +# .aiderignore + +# Claude Code +.claude/*.local.json +.claude/**/*.log +CLAUDE.local.md +# .claude/ + +# Gemini CLI +gemini-debug.log +.gemini-clipboard/ +# .gemini/ + +# Cursor AI +# .cursorrules +# .cursor/ +# .cursor.json +# .cursor-settings.yaml + +# Continue +# .continue/ +# .continuerc.json + +# Cline +# .cline/ +# .clinerules +# cline.json + +# Other agent/editor project config +# .warp/ +# .crush/ +# .codeium/ +# .deepseek/ +# .amazon-codewhisperer/ +# .tabnineignore +# .tabnine/ + +# GitHub Copilot +# .github/copilot-instructions.md + +# Windsurf Editor +# .windsurfrules +# .windsurf/ + +# Replit AI Development +# .replit +# replit.nix + +# Vim and Neovim +# Swap +[._]*.s[a-v][a-z] +# comment out the next line if you don't need vector files +!*.svg +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 00000000..ac4ddc85 --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,5 @@ +## 贡献 + +当你向 Sable 提交拉取请求(PR)时,即表示你授予 [RyanHCode](https://github.com/ryanhcode) 依据 [Polyform Shield License (Version 1.0.0)](LICENSE.md) 许可你的贡献的权利,并且你不可撤销地允许 Sable 未来可能进行的、包含你贡献内容的再许可,许可方式为 [MIT 许可证](https://opensource.org/license/mit)。 + +你提交的代码必须是你的原创作品,并且你拥有对其进行贡献的权利。 diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 00000000..7da08338 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,49 @@ +

Logo

+

Sable
+
+ + Discord + + + Modrinth Download + + + CurseForge Download + +
+

+ +

Sable 是一个面向 Minecraft 的侵入式库 Mod,实现了我所设想的交互式移动方块结构,称为"子层级"(sub-levels)。子层级内包含普通的 Minecraft 区块、实体和方块实体,但存在于 Minecraft 世界中一个独立动态位置和朝向上。我的目标是尽可能最大化与子层级交互时的兼容性、性能与沉浸感,并且尽量简单。

+ +### 兼容性警告 + +Sable 是一个侵入性极强的 Mod。它大量使用 mixin,极易与其他 Mod 产生兼容性问题。 + +### 开发者 + +如需添加可选且简单的兼容性,使某个 Mod 能与 Sable 协同工作,请查看 [Sable Companion](https://github.com/ryanhcode/sable-companion)。 + +查看 [Sable 开发者 Wiki](https://github.com/ryanhcode/sable/wiki) 获取文档和指南。 + +加入 sable zone 进行开发讨论:https://discord.gg/pnkzu2dtVA + +# 构建 Rust Natives + +1. 从 https://www.docker.com/get-started/ 或你的软件包管理器安装 Docker +2. 运行 `gradlew common:buildImages`(只需执行一次) +3. 运行 `gradlew common:buildRustNatives` + +### 致谢 + +- Dimforge 的维护者与贡献者,感谢他们在默认物理管线中所包含的出色的 Rapier 物理引擎 +- Eriksonn,感谢他的子层级拆分区域算法、悬浮方块,以及惊人的数学魔法 +- Ocelot,感谢他出色的子层级渲染器,以及大量优化和 API 帮助 +- Cyvack,感谢他为 Create 兼容性所做的许多修复和功能、装配帮助,以及整体开发 +- BeeIsYou,感谢他的升力数学、兼容性修复、Bug 修复和大量整体开发 +- KyanBirb,感谢他的资源、兼容性修复、Bug 修复和大量整体开发 +- Cake,感谢他的 Bug 修复和整体开发帮助 +- Rhyguy1,感谢他带来的士气 + +### 许可 + +除非另有说明,本仓库中的全部内容均受 RyanHCode 的 [Polyform Shield License 1.0.0](LICENSE.md) 许可。 diff --git a/changelog.zh-CN.md b/changelog.zh-CN.md new file mode 100644 index 00000000..215eb64c --- /dev/null +++ b/changelog.zh-CN.md @@ -0,0 +1,2 @@ +- 修复子层级拆分(sub-level splitting)时的崩溃 +- 修复并增加了针对子层级因边界被设置为 [0,0,0,0,0,0] 而无法加载的问题的恢复机制 diff --git a/common/src/main/java/dev/ryanhcode/sable/Sable.java b/common/src/main/java/dev/ryanhcode/sable/Sable.java index 54dff6fb..d3536c23 100644 --- a/common/src/main/java/dev/ryanhcode/sable/Sable.java +++ b/common/src/main/java/dev/ryanhcode/sable/Sable.java @@ -24,6 +24,10 @@ import java.time.LocalDate; import java.util.List; +/** + * Common entry point for the Sable mod: mod constants, shared init, crash headers, and the default sub-level container + * initializer that wires up physics, tracking, and ticket-loading systems. + */ public final class Sable { public static final String MOD_NAME = "Sable"; diff --git a/common/src/main/java/dev/ryanhcode/sable/SableClient.java b/common/src/main/java/dev/ryanhcode/sable/SableClient.java index 32efaed8..72d29e51 100644 --- a/common/src/main/java/dev/ryanhcode/sable/SableClient.java +++ b/common/src/main/java/dev/ryanhcode/sable/SableClient.java @@ -14,6 +14,10 @@ import foundry.veil.platform.VeilEventPlatform; import net.minecraft.client.Minecraft; +/** + * Client-side entry point for the Sable mod: registers shader pre-processors, the sky-light shadow pass, gizmo + * handling, and the ImGui sub-level container inspector. + */ public class SableClient { public static final SableClientGizmoHandler GIZMO_HANDLER = new SableClientGizmoHandler(); diff --git a/common/src/main/java/dev/ryanhcode/sable/SableClientConfig.java b/common/src/main/java/dev/ryanhcode/sable/SableClientConfig.java index 55491dbe..9a8e046c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/SableClientConfig.java +++ b/common/src/main/java/dev/ryanhcode/sable/SableClientConfig.java @@ -18,6 +18,10 @@ import java.util.Arrays; +/** + * Client-side configuration options for Sable's rendering and networking, defined as a NeoForge + * {@link ModConfigSpec}. Changes are applied by {@link #onUpdate(boolean)}. + */ public final class SableClientConfig { public static final ModConfigSpec SPEC; diff --git a/common/src/main/java/dev/ryanhcode/sable/SableConfig.java b/common/src/main/java/dev/ryanhcode/sable/SableConfig.java index 8fa1b91a..ce409d63 100644 --- a/common/src/main/java/dev/ryanhcode/sable/SableConfig.java +++ b/common/src/main/java/dev/ryanhcode/sable/SableConfig.java @@ -2,6 +2,9 @@ import net.neoforged.neoforge.common.ModConfigSpec; +/** + * Common (server-agnostic) configuration options for Sable, defined as a NeoForge {@link ModConfigSpec}. + */ public final class SableConfig { public static final ModConfigSpec SPEC; diff --git a/common/src/main/java/dev/ryanhcode/sable/SableServerConfig.java b/common/src/main/java/dev/ryanhcode/sable/SableServerConfig.java index 257a1241..454f43a8 100644 --- a/common/src/main/java/dev/ryanhcode/sable/SableServerConfig.java +++ b/common/src/main/java/dev/ryanhcode/sable/SableServerConfig.java @@ -2,6 +2,9 @@ import net.neoforged.neoforge.common.ModConfigSpec; +/** + * Server-side configuration options for Sable's physics simulation, defined as a NeoForge {@link ModConfigSpec}. + */ public final class SableServerConfig { public static final ModConfigSpec SPEC; diff --git a/common/src/main/java/dev/ryanhcode/sable/api/block/propeller/BlockEntitySubLevelPropellerActor.java b/common/src/main/java/dev/ryanhcode/sable/api/block/propeller/BlockEntitySubLevelPropellerActor.java index cf663aaa..b15ce116 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/block/propeller/BlockEntitySubLevelPropellerActor.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/block/propeller/BlockEntitySubLevelPropellerActor.java @@ -9,6 +9,10 @@ import net.minecraft.world.phys.Vec3; import org.joml.Vector3d; +/** + * An interface for {@link net.minecraft.world.level.block.entity.BlockEntity} sub-classes that apply thrust to a + * sub-level via a {@link BlockEntityPropeller}. Forces are applied on each physics tick while the propeller is active. + */ public interface BlockEntitySubLevelPropellerActor extends BlockEntitySubLevelActor { Vector3d THRUST_VECTOR = new Vector3d(); diff --git a/common/src/main/java/dev/ryanhcode/sable/api/command/SubLevelArgumentType.java b/common/src/main/java/dev/ryanhcode/sable/api/command/SubLevelArgumentType.java index 634c51af..d5b5e7fc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/command/SubLevelArgumentType.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/command/SubLevelArgumentType.java @@ -33,6 +33,11 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Function; +/** + * A Brigadier argument type that parses a {@link SubLevelTarget} from a command string. Supports {@code @} selectors, + * UUIDs, and an optional {@code static_world} target, with configurable single/multiple result and static-level + * permissions. + */ public class SubLevelArgumentType implements ArgumentType { public static final Function NO_SUGGESTIONS = b -> b; diff --git a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/KinematicContraption.java b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/KinematicContraption.java index a589cc4a..77ed9022 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/KinematicContraption.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/KinematicContraption.java @@ -13,6 +13,10 @@ import java.util.Map; +/** + * A kinematic (position and orientation driven) moving structure that can be hosted on a sub-level. Provides access to + * the local bounds, block state, mass, pose, lift providers, and floating clusters of the contraption. + */ public interface KinematicContraption { void sable$getLocalBounds(final BoundingBox3i bounds); diff --git a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicket.java b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicket.java index e2940118..10de4190 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicket.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicket.java @@ -2,6 +2,10 @@ import java.util.UUID; +/** + * A request to keep a specific sub-level loaded, scoped to a {@link SubLevelLoadingTicketType}. Multiple tickets can + * reference the same sub-level with different keys. + */ public record SubLevelLoadingTicket(SubLevelLoadingTicketType type, UUID subLevelId, T key) { public String toCompactString() { diff --git a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicketType.java b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicketType.java index 76a74d2f..e2ce6cbd 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicketType.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelLoadingTicketType.java @@ -10,6 +10,10 @@ import java.util.HashMap; import java.util.Map; +/** + * A registry entry describing the kind of loading ticket a sub-level can be held by, along with the codec used to + * serialize its key. Types are created and looked up by {@link ResourceLocation}. + */ public record SubLevelLoadingTicketType(ResourceLocation name, Codec codec) { private static final Map> REGISTRY = new HashMap<>(); diff --git a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelTicketInfo.java b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelTicketInfo.java index 8efa14c7..2476684f 100644 --- a/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelTicketInfo.java +++ b/common/src/main/java/dev/ryanhcode/sable/api/sublevel/ticket/SubLevelTicketInfo.java @@ -6,6 +6,9 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; +/** + * Internal holder of the loading tickets and (optional) saved-world pointer associated with a single sub-level. + */ @ApiStatus.Internal public class SubLevelTicketInfo { private final ObjectSet> tickets = new ObjectArraySet<>(); diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/AbstractSableMixinPlugin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/AbstractSableMixinPlugin.java index 1265e07b..6d251bb7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/AbstractSableMixinPlugin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/AbstractSableMixinPlugin.java @@ -25,6 +25,10 @@ import java.util.List; import java.util.Set; +/** + * Base {@link IMixinConfigPlugin} used by all Sable mixin configs. Conditionally applies renderer mixins (Sodium vs + * vanilla) and compatibility mixins, honoring {@link MixinModVersionConstraint} version ranges on target mods. + */ public abstract class AbstractSableMixinPlugin implements IMixinConfigPlugin { public static final Logger LOGGER = LogUtils.getLogger(); private final Object2BooleanMap modLoadedCache = new Object2BooleanOpenHashMap<>(); diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/assembly/AbstractFurnaceBlockEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/assembly/AbstractFurnaceBlockEntityMixin.java index 332e64e2..2180b4a7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/assembly/AbstractFurnaceBlockEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/assembly/AbstractFurnaceBlockEntityMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity} to also clear the recipes used map when the container is cleared. + */ @Mixin(AbstractFurnaceBlockEntity.class) public abstract class AbstractFurnaceBlockEntityMixin extends BaseContainerBlockEntity implements Clearable { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/CompassItemPropertyFunctionMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/CompassItemPropertyFunctionMixin.java index 59d8c2f0..c01dc2fc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/CompassItemPropertyFunctionMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/CompassItemPropertyFunctionMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +/** + * Make the compass target angle calculation take sub-level transforms into account. + */ @Mixin(CompassItemPropertyFunction.class) public abstract class CompassItemPropertyFunctionMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/EntityMixin.java index 4b976799..26058086 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_rotation/EntityMixin.java @@ -16,6 +16,9 @@ import java.util.function.Function; +/** + * Apply the sub-level orientation to the entity's view vector calculation. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/CameraMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/CameraMixin.java index ea7d00d0..8b5cc9ca 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/CameraMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/CameraMixin.java @@ -32,6 +32,9 @@ import java.util.Collection; +/** + * Implement camera zoom in sub-level view, smoothly interpolating and clamping the maximum zoom distance to the sub-level bounds. + */ @Mixin(Camera.class) public abstract class CameraMixin implements CameraZoomExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/MouseHandlerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/MouseHandlerMixin.java index 3fca8f46..579bcaab 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/MouseHandlerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/camera_zoom/MouseHandlerMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +/** + * Make the scroll wheel control camera zoom in sub-level view instead of cycling the hotbar. + */ @Mixin(MouseHandler.class) public class MouseHandlerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/GameRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/GameRendererMixin.java index 97e80c46..16c7353e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/GameRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/GameRendererMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Fall back to first-person view when rendering the level if the sub-level view is invalid. + */ @Mixin(GameRenderer.class) public class GameRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/MinecraftMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/MinecraftMixin.java index a5c3628d..ba8e9f84 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/MinecraftMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/camera/new_camera_types/MinecraftMixin.java @@ -24,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Handle the enter and exit logic of the sub-level view when cycling camera types. + */ @Mixin(Minecraft.class) public class MinecraftMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/chunk_container_replacement/LevelChunkSectionMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/chunk_container_replacement/LevelChunkSectionMixin.java index 84e5b01c..d84ffa89 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/chunk_container_replacement/LevelChunkSectionMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/chunk_container_replacement/LevelChunkSectionMixin.java @@ -3,6 +3,9 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.world.level.chunk.LevelChunkSection} to support replacing chunk sections inside sub-level plots. + */ @Mixin(LevelChunkSection.class) public class LevelChunkSectionMixin { } diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/ClipContextMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/ClipContextMixin.java index 448fa45f..c56ff5da 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/ClipContextMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/ClipContextMixin.java @@ -9,6 +9,9 @@ import java.util.function.Predicate; +/** + * Mixin into {@link net.minecraft.world.level.ClipContext} to add fields allowing raytraces to ignore or restrict sub-levels, implementing {@link dev.ryanhcode.sable.mixinterface.clip_overwrite.ClipContextExtension}. + */ @Mixin(ClipContext.class) public class ClipContextMixin implements ClipContextExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/EntityMixin.java index 5b044b91..1abef99b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/clip_overwrite/EntityMixin.java @@ -7,6 +7,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to use an eye position that accounts for sub-level transforms during {@code pick()}. + */ @Mixin(Entity.class) public class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/command/ArgumentTypeInfosMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/command/ArgumentTypeInfosMixin.java index 712276b2..e5145d3a 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/command/ArgumentTypeInfosMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/command/ArgumentTypeInfosMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.commands.synchronization.ArgumentTypeInfos} to register Sable's custom command argument types. + */ @Mixin(ArgumentTypeInfos.class) public abstract class ArgumentTypeInfosMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/command/ClientSuggestionProviderMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/command/ClientSuggestionProviderMixin.java index 4ab817eb..d4317fc4 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/command/ClientSuggestionProviderMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/command/ClientSuggestionProviderMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.client.multiplayer.ClientSuggestionProvider} to implement {@link dev.ryanhcode.sable.command.argument.SubLevelSuggestionProvider}, returning the sub-level under the player's crosshair. + */ @Mixin(ClientSuggestionProvider.class) public class ClientSuggestionProviderMixin implements SubLevelSuggestionProvider { @Shadow diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/command/DataCommandsMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/command/DataCommandsMixin.java index 17e034ed..c24dd666 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/command/DataCommandsMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/command/DataCommandsMixin.java @@ -11,6 +11,9 @@ import java.util.function.Function; +/** + * Mixin into {@link net.minecraft.server.commands.data.DataCommands} to register the sub-level data accessor provider. + */ @Mixin(DataCommands.class) public class DataCommandsMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/computercraft/WirelessNetworkMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/computercraft/WirelessNetworkMixin.java index ae619d32..3da109ca 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/computercraft/WirelessNetworkMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/computercraft/WirelessNetworkMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * ComputerCraft compatibility: make the wireless transmission distance calculation in {@link WirelessNetwork#tryTransmit} account for sub-levels. + */ @Mixin(WirelessNetwork.class) public class WirelessNetworkMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/etched/StopListeningSoundMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/etched/StopListeningSoundMixin.java index 8e7cd22b..21b71f16 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/etched/StopListeningSoundMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/etched/StopListeningSoundMixin.java @@ -5,6 +5,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Etched compatibility: make StopListeningSound implement {@link SoundInstanceDelegated} to support delegating moving sound instances in sub-levels. + */ @Mixin(targets = "gg.moonflower.etched.api.sound.StopListeningSound") public class StopListeningSoundMixin implements SoundInstanceDelegated { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraPosesMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraPosesMixin.java index e9e2caed..dbc679b1 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraPosesMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraPosesMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Exposure compatibility: project the camera stand's eye position out of the sub-level so camera poses stay correct. + */ @Mixin(CameraPoses.class) public class CameraPosesMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraStandEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraStandEntityMixin.java index c4fc79fe..a94b90e2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraStandEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/exposure/CameraStandEntityMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Exposure compatibility: adapt the camera stand's eye position and interaction range checks to the sub-level coordinate system. + */ @Mixin(CameraStandEntity.class) public abstract class CameraStandEntityMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/iris/ExtendedShaderMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/iris/ExtendedShaderMixin.java index add5705a..ec0e8eec 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/iris/ExtendedShaderMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/iris/ExtendedShaderMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +/** + * Iris compatibility: add a model matrix refresh method to {@link ExtendedShader} so sub-level render transforms take effect. + */ @Mixin(ExtendedShader.class) public class ExtendedShaderMixin implements ExtendedShaderExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/BlockAccessorImplMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/BlockAccessorImplMixin.java index 8eca919c..71b7d21a 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/BlockAccessorImplMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/BlockAccessorImplMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import snownee.jade.impl.BlockAccessorImpl; +/** + * Jade compatibility: make the validation distance calculation in block access requests account for sub-levels. + */ @Mixin(BlockAccessorImpl.class) public class BlockAccessorImplMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/RayTracingMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/RayTracingMixin.java index ca77a49c..0188b062 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/RayTracingMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jade/RayTracingMixin.java @@ -15,6 +15,9 @@ import java.util.Optional; +/** + * Jade compatibility: run entity ray tracing in the sub-level local coordinate system and compute the correct distance. + */ @Mixin(RayTracing.class) public class RayTracingMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jadeaddons/CreatePluginMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jadeaddons/CreatePluginMixin.java index 57d60007..08802251 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jadeaddons/CreatePluginMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/jadeaddons/CreatePluginMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import snownee.jade.addon.create.CreatePlugin; +/** + * Compatibility with Jade's Create addon: transform the player eye position and view direction into the sub-level local coordinate system. + */ @Mixin(CreatePlugin.class) public class CreatePluginMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/EntityHelperMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/EntityHelperMixin.java index 57f06e14..6a5b7778 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/EntityHelperMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/EntityHelperMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; +/** + * Shoulder Surfing compatibility: project the look target position out of the sub-level. + */ @Mixin(EntityHelper.class) public class EntityHelperMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ObjectPickerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ObjectPickerMixin.java index ee752b2e..b864b616 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ObjectPickerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ObjectPickerMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Shoulder Surfing compatibility: make the object picker distance calculation account for sub-levels. + */ @Mixin(ObjectPicker.class) public class ObjectPickerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/PerspectiveMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/PerspectiveMixin.java index 89e36d9c..c5973e63 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/PerspectiveMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/PerspectiveMixin.java @@ -20,6 +20,9 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Shoulder Surfing compatibility: register the sub-level perspectives and integrate them into its switching logic. + */ @Mixin(Perspective.class) public class PerspectiveMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingCameraMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingCameraMixin.java index 35f820fd..43a7d8e9 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingCameraMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingCameraMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Shoulder Surfing compatibility: make the camera zoom distance calculation account for sub-levels. + */ @Mixin(ShoulderSurfingCamera.class) public class ShoulderSurfingCameraMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingImplMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingImplMixin.java index 9383d519..815dabd1 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingImplMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/shouldersurfing/ShoulderSurfingImplMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Shoulder Surfing compatibility: skip the sub-level perspectives when cycling unless the player is inside a sub-level vehicle. + */ @Mixin(ShoulderSurfingImpl.class) public class ShoulderSurfingImplMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/LODMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/LODMixin.java index 60e2849a..4fbd3254 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/LODMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/LODMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Vista compatibility: make the LOD checks account for sub-levels by projecting the object center and transforming the plane normals. + */ @Mixin(LOD.class) public class LODMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderAccessMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderAccessMixin.java index 36f17475..4e7c172f 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderAccessMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderAccessMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Vista compatibility: make the view finder block validity distance calculation account for sub-levels. + */ @Mixin(ViewFinderAccess.Block.class) public class ViewFinderAccessMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderControllerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderControllerMixin.java index 9adc5cb8..a2ee12b8 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderControllerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/compatibility/vista/ViewFinderControllerMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Vista compatibility: apply the sub-level orientation to the camera rotation when setting up the camera. + */ @Mixin(ViewFinderController.class) public class ViewFinderControllerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitBlockEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitBlockEntityMixin.java index 14a8e149..ae83e3c9 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitBlockEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitBlockEntityMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.level.block.entity.ConduitBlockEntity} to measure the conduit effect range across sub-level poses. + */ @Mixin(ConduitBlockEntity.class) public class ConduitBlockEntityMixin { @Redirect(method = "applyEffects", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;closerThan(Lnet/minecraft/core/Vec3i;D)Z")) diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitRendererMixin.java index 5c3122cf..1c8fa5a4 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/conduit/ConduitRendererMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.renderer.blockentity.ConduitRenderer} to reorient the conduit eye render to the sub-level pose. + */ @Mixin(ConduitRenderer.class) public class ConduitRendererMixin { @Inject(method = "render(Lnet/minecraft/world/level/block/entity/ConduitBlockEntity;FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;II)V", diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/config/GameRendererAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/config/GameRendererAccessor.java index de8e34e2..2a860ada 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/config/GameRendererAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/config/GameRendererAccessor.java @@ -7,6 +7,9 @@ import java.util.Map; +/** + * Accessor exposing the private shaders field of {@link net.minecraft.client.renderer.GameRenderer}. + */ @Mixin(GameRenderer.class) public interface GameRendererAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/CombatTrackerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/CombatTrackerMixin.java index fe41febc..438d6738 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/CombatTrackerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/CombatTrackerMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.damagesource.CombatTracker} to include the source sub-level name in fall death messages. + */ @Mixin(CombatTracker.class) public class CombatTrackerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/EntityMixin.java index 08a72bba..0a181bad 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/death_message/EntityMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to clear the last tracked sub-level when the entity lands on the ground. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/DebugScreenOverlayMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/DebugScreenOverlayMixin.java index aa3dc73d..898ea861 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/DebugScreenOverlayMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/DebugScreenOverlayMixin.java @@ -14,6 +14,9 @@ import java.util.List; +/** + * Mixin into {@link net.minecraft.client.gui.components.DebugScreenOverlay} to append Sable debug information to the F3 screen. + */ @Mixin(DebugScreenOverlay.class) public abstract class DebugScreenOverlayMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/LevelRendererMixin.java index 2cd51e81..4532abb0 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/debug_render/LevelRendererMixin.java @@ -25,6 +25,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.renderer.LevelRenderer} to render sub-level bounding boxes and poses when hitboxes are shown. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererCacheMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererCacheMixin.java index 3170c820..d41e5dd0 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererCacheMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererCacheMixin.java @@ -5,6 +5,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.client.renderer.block.ModelBlockRenderer.Cache} to track whether the current block is on a sub-level, implementing {@link dev.ryanhcode.sable.mixinterface.dynamic_directional_shading.ModelBlockRendererCacheExtension}. + */ @Mixin(ModelBlockRenderer.Cache.class) public class ModelBlockRendererCacheMixin implements ModelBlockRendererCacheExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererMixin.java index b22fbc8b..a13c3972 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/dynamic_directional_shading/ModelBlockRendererMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; +/** + * Mixin into {@link net.minecraft.client.renderer.block.ModelBlockRenderer} to apply dynamic directional shading to blocks rendered inside sub-levels. + */ @Mixin(ModelBlockRenderer.class) public class ModelBlockRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/enchanting_table/EnchantingTableBlockEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/enchanting_table/EnchantingTableBlockEntityMixin.java index 6d54016a..c7e3a401 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/enchanting_table/EnchantingTableBlockEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/enchanting_table/EnchantingTableBlockEntityMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.level.block.entity.EnchantingTableBlockEntity} to transform player coordinates into sub-level local space for the book animation. + */ @Mixin(EnchantingTableBlockEntity.class) public class EnchantingTableBlockEntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_in_blocks/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_in_blocks/EntityMixin.java index 5a616845..29b50559 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_in_blocks/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_in_blocks/EntityMixin.java @@ -17,6 +17,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} so entities inside sub-levels also trigger the "inside block" checks. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/ClientPacketListenerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/ClientPacketListenerMixin.java index b8bc2e5e..ad5b4d05 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/ClientPacketListenerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/ClientPacketListenerMixin.java @@ -23,6 +23,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.client.multiplayer.ClientPacketListener} to handle custom position interpolation for entities moving or teleporting inside sub-levels. + */ @Mixin(ClientPacketListener.class) public abstract class ClientPacketListenerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/EntityRenderDispatcherMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/EntityRenderDispatcherMixin.java index 9dd2d39a..c96242af 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/EntityRenderDispatcherMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/EntityRenderDispatcherMixin.java @@ -24,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.renderer.entity.EntityRenderDispatcher} to render the hitbox of entities tracking sub-levels. + */ @Mixin(EntityRenderDispatcher.class) public class EntityRenderDispatcherMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/LivingEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/LivingEntityMixin.java index b54bfb91..7fa2d1e1 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/LivingEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/LivingEntityMixin.java @@ -27,6 +27,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.LivingEntity} to provide sub-level position based custom interpolation and walk animation for living entities stuck to sub-levels. + */ @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity implements LivingEntityStickExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/EntityMixin.java index 0ebe8e5c..9e458acb 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/EntityMixin.java @@ -29,6 +29,9 @@ import java.util.Optional; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to fix the particle effects spawned by entities on sub-levels and the block position below their feet. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LivingEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LivingEntityMixin.java index 349afa16..63b190ed 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LivingEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LivingEntityMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.entity.LivingEntity} so fall particles spawn correctly when landing on sub-level blocks. + */ @Mixin(LivingEntity.class) public class LivingEntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LocalPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LocalPlayerMixin.java index 7368e77f..f27c4e79 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LocalPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/effects/LocalPlayerMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.player.LocalPlayer} to play sounds from the local player's feet position when it has a custom orientation. + */ @Mixin(LocalPlayer.class) public abstract class LocalPlayerMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosMixin.java index 4e16623b..60523fa0 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Pos} to add a flag marking whether the entity is actually inside a sub-level. + */ @Mixin(ClientboundMoveEntityPacket.Pos.class) public class ClientboundMoveEntityPacketPosMixin implements PacketActuallyInSubLevelExtension { /** diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosRotMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosRotMixin.java index d10d7a29..b26022cb 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosRotMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundMoveEntityPacketPosRotMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.PosRot} to add a flag marking whether the entity is actually inside a sub-level. + */ @Mixin(ClientboundMoveEntityPacket.PosRot.class) public class ClientboundMoveEntityPacketPosRotMixin implements PacketActuallyInSubLevelExtension { /** diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundTeleportEntityPacketMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundTeleportEntityPacketMixin.java index 890a821f..05b82729 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundTeleportEntityPacketMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/packet_mixin/ClientboundTeleportEntityPacketMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket} to add a flag marking whether the entity is actually inside a sub-level. + */ @Mixin(ClientboundTeleportEntityPacket.class) public class ClientboundTeleportEntityPacketMixin implements PacketActuallyInSubLevelExtension { /** diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/LocalPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/LocalPlayerMixin.java index b11fd8e2..740c7243 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/LocalPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/LocalPlayerMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.player.LocalPlayer} to send the position in sub-level local coordinates when the local player is tracking a sub-level. + */ @Mixin(LocalPlayer.class) public abstract class LocalPlayerMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/RemotePlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/RemotePlayerMixin.java index b98256e1..63c32366 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/RemotePlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/RemotePlayerMixin.java @@ -7,6 +7,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.player.RemotePlayer} to apply the sub-level position interpolation updates to remote players. + */ @Mixin(RemotePlayer.class) public abstract class RemotePlayerMixin implements LivingEntityStickExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerGamePacketListenerImplMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerGamePacketListenerImplMixin.java index d7e9008b..302fe36f 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerGamePacketListenerImplMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerGamePacketListenerImplMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.server.network.ServerGamePacketListenerImpl} to handle sub-level tracking in player movement packets and bypass the related speed checks. + */ @Mixin(ServerGamePacketListenerImpl.class) public class ServerGamePacketListenerImplMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerPlayerMixin.java index 23a238ba..e4059091 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerPlayerMixin.java @@ -17,6 +17,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.server.level.ServerPlayer} to make the server player inherit the motion of the tracked sub-level each tick. + */ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerboundMovePlayerPacketMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerboundMovePlayerPacketMixin.java index c3c2047d..94512df0 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerboundMovePlayerPacketMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_stick_sublevels/player/ServerboundMovePlayerPacketMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.network.protocol.game.ServerboundMovePlayerPacket} to convert the player's movement packet position into sub-level local coordinates. + */ @Mixin(ServerboundMovePlayerPacket.class) public class ServerboundMovePlayerPacketMixin implements ServerboundMovePlayerPacketExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_turn_with_sub_levels/GameRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_turn_with_sub_levels/GameRendererMixin.java index a281335a..1c9bbf09 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_turn_with_sub_levels/GameRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entities_turn_with_sub_levels/GameRendererMixin.java @@ -20,6 +20,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.client.renderer.GameRenderer} to adjust the view as the sub-level rotates while the player stands on it. + */ @Mixin(GameRenderer.class) public class GameRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_ai/EatBlockGoalMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_ai/EatBlockGoalMixin.java index 6a1680c0..12e817c9 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_ai/EatBlockGoalMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_ai/EatBlockGoalMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.entity.ai.goal.EatBlockGoal} so mobs can eat blocks correctly while on sub-levels. + */ @Mixin(EatBlockGoal.class) public class EatBlockGoalMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/CollisionContextMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/CollisionContextMixin.java index 1a7ec557..1cfbd69e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/CollisionContextMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/CollisionContextMixin.java @@ -7,6 +7,9 @@ import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.world.phys.shapes.CollisionContext} so entities use the pre-allocated collision context. + */ @Mixin(CollisionContext.class) public interface CollisionContextMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/EntityMixin.java index a7f50295..b9ae65b7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_collision/EntityMixin.java @@ -6,6 +6,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to provide entities with a pre-allocated, efficient collision context. + */ @Mixin(Entity.class) public class EntityMixin implements EntityExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_interaction/ProjectileUtilMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_interaction/ProjectileUtilMixin.java index ea305630..236ab410 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_interaction/ProjectileUtilMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_interaction/ProjectileUtilMixin.java @@ -19,6 +19,9 @@ import java.util.Optional; +/** + * Mixin into {@link net.minecraft.world.entity.projectile.ProjectileUtil} so projectile hit detection accounts for sub-level position transforms. + */ @Mixin(ProjectileUtil.class) public class ProjectileUtilMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_kicking/BlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_kicking/BlockMixin.java index fc2b5aff..ad11b7c2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_kicking/BlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_kicking/BlockMixin.java @@ -17,6 +17,9 @@ import java.util.function.Supplier; +/** + * Mixin into {@link net.minecraft.world.level.block.Block} to transform the item entity's initial velocity when dropping items from blocks inside sub-levels. + */ @Mixin(Block.class) public abstract class BlockMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/EntityRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/EntityRendererMixin.java index 1b2de938..7478a665 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/EntityRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/EntityRendererMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.client.renderer.entity.EntityRenderer} so leash rendering correctly handles entities inside sub-levels. + */ @Mixin(EntityRenderer.class) public class EntityRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/LeashableMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/LeashableMixin.java index 100c4554..621c0cb6 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/LeashableMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_leashing/LeashableMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +/** + * Mixin into {@link net.minecraft.world.entity.Leashable} so the leash behaviour accounts for sub-level position and velocity transforms. + */ @Mixin(Leashable.class) public interface LeashableMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/FlyNodeEvaluatorMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/FlyNodeEvaluatorMixin.java index f500e8ef..b7b4d713 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/FlyNodeEvaluatorMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/FlyNodeEvaluatorMixin.java @@ -22,6 +22,9 @@ import java.util.List; +/** + * Mixin into {@link net.minecraft.world.level.pathfinder.FlyNodeEvaluator} so flying pathfinding computes the start node in local coordinates on sub-levels. + */ @Mixin(FlyNodeEvaluator.class) public abstract class FlyNodeEvaluatorMixin extends NodeEvaluator { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/GroundPathNavigationMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/GroundPathNavigationMixin.java index 8eeb87a2..94771eb7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/GroundPathNavigationMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/GroundPathNavigationMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.world.entity.ai.navigation.GroundPathNavigation} so ground pathfinding creates paths in local coordinates on sub-levels. + */ @Mixin(GroundPathNavigation.class) public abstract class GroundPathNavigationMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathMixin.java index 52baebcb..85aecf66 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.level.pathfinder.Path} to project path node positions on sub-levels back into global coordinates. + */ @Mixin(Path.class) public class PathMixin implements PathExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathNavigationMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathNavigationMixin.java index 4d3e63e2..aa0d3c43 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathNavigationMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathNavigationMixin.java @@ -26,6 +26,9 @@ import java.util.Iterator; import java.util.Set; +/** + * Mixin into {@link net.minecraft.world.entity.ai.navigation.PathNavigation} to support pathfinding inside sub-levels by converting the target to local coordinates. + */ @Mixin(PathNavigation.class) public abstract class PathNavigationMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathfindingContextMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathfindingContextMixin.java index b67f3edf..2a6c5ee8 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathfindingContextMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/PathfindingContextMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.level.pathfinder.PathfindingContext} to convert the mob's position in the pathfinding context into sub-level local coordinates. + */ @Mixin(PathfindingContext.class) public class PathfindingContextMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/RandomPosMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/RandomPosMixin.java index 8779d204..bba50a00 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/RandomPosMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/RandomPosMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +/** + * Mixin into {@link net.minecraft.world.entity.ai.util.RandomPos} so wandering target positions are generated in local coordinates on sub-levels. + */ @Mixin(RandomPos.class) public class RandomPosMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/WalkNodeEvaluatorMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/WalkNodeEvaluatorMixin.java index d911a733..16a21fd4 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/WalkNodeEvaluatorMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_pathfinding/WalkNodeEvaluatorMixin.java @@ -20,6 +20,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.world.level.pathfinder.WalkNodeEvaluator} so walking pathfinding computes the start node in local coordinates on sub-levels. + */ @Mixin(WalkNodeEvaluator.class) public abstract class WalkNodeEvaluatorMixin extends NodeEvaluator { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/EntityRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/EntityRendererMixin.java index c0fa4744..692498b2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/EntityRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/EntityRendererMixin.java @@ -28,6 +28,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.client.renderer.entity.EntityRenderer} so entity light coordinates and culling checks account for sub-levels. + */ @Mixin(EntityRenderer.class) public abstract class EntityRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/LevelRendererMixin.java index b5450c09..d669e3a5 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rendering/LevelRendererMixin.java @@ -27,6 +27,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.renderer.LevelRenderer} to render entities inside sub-levels using the sub-level's render pose. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/BlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/BlockMixin.java index 4c2b9aea..f2c88f0b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/BlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/BlockMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.level.block.Block} to rotate the landing velocity damping along with the entity's orientation. + */ @Mixin(Block.class) public class BlockMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ClientPacketListenerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ClientPacketListenerMixin.java index f402bf26..d04a20fb 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ClientPacketListenerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ClientPacketListenerMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.multiplayer.ClientPacketListener} to project the player position out of the sub-level when handling position correction packets. + */ @Mixin(ClientPacketListener.class) public class ClientPacketListenerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityMixin.java index 0a60981a..20a2e967 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityMixin.java @@ -31,6 +31,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to correctly transform entity movement, riding and saving according to the sub-level's orientation and position. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityRendererMixin.java index 32ffc342..3495a060 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityRendererMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.client.renderer.entity.EntityRenderer} to correctly orient the name tags of entities inside sub-levels. + */ @Mixin(EntityRenderer.class) public class EntityRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityTypeMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityTypeMixin.java index 1a8ac0a4..6be20d34 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityTypeMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/EntityTypeMixin.java @@ -17,6 +17,9 @@ import java.util.function.Function; +/** + * Mixin into {@link net.minecraft.world.entity.EntityType} to fix entity positions when loading and riding with sub-level vehicles. + */ @Mixin(EntityType.class) public class EntityTypeMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LivingEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LivingEntityMixin.java index 0a2ef25c..4fef31e2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LivingEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LivingEntityMixin.java @@ -24,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.LivingEntity} to correctly transform jumping and dismounting behavior on sub-levels according to orientation. + */ @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity{ diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LocalPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LocalPlayerMixin.java index 9e32066a..203b65fe 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LocalPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/LocalPlayerMixin.java @@ -26,6 +26,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.client.player.LocalPlayer} to handle the local player's riding, dismounting and flight direction on sub-level vehicles. + */ @Mixin(LocalPlayer.class) public abstract class LocalPlayerMixin extends Player { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerEntityMixin.java index bb388b2c..5c3fec12 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerEntityMixin.java @@ -13,6 +13,9 @@ import java.util.List; +/** + * Mixin into {@link net.minecraft.server.level.ServerEntity} to correctly record the passenger list of entities inside sub-levels. + */ @Mixin(ServerEntity.class) public abstract class ServerEntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerPlayerMixin.java index 880d004f..5d2cc6b4 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_rotations_and_riding/ServerPlayerMixin.java @@ -20,6 +20,9 @@ import java.util.Set; +/** + * Mixin into {@link net.minecraft.server.level.ServerPlayer} to adjust the position of sent teleport packets when riding a sub-level vehicle. + */ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin extends Player { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/AbstractMinecartMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/AbstractMinecartMixin.java index a31c7a46..845f245c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/AbstractMinecartMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/AbstractMinecartMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.vehicle.AbstractMinecart} to destroy minecarts tagged as destroy-when-leaving-plot once they leave the sub-level plot. + */ @Mixin(AbstractMinecart.class) public abstract class AbstractMinecartMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/CameraMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/CameraMixin.java index fda99dae..bd03a87b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/CameraMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/CameraMixin.java @@ -17,6 +17,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.client.Camera} to move the camera position along with the tracked or ridden sub-level. + */ @Mixin(Camera.class) public class CameraMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/EntityMixin.java index dcd86f47..dfa58dd3 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/EntityMixin.java @@ -39,6 +39,9 @@ import java.util.Iterator; import java.util.UUID; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to implement collision, tracking and inherited motion between entities and sub-levels. + */ @Mixin(value = Entity.class, priority = 1100) public abstract class EntityMixin implements EntityMovementExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ItemEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ItemEntityMixin.java index e3936d07..e01f8e0c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ItemEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ItemEntityMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.entity.item.ItemEntity} to force item entities tracking a sub-level to run physics updates more often. + */ @Mixin(ItemEntity.class) public abstract class ItemEntityMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LevelMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LevelMixin.java index 365be2a8..fd9d716a 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LevelMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LevelMixin.java @@ -6,6 +6,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.world.level.Level} to provide a pool of reusable JOML vectors for collision computation. + */ @Mixin(Level.class) public class LevelMixin implements LevelExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LivingEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LivingEntityMixin.java index f772cf8c..3ab4cd18 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LivingEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/LivingEntityMixin.java @@ -25,6 +25,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.LivingEntity} to handle inherited velocity and collision effects when mobs collide with sub-levels. + */ @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity implements LivingEntityMovementExtension { @Shadow public abstract LivingEntity.Fallsounds getFallSounds(); diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/PlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/PlayerMixin.java index 7db256ed..7debe52b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/PlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/PlayerMixin.java @@ -27,6 +27,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.world.entity.player.Player} to run the player's edge back-off check according to the sub-level's orientation. + */ @Mixin(Player.class) public abstract class PlayerMixin extends LivingEntity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ServerGamePacketListenerImplMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ServerGamePacketListenerImplMixin.java index 21ed4a44..ff644b78 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ServerGamePacketListenerImplMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_sublevel_collision/ServerGamePacketListenerImplMixin.java @@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.server.network.ServerGamePacketListenerImpl} to disable the vanilla movement check for sub-level collision. + */ @Mixin(ServerGamePacketListenerImpl.class) public class ServerGamePacketListenerImplMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_swimming/CameraMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_swimming/CameraMixin.java index 681e8c70..20ab4923 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_swimming/CameraMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_swimming/CameraMixin.java @@ -25,6 +25,9 @@ import java.util.Arrays; +/** + * Mixin into {@link net.minecraft.client.Camera} to correctly return the fog type when the camera is inside a fluid in a sub-level. + */ @Mixin(Camera.class) public abstract class CameraMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_tracking/TrackedEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_tracking/TrackedEntityMixin.java index ee8f0539..4d6b642f 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_tracking/TrackedEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/entity_tracking/TrackedEntityMixin.java @@ -9,6 +9,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.server.level.ChunkMap.TrackedEntity} to make server entity tracking transform the positions of entities inside sub-levels into global coordinates. + */ @Mixin(targets = "net.minecraft.server.level.ChunkMap$TrackedEntity") public class TrackedEntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/falling_block/FallingBlockEntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/falling_block/FallingBlockEntityMixin.java index 4646b14f..9ff97495 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/falling_block/FallingBlockEntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/falling_block/FallingBlockEntityMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.item.FallingBlockEntity} to make falling blocks check for landing in local coordinates on sub-levels. + */ @Mixin(FallingBlockEntity.class) public abstract class FallingBlockEntityMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/parrot/ParrotMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/parrot/ParrotMixin.java index dbd426e0..7fab5f3a 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/parrot/ParrotMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/parrot/ParrotMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.entity.animal.Parrot} to make parrot distance checks account for sub-levels. + */ @Mixin(Parrot.class) public abstract class ParrotMixin extends ShoulderRidingEntity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ChunkMapMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ChunkMapMixin.java index d24c1820..47837363 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ChunkMapMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ChunkMapMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.server.level.ChunkMap} to keep chunks inside plots within entity ticking range at all times. + */ @Mixin(ChunkMap.class) public class ChunkMapMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ServerLevelMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ServerLevelMixin.java index 6eabbe89..db2fa935 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ServerLevelMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/server_entities_tick/ServerLevelMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.server.level.ServerLevel} to keep chunks inside plots within entity ticking range at all times. + */ @Mixin(ServerLevel.class) public class ServerLevelMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/sublevels_block_sky/SubLevelsBlockSkyMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/sublevels_block_sky/SubLevelsBlockSkyMixin.java index 6f38334d..02551b82 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/sublevels_block_sky/SubLevelsBlockSkyMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/sublevels_block_sky/SubLevelsBlockSkyMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.entity.Mob}, {@link net.minecraft.world.entity.ai.goal.FleeSunGoal} and {@link net.minecraft.world.entity.ai.navigation.GroundPathNavigation} to make sub-levels block the sky, affecting the relevant logic. + */ @Mixin({Mob.class, FleeSunGoal.class, GroundPathNavigation.class}) public class SubLevelsBlockSkyMixin { @WrapOperation(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;canSeeSky(Lnet/minecraft/core/BlockPos;)Z")) diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tamed_teleport/TamableAnimalMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tamed_teleport/TamableAnimalMixin.java index 81cd05a8..d969b599 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tamed_teleport/TamableAnimalMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tamed_teleport/TamableAnimalMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.entity.TamableAnimal} to make tamed animals consider sub-levels when teleporting to their owner. + */ @Mixin(TamableAnimal.class) public class TamableAnimalMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/teleport_players/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/teleport_players/ServerPlayerMixin.java index d753c5e5..a895f228 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/teleport_players/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/teleport_players/ServerPlayerMixin.java @@ -12,6 +12,9 @@ import java.util.Set; +/** + * Mixin into {@link net.minecraft.server.level.ServerPlayer} to project coordinates from sub-levels to the global frame when the player teleports. + */ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tnt_jumps/PrimedTntMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tnt_jumps/PrimedTntMixin.java index cead44b5..348e278a 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tnt_jumps/PrimedTntMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/tnt_jumps/PrimedTntMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.item.PrimedTnt} to convert the initial velocity of TNT spawned inside a sub-level into local coordinates. + */ @Mixin(PrimedTnt.class) public abstract class PrimedTntMixin extends Entity { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/trident/ThrownTridentMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/trident/ThrownTridentMixin.java index a39bb4ee..03d494bb 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/entity/trident/ThrownTridentMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/entity/trident/ThrownTridentMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.projectile.ThrownTrident} to kick tridents out of sub-levels when they start returning. + */ @Mixin(ThrownTrident.class) public abstract class ThrownTridentMixin extends Entity { public ThrownTridentMixin(final EntityType entityType, final Level level) { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ExplosionMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ExplosionMixin.java index 559aef5c..0bed6ef4 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ExplosionMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ExplosionMixin.java @@ -38,6 +38,9 @@ import java.util.Optional; import java.util.Set; +/** + * Mixin into {@link net.minecraft.world.level.Explosion} to propagate blast rays into sub-levels in local space and apply impulses to the physics system. + */ @Mixin(Explosion.class) public class ExplosionMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ServerLevelMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ServerLevelMixin.java index 73005ac9..e1ca8685 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ServerLevelMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/explosion/ServerLevelMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.server.level.ServerLevel} to project explosion positions out of sub-level space before exploding. + */ @Mixin(ServerLevel.class) public abstract class ServerLevelMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/extension/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/extension/EntityMixin.java index 3743af7b..0d678bd3 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/extension/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/extension/EntityMixin.java @@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to implement {@link dev.ryanhcode.sable.mixinterface.EntityExtension}, exposing raw position setting and the vanilla collide method. + */ @Mixin(Entity.class) public abstract class EntityMixin implements EntityExtension { @Shadow diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/GameTestInfoMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/GameTestInfoMixin.java index 7808b3ec..6c5549bc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/GameTestInfoMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/GameTestInfoMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.gametest.framework.GameTestInfo} to remove intersecting sub-levels when a game test succeeds. + */ @Mixin(GameTestInfo.class) public abstract class GameTestInfoMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/StructureUtilsMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/StructureUtilsMixin.java index 9d9ec196..c41c2907 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/StructureUtilsMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/StructureUtilsMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.gametest.framework.StructureUtils} to remove sub-levels when clearing space for a structure. + */ @Mixin(StructureUtils.class) public class StructureUtilsMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/TestCommandMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/TestCommandMixin.java index 2d2db457..1ae6c495 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/TestCommandMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/game_test/TestCommandMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.gametest.framework.TestCommand} to remove intersecting sub-levels when a game test is reset. + */ @Mixin(TestCommand.class) public class TestCommandMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BeehiveBlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BeehiveBlockMixin.java index 72577842..20fb9c9b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BeehiveBlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BeehiveBlockMixin.java @@ -6,6 +6,9 @@ import net.minecraft.world.level.block.BeehiveBlock; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.world.level.block.BeehiveBlock} to attach its sub-level collision callback. + */ @Mixin(BeehiveBlock.class) public abstract class BeehiveBlockMixin implements BlockWithSubLevelCollisionCallback { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BellBlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BellBlockMixin.java index 669f23f4..2c82ac77 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BellBlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/impact/BellBlockMixin.java @@ -6,6 +6,9 @@ import net.minecraft.world.level.block.BellBlock; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.world.level.block.BellBlock} to attach its sub-level collision callback. + */ @Mixin(BellBlock.class) public abstract class BellBlockMixin implements BlockWithSubLevelCollisionCallback { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/level_accelerator/ServerChunkCacheAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/level_accelerator/ServerChunkCacheAccessor.java index ef13a107..a286041e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/level_accelerator/ServerChunkCacheAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/level_accelerator/ServerChunkCacheAccessor.java @@ -5,6 +5,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; +/** + * Invoker exposing the private getVisibleChunkIfPresent method of {@link net.minecraft.server.level.ServerChunkCache}. + */ @Mixin(ServerChunkCache.class) public interface ServerChunkCacheAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/BlockUpdatePacketMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/BlockUpdatePacketMixin.java index 16f52858..be4ff115 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/BlockUpdatePacketMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/BlockUpdatePacketMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket} to mark the affected chunk as updated for the loaded chunk debug overlay. + */ @Mixin(ClientboundBlockUpdatePacket.class) public class BlockUpdatePacketMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ChunkBorderRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ChunkBorderRendererMixin.java index a719b7c2..32c8791c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ChunkBorderRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ChunkBorderRendererMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.renderer.debug.ChunkBorderRenderer} to render the loaded chunk debug overlay when enabled. + */ @Mixin(ChunkBorderRenderer.class) public class ChunkBorderRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ClientChunkCacheStorageAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ClientChunkCacheStorageAccessor.java index 0fdd1317..4b809486 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ClientChunkCacheStorageAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/ClientChunkCacheStorageAccessor.java @@ -6,6 +6,9 @@ import org.spongepowered.asm.mixin.gen.Accessor; import java.util.concurrent.atomic.AtomicReferenceArray; +/** + * Accessor exposing the private chunks array of {@link net.minecraft.client.multiplayer.ClientChunkCache.Storage}. + */ @Mixin(ClientChunkCache.Storage.class) public interface ClientChunkCacheStorageAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/LevelChunkMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/LevelChunkMixin.java index 5f0da22b..f96ad36c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/LevelChunkMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/loaded_chunk_debug/LevelChunkMixin.java @@ -5,6 +5,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.world.level.chunk.LevelChunk} to implement {@link dev.ryanhcode.sable.mixinterface.loaded_chunk_debug.DebugLevelChunkExtension}, tracking the last update time for the debug overlay. + */ @Mixin(LevelChunk.class) public class LevelChunkMixin implements DebugLevelChunkExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/BlockMarkerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/BlockMarkerMixin.java index 28e97619..29d658ed 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/BlockMarkerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/BlockMarkerMixin.java @@ -4,6 +4,9 @@ import net.minecraft.client.particle.BlockMarker; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.client.particle.BlockMarker} to keep block marker particles from being kicked out of sub-level tracking and from colliding with the tracked sub-level. + */ @Mixin(BlockMarker.class) public class BlockMarkerMixin implements ParticleSubLevelKickable { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/FlameParticleMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/FlameParticleMixin.java index b95cb3ef..114026bc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/FlameParticleMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/FlameParticleMixin.java @@ -13,6 +13,9 @@ import org.joml.Vector3dc; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.client.particle.FlameParticle} to make flame particles move along with their tracked sub-level. + */ @Mixin(FlameParticle.class) public abstract class FlameParticleMixin extends Particle implements ParticleExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/LevelRendererMixin.java index 7dd2bcbd..dc638db7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/LevelRendererMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.client.renderer.LevelRenderer} to make the distance check when adding particles account for sub-levels. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/ParticleMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/ParticleMixin.java index a9e201ab..3ffb6892 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/ParticleMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/ParticleMixin.java @@ -44,6 +44,9 @@ import java.util.List; +/** + * Mixin into {@link net.minecraft.client.particle.Particle} to add sub-level tracking, movement, collision and light color support to particles. + */ @Mixin(Particle.class) public abstract class ParticleMixin implements ParticleExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/SuspendedParticleMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/SuspendedParticleMixin.java index e0badc3f..2f0838e5 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/SuspendedParticleMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/SuspendedParticleMixin.java @@ -8,6 +8,9 @@ import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.client.particle.SuspendedParticle} to keep suspended particles from being kicked out of sub-level tracking and to remove them when occluded by water. + */ @Mixin(SuspendedParticle.class) public abstract class SuspendedParticleMixin extends Particle implements ParticleSubLevelKickable { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/TerrainParticleMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/TerrainParticleMixin.java index 4f552c75..f3f510f7 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/particle/TerrainParticleMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/particle/TerrainParticleMixin.java @@ -21,6 +21,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.client.particle.TerrainParticle} to scale the light color of terrain particles when inside a sub-level. + */ @Mixin(TerrainParticle.class) public abstract class TerrainParticleMixin extends Particle { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/physics/ServerLevelMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/physics/ServerLevelMixin.java index 4ab4c74f..5030b4e8 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/physics/ServerLevelMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/physics/ServerLevelMixin.java @@ -5,6 +5,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.server.level.ServerLevel} to implement {@link dev.ryanhcode.sable.mixinterface.physics.ServerLevelSceneExtension}, holding the physics scene ID. + */ @Mixin(ServerLevel.class) public class ServerLevelMixin implements ServerLevelSceneExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/LocalPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/LocalPlayerMixin.java index 8ac46679..eec27aa2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/LocalPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/LocalPlayerMixin.java @@ -14,6 +14,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.client.player.LocalPlayer} to freeze client ticking while frozen to a sub-level that is not yet finalized. + */ @Mixin(LocalPlayer.class) public abstract class LocalPlayerMixin extends Player implements PlayerFreezeExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerListMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerListMixin.java index 0d3d6a90..cec63ba5 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerListMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerListMixin.java @@ -17,6 +17,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.server.players.PlayerList} to send the freeze packet on join and carry the frozen state across respawns. + */ @Mixin(PlayerList.class) public class PlayerListMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerMixin.java index 0d98116c..be1589f9 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/PlayerMixin.java @@ -20,6 +20,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.world.entity.player.Player} to implement {@link dev.ryanhcode.sable.mixinterface.player_freezing.PlayerFreezeExtension}, managing the frozen-to sub-level state and teleporting on finalization. + */ @Mixin(Player.class) public abstract class PlayerMixin extends Entity implements PlayerFreezeExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/ServerPlayerMixin.java index 58be3f01..80dfad44 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/player_freezing/ServerPlayerMixin.java @@ -17,6 +17,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.server.level.ServerPlayer} to keep frozen players tracked to their sub-level and teleport them once it becomes available. + */ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin extends Player implements PlayerFreezeExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/player_standup/PlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/player_standup/PlayerMixin.java index c92d306d..77210f06 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/player_standup/PlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/player_standup/PlayerMixin.java @@ -10,6 +10,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.entity.player.Player} to also check sub-level blocks when determining whether a player can stand up. + */ @Mixin(Player.class) public class PlayerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/MinecraftMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/MinecraftMixin.java index 1f6bcd7e..ef77e3a2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/MinecraftMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/MinecraftMixin.java @@ -11,6 +11,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Runs the network event queue and advances the plot container during the client tick. + */ @Mixin(Minecraft.class) public class MinecraftMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/BlockAndTintGetterMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/BlockAndTintGetterMixin.java index 888e5bb5..e3293aa3 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/BlockAndTintGetterMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/BlockAndTintGetterMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +/** + * Makes brightness queries inside plots use the plot's own light engine. + */ @Mixin(BlockAndTintGetter.class) public interface BlockAndTintGetterMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/ClientPacketListenerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/ClientPacketListenerMixin.java index efc4ecb7..61774089 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/ClientPacketListenerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/ClientPacketListenerMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Makes chunk light updates inside plots run immediately when their packets are received. + */ @Mixin(ClientPacketListener.class) public class ClientPacketListenerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/LevelChunkMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/LevelChunkMixin.java index 50deb318..44efd193 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/LevelChunkMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/LevelChunkMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Makes block updates of chunks inside plots use the plot's light engine. + */ @Mixin(LevelChunk.class) public class LevelChunkMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/RenderChunkRegionMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/RenderChunkRegionMixin.java index 3265582b..f08bec17 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/RenderChunkRegionMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/lighting/RenderChunkRegionMixin.java @@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Makes render chunk regions implement {@link SubLevelContainerHolder}, exposing their plot container. + */ @Mixin(RenderChunkRegion.class) public class RenderChunkRegionMixin implements SubLevelContainerHolder { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/ChunkMapMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/ChunkMapMixin.java index e4ace63a..bcf4920c 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/ChunkMapMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/ChunkMapMixin.java @@ -29,6 +29,9 @@ import java.util.concurrent.Executor; import java.util.function.Supplier; +/** + * Makes the chunk map use a concurrent unload queue and syncs chunk status changes to the sub-level storage. + */ @Mixin(ChunkMap.class) public class ChunkMapMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/LevelChunkTicksMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/LevelChunkTicksMixin.java index 099f384a..740542f0 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/LevelChunkTicksMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/plot/serialization/LevelChunkTicksMixin.java @@ -12,6 +12,9 @@ import java.util.List; import java.util.Set; +/** + * Provides {@link LevelChunkTicks} with the ability to copy scheduled ticks, used for sub-level chunk serialization. + */ @Mixin(LevelChunkTicks.class) public class LevelChunkTicksMixin implements LevelChunkTicksExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/portal/NetherPortalBlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/portal/NetherPortalBlockMixin.java index 87eca100..250a8641 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/portal/NetherPortalBlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/portal/NetherPortalBlockMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.world.level.block.NetherPortalBlock} to compute portal destinations from coordinates projected out of sub-level space. + */ @Mixin(NetherPortalBlock.class) public class NetherPortalBlockMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_freezing/BiomeMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_freezing/BiomeMixin.java index 6842e50c..dcb3dec3 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_freezing/BiomeMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_freezing/BiomeMixin.java @@ -12,6 +12,9 @@ import net.minecraft.world.level.biome.Biome; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.world.level.biome.Biome} to prevent water from freezing beneath sub-level blocks projected into the same space. + */ @Mixin(Biome.class) public class BiomeMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_overgrowth/VineBlockMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_overgrowth/VineBlockMixin.java index 590f7755..ba9f3036 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_overgrowth/VineBlockMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/prevent_overgrowth/VineBlockMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.level.block.VineBlock} to stop vines growing inside a sub-level from spreading beyond its plot bounds. + */ @Mixin(VineBlock.class) public class VineBlockMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/ItemInvoker.java b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/ItemInvoker.java index 175ac27e..17a15c42 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/ItemInvoker.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/ItemInvoker.java @@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; +/** + * Invoker exposing the static private getPlayerPOVHitResult method of {@link net.minecraft.world.item.Item}. + */ @Mixin(Item.class) public interface ItemInvoker { @Invoker("getPlayerPOVHitResult") diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MinecraftMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MinecraftMixin.java index 009a7da4..ae7a5a40 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MinecraftMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MinecraftMixin.java @@ -17,6 +17,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.client.Minecraft} to attempt a sub-level paddle punch when attacking with a paddle item. + */ @Mixin(Minecraft.class) public abstract class MinecraftMixin { @Shadow diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MultiPlayerGameModeMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MultiPlayerGameModeMixin.java index cfcbc2e8..f04c4fba 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MultiPlayerGameModeMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/punching/MultiPlayerGameModeMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.client.multiplayer.MultiPlayerGameMode} to also try punching sub-level blocks when starting to destroy a block. + */ @Mixin(MultiPlayerGameMode.class) public class MultiPlayerGameModeMixin { @Shadow diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/sleeping/LivingEntityRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/sleeping/LivingEntityRendererMixin.java index 6a103932..82ef0a03 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/sleeping/LivingEntityRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/respawn_point/sleeping/LivingEntityRendererMixin.java @@ -17,6 +17,9 @@ import java.util.Optional; +/** + * Mixin into {@link net.minecraft.client.renderer.entity.LivingEntityRenderer} to rotate a sleeping entity's render pose into the sub-level orientation. + */ @Mixin(LivingEntityRenderer.class) public class LivingEntityRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/EuclideanGameEventListenerRegistryMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/EuclideanGameEventListenerRegistryMixin.java index 25bb103f..4ab32271 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/EuclideanGameEventListenerRegistryMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/EuclideanGameEventListenerRegistryMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.world.level.gameevent.EuclideanGameEventListenerRegistry} to compute listener distances across sub-level poses. + */ @Mixin(EuclideanGameEventListenerRegistry.class) public class EuclideanGameEventListenerRegistryMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/GameEventDispatcherMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/GameEventDispatcherMixin.java index 5879161a..61a033fa 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/GameEventDispatcherMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/GameEventDispatcherMixin.java @@ -25,6 +25,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.level.gameevent.GameEventDispatcher} to propagate game events into intersecting sub-levels with local-space positions and bounds. + */ @Mixin(GameEventDispatcher.class) public class GameEventDispatcherMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemListenerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemListenerMixin.java index 7b2adcc5..da039932 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemListenerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemListenerMixin.java @@ -13,6 +13,9 @@ import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.minecraft.world.level.gameevent.vibrations.VibrationSystem.Listener} to project vibration positions into global space and check occlusion across sub-levels. + */ @Mixin(VibrationSystem.Listener.class) public class VibrationSystemListenerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemTickerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemTickerMixin.java index 1f174211..6841113e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemTickerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sculk_vibrations/VibrationSystemTickerMixin.java @@ -16,6 +16,9 @@ import java.util.Optional; +/** + * Mixin into {@link net.minecraft.world.level.gameevent.vibrations.VibrationSystem.Ticker} to project vibration positions and destination sources into global space. + */ @Mixin(VibrationSystem.Ticker.class) public interface VibrationSystemTickerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/stop_rain/LevelRenderMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/stop_rain/LevelRenderMixin.java index f17ef5b7..c28a9c6e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/stop_rain/LevelRenderMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/stop_rain/LevelRenderMixin.java @@ -19,6 +19,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link net.minecraft.client.renderer.LevelRenderer} to include sub-level blocks when computing the height used for rain and splash rendering. + */ @Mixin(LevelRenderer.class) public class LevelRenderMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/BlockEntityRenderDispatcherMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/BlockEntityRenderDispatcherMixin.java index c9b9bd96..06595fac 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/BlockEntityRenderDispatcherMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/BlockEntityRenderDispatcherMixin.java @@ -15,6 +15,9 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Makes block entity render light colors account for sub-levels and uses the sub-level local camera position for visibility checks. + */ @Mixin(BlockEntityRenderDispatcher.class) public abstract class BlockEntityRenderDispatcherMixin implements BlockEntityRenderDispatcherExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/LevelRendererMixin.java index b22388f2..33c87178 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/LevelRendererMixin.java @@ -19,6 +19,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Rebuilds and renders sub-level data during the level render pipeline. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/RenderSectionAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/RenderSectionAccessor.java index ac7a9c4f..f3722b15 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/RenderSectionAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/RenderSectionAccessor.java @@ -7,6 +7,9 @@ import java.util.Set; +/** + * Exposes an accessor for the global block entity set of {@link SectionRenderDispatcher.RenderSection}. + */ @Mixin(SectionRenderDispatcher.RenderSection.class) public interface RenderSectionAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/block_entity_render/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/block_entity_render/LevelRendererMixin.java index 95944a70..85f78048 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/block_entity_render/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/block_entity_render/LevelRendererMixin.java @@ -39,6 +39,9 @@ import java.util.List; import java.util.SortedSet; +/** + * Renders block entities inside sub-levels with the sub-level transform when rendering the level. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/fancy/ProgramMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/fancy/ProgramMixin.java index 9b7f37f7..cb0a2fba 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/fancy/ProgramMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/fancy/ProgramMixin.java @@ -7,6 +7,9 @@ import static org.lwjgl.opengl.GL20C.glGetShaderSource; +/** + * Provides {@link Program} with shader source access for fancy rendering parsing. + */ @Mixin(Program.class) public class ProgramMixin implements ProgramExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/LevelRendererMixin.java index a8da06ce..1bcc2dda 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/LevelRendererMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +/** + * On the Sodium render path, makes the chunk compiled-state check apply to chunks inside sub-levels. + */ @Mixin(value = LevelRenderer.class, priority = 1002) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/SodiumWorldRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/SodiumWorldRendererMixin.java index 07f5587b..aabd0718 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/SodiumWorldRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/sodium/SodiumWorldRendererMixin.java @@ -35,6 +35,9 @@ import java.util.List; import java.util.Objects; +/** + * On the Sodium render path, wires sub-levels into terrain building, culling and chunk layer rendering. + */ @Mixin(value = SodiumWorldRenderer.class, remap = false) public abstract class SodiumWorldRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/LevelRendererMixin.java index faf750d6..398996c2 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/LevelRendererMixin.java @@ -37,6 +37,9 @@ import java.util.Objects; +/** + * On the vanilla render path, wires sub-levels into chunk compilation, culling and chunk layer rendering. + */ @Mixin(value = LevelRenderer.class, priority = 1002) // Higher priority to go after Flywheel public abstract class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/water_occlusion/LevelRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/water_occlusion/LevelRendererMixin.java index 68fafa3c..af3a5a95 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/water_occlusion/LevelRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_render/impl/vanilla/water_occlusion/LevelRendererMixin.java @@ -12,6 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Routes translucent chunk layer rendering through the water occlusion renderer to implement sub-level water occlusion. + */ @Mixin(LevelRenderer.class) public class LevelRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/AbstractSoundInstanceMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/AbstractSoundInstanceMixin.java index 0640a958..0b912d61 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/AbstractSoundInstanceMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/AbstractSoundInstanceMixin.java @@ -6,6 +6,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link net.minecraft.client.resources.sounds.AbstractSoundInstance} to implement {@link dev.ryanhcode.sable.sound.SoundInstanceDelegated}, holding a moving sound delegate. + */ @Mixin(AbstractSoundInstance.class) public class AbstractSoundInstanceMixin implements SoundInstanceDelegated { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/ChannelAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/ChannelAccessor.java index 48c484e8..144c0d31 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/ChannelAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/ChannelAccessor.java @@ -4,6 +4,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +/** + * Accessor exposing the private source field of {@link com.mojang.blaze3d.audio.Channel}. + */ @Mixin(Channel.class) public interface ChannelAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/SoundEngineMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/SoundEngineMixin.java index 9f3d7d54..8744e5ab 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/SoundEngineMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/sublevel_sounds/SoundEngineMixin.java @@ -21,6 +21,9 @@ import java.util.Iterator; +/** + * Mixin into {@link net.minecraft.client.sounds.SoundEngine} to wrap sounds inside sub-levels in a moving delegate that follows the sub-level's motion. + */ @Mixin(SoundEngine.class) public class SoundEngineMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/toast/IntegratedServerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/toast/IntegratedServerMixin.java index 2b3cc916..bf4d2212 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/toast/IntegratedServerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/toast/IntegratedServerMixin.java @@ -14,6 +14,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link net.minecraft.client.server.IntegratedServer} to implement {@link dev.ryanhcode.sable.mixinterface.toast.SableToastableServer}, showing toasts for sub-level load/save/physics failures. + */ @Mixin(IntegratedServer.class) public class IntegratedServerMixin implements SableToastableServer { @Shadow @Final private Minecraft minecraft; diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/EntityMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/EntityMixin.java index 4d957a46..64d8ec53 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/EntityMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/EntityMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} to restore a player's position from a saved tracking point on load, freezing them into the corresponding sub-level. + */ @Mixin(Entity.class) public abstract class EntityMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/ServerPlayerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/ServerPlayerMixin.java index eaa58880..8ab49675 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/ServerPlayerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/tracking_points/ServerPlayerMixin.java @@ -12,6 +12,9 @@ import java.util.UUID; +/** + * Mixin into {@link net.minecraft.server.level.ServerPlayer} to generate and store a tracking point when saving player data. + */ @Mixin(ServerPlayer.class) public abstract class ServerPlayerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ConnectionMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ConnectionMixin.java index 80a8722b..f72e72fc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ConnectionMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ConnectionMixin.java @@ -25,6 +25,9 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; +/** + * Mixin into {@link net.minecraft.network.Connection} to implement {@link dev.ryanhcode.sable.mixinterface.udp.ConnectionExtension}, opening a UDP channel for sub-level packet streaming on connect and closing it on disconnect. + */ @Mixin(Connection.class) public abstract class ConnectionMixin implements ConnectionExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/MinecraftServerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/MinecraftServerMixin.java index b1107665..30fd3778 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/MinecraftServerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/MinecraftServerMixin.java @@ -10,6 +10,9 @@ import java.util.function.BooleanSupplier; +/** + * Mixin into {@link net.minecraft.server.MinecraftServer} to periodically send pings keeping the UDP sockets alive. + */ @Mixin(MinecraftServer.class) public class MinecraftServerMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ServerConnectionListenerMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ServerConnectionListenerMixin.java index f3df9e77..c90fd81f 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ServerConnectionListenerMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/udp/ServerConnectionListenerMixin.java @@ -30,6 +30,9 @@ import java.net.SocketAddress; import java.util.List; +/** + * Mixin into {@link net.minecraft.server.network.ServerConnectionListener} to implement {@link dev.ryanhcode.sable.mixinterface.udp.ServerConnectionListenerExtension}, starting the UDP server channels alongside the TCP listener. + */ @Mixin(ServerConnectionListener.class) public class ServerConnectionListenerMixin implements ServerConnectionListenerExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/BitSetDiscreteVoxelShapeAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/BitSetDiscreteVoxelShapeAccessor.java index c71fa921..da721a92 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/BitSetDiscreteVoxelShapeAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/BitSetDiscreteVoxelShapeAccessor.java @@ -7,6 +7,9 @@ import java.util.BitSet; +/** + * Accessor and invoker interface exposing the private storage field and strip-rectangle methods of {@link net.minecraft.world.phys.shapes.BitSetDiscreteVoxelShape}. + */ @Mixin(BitSetDiscreteVoxelShape.class) public interface BitSetDiscreteVoxelShapeAccessor extends DiscreteVoxelShapeAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/DiscreteVoxelShapeAccessor.java b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/DiscreteVoxelShapeAccessor.java index 11e1e0b8..0025733b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/DiscreteVoxelShapeAccessor.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/DiscreteVoxelShapeAccessor.java @@ -4,6 +4,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +/** + * Accessor exposing the private x/y/z size fields of {@link net.minecraft.world.phys.shapes.DiscreteVoxelShape}. + */ @Mixin(DiscreteVoxelShape.class) public interface DiscreteVoxelShapeAccessor { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/VoxelShapeMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/VoxelShapeMixin.java index ac6b9d06..453a2432 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/VoxelShapeMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/voxel_shape_iteration/VoxelShapeMixin.java @@ -16,6 +16,9 @@ import java.util.Iterator; +/** + * Mixin into {@link net.minecraft.world.phys.shapes.VoxelShape} to implement {@link dev.ryanhcode.sable.mixinterface.voxel_shape_iteration.FastVoxelShapeIterable}, providing a fast per-thread iterator over the shape's bounding boxes. + */ @Mixin(VoxelShape.class) public abstract class VoxelShapeMixin implements FastVoxelShapeIterable { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/CameraMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/CameraMixin.java index f53f2349..40df0c91 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/CameraMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/CameraMixin.java @@ -13,6 +13,9 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Makes the camera stop returning underwater fog types when inside a water-occluded area. + */ @Mixin(Camera.class) public class CameraMixin implements CameraWaterOcclusionExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/GameRendererMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/GameRendererMixin.java index 9a10ce07..c2d4a87e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/GameRendererMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/water_occlusion/GameRendererMixin.java @@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Updates the water occlusion manager at the start of each frame render. + */ @Mixin(GameRenderer.class) public class GameRendererMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/LevelMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/LevelMixin.java index 217c107f..2b82486b 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/LevelMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/LevelMixin.java @@ -16,6 +16,9 @@ import java.util.function.Supplier; +/** + * Mixin into {@link net.minecraft.world.level.Level} to bind the level to its world border extension for sub-level-aware border checks. + */ @Mixin(Level.class) public class LevelMixin { diff --git a/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/WorldBorderMixin.java b/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/WorldBorderMixin.java index 1d028dea..1f2e39dc 100644 --- a/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/WorldBorderMixin.java +++ b/common/src/main/java/dev/ryanhcode/sable/mixin/world_border/WorldBorderMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.minecraft.world.level.border.WorldBorder} to implement {@link dev.ryanhcode.sable.mixinterface.world_border.WorldBorderExtension}, treating sub-level plots as within bounds. + */ @Mixin(WorldBorder.class) public class WorldBorderMixin implements WorldBorderExtension { diff --git a/common/src/main/java/dev/ryanhcode/sable/platform/SableAssemblyPlatform.java b/common/src/main/java/dev/ryanhcode/sable/platform/SableAssemblyPlatform.java index 9ffa4345..8e28f578 100644 --- a/common/src/main/java/dev/ryanhcode/sable/platform/SableAssemblyPlatform.java +++ b/common/src/main/java/dev/ryanhcode/sable/platform/SableAssemblyPlatform.java @@ -3,6 +3,9 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.ApiStatus; +/** + * Loader-specific hooks for block assembly behaviour, such as suppressing block place events while assembling. + */ @ApiStatus.Internal public interface SableAssemblyPlatform { SableAssemblyPlatform INSTANCE = SablePlatformUtil.load(SableAssemblyPlatform.class); diff --git a/common/src/main/java/dev/ryanhcode/sable/platform/SableChunkEventPlatform.java b/common/src/main/java/dev/ryanhcode/sable/platform/SableChunkEventPlatform.java index b7e009c1..a62aaa5e 100644 --- a/common/src/main/java/dev/ryanhcode/sable/platform/SableChunkEventPlatform.java +++ b/common/src/main/java/dev/ryanhcode/sable/platform/SableChunkEventPlatform.java @@ -3,6 +3,9 @@ import net.minecraft.world.level.chunk.LevelChunk; import org.jetbrains.annotations.ApiStatus; +/** + * Loader-specific events fired around chunk loading/unloading for sub-level plots. + */ @ApiStatus.Internal public interface SableChunkEventPlatform { SableChunkEventPlatform INSTANCE = SablePlatformUtil.load(SableChunkEventPlatform.class); diff --git a/common/src/main/java/dev/ryanhcode/sable/platform/SablePlatformUtil.java b/common/src/main/java/dev/ryanhcode/sable/platform/SablePlatformUtil.java index 6b1ce2a8..bbe3af93 100644 --- a/common/src/main/java/dev/ryanhcode/sable/platform/SablePlatformUtil.java +++ b/common/src/main/java/dev/ryanhcode/sable/platform/SablePlatformUtil.java @@ -2,6 +2,9 @@ import java.util.ServiceLoader; +/** + * Resolves the loader-specific implementation of a {@link SablePlatform} interface via {@link ServiceLoader}. + */ public class SablePlatformUtil { public static T load(Class clazz) { return ServiceLoader.load(clazz, SablePlatformUtil.class.getClassLoader()) diff --git a/common/src/main/java/dev/ryanhcode/sable/platform/SablePlotPlatform.java b/common/src/main/java/dev/ryanhcode/sable/platform/SablePlotPlatform.java index 64f44b9c..055ddaa8 100644 --- a/common/src/main/java/dev/ryanhcode/sable/platform/SablePlotPlatform.java +++ b/common/src/main/java/dev/ryanhcode/sable/platform/SablePlotPlatform.java @@ -4,6 +4,9 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.chunk.LevelChunk; +/** + * Loader-specific serialization hooks for reading and writing chunk light data and attachments of sub-level plots. + */ public interface SablePlotPlatform { SablePlotPlatform INSTANCE = SablePlatformUtil.load(SablePlotPlatform.class); diff --git a/common/src/main/java/dev/ryanhcode/sable/platform/SableSubLevelRenderPlatform.java b/common/src/main/java/dev/ryanhcode/sable/platform/SableSubLevelRenderPlatform.java index a2490ed2..ce5baa67 100644 --- a/common/src/main/java/dev/ryanhcode/sable/platform/SableSubLevelRenderPlatform.java +++ b/common/src/main/java/dev/ryanhcode/sable/platform/SableSubLevelRenderPlatform.java @@ -14,6 +14,9 @@ import java.util.List; +/** + * Loader-specific render hooks for tessellating sub-level blocks and attaching renderer-specific visuals. + */ @ApiStatus.Internal public interface SableSubLevelRenderPlatform { SableSubLevelRenderPlatform INSTANCE = SablePlatformUtil.load(SableSubLevelRenderPlatform.class); diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelChunkMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelChunkMixin.java index 55a24ef5..daab6b67 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelChunkMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelChunkMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Fabric mixin into {@link LevelChunk} to skip {@link BlockState#onPlace} events while blocks are being assembled + * into a sub-level. + */ @Mixin(LevelChunk.class) public class LevelChunkMixin { diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelMixin.java index 3120399e..0b8556df 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/assembly/LevelMixin.java @@ -5,6 +5,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Fabric mixin into {@link Level} to add the {@link LevelExtension} interface, tracking whether {@code onPlace} + * events should be ignored while assembling sub-levels. + */ @Mixin(Level.class) public class LevelMixin implements LevelExtension { diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/camera_rotation/CameraMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/camera_rotation/CameraMixin.java index b84b2735..334d4af3 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/camera_rotation/CameraMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/camera_rotation/CameraMixin.java @@ -16,6 +16,9 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Fabric mixin into {@link Camera} to rotate the player camera with the sub-level they are riding or standing on. + */ @Mixin(Camera.class) public abstract class CameraMixin { diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/dynamic_directional_shading/SectionCompilerMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/dynamic_directional_shading/SectionCompilerMixin.java index 5a5034d2..15008af1 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/dynamic_directional_shading/SectionCompilerMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/dynamic_directional_shading/SectionCompilerMixin.java @@ -16,6 +16,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Fabric mixin into {@link SectionCompiler} to switch the model renderer cache to sub-level mode while compiling + * chunk sections that belong to a sub-level plot. + */ @Mixin(SectionCompiler.class) public class SectionCompilerMixin { diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/fix_bundle_packet/ClientPacketListenerMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/fix_bundle_packet/ClientPacketListenerMixin.java index af972b10..e1bb241c 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/fix_bundle_packet/ClientPacketListenerMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/fix_bundle_packet/ClientPacketListenerMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Fabric mixin into {@link ClientPacketListener} that disables the main-thread re-dispatch of bundle packets, as the + * sub-level packet handling already runs on the correct thread. + */ @Mixin(ClientPacketListener.class) public class ClientPacketListenerMixin { diff --git a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/sound/MovingSoundInstanceDelegateMixin.java b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/sound/MovingSoundInstanceDelegateMixin.java index e42e812b..0a0901fd 100644 --- a/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/sound/MovingSoundInstanceDelegateMixin.java +++ b/fabric/src/main/java/dev/ryanhcode/sable/fabric/mixin/sound/MovingSoundInstanceDelegateMixin.java @@ -10,6 +10,10 @@ import java.util.concurrent.CompletableFuture; +/** + * Fabric mixin into {@link MovingSoundInstanceDelegate} to make the delegate implement {@link SoundInstance} and + * forward audio stream loading to the wrapped sound instance. + */ @Mixin(MovingSoundInstanceDelegate.class) public abstract class MovingSoundInstanceDelegateMixin implements SoundInstance { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/LevelRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/LevelRendererMixin.java index 7352df0a..52dba20d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/LevelRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/block_entity_visible/LevelRendererMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.minecraft.client.renderer.LevelRenderer} to make block entity render visibility checks account for sub-levels. + */ + @Mixin(value = LevelRenderer.class, priority = 2000) public class LevelRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java index 61cc7338..d022e4c4 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/camera_rotation/CameraMixin.java @@ -24,6 +24,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.client.Camera} to correctly rotate and position the camera when riding sub-level machinery. + */ + @Mixin(Camera.class) public abstract class CameraMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/backpacks/BackpackPickupEventsMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/backpacks/BackpackPickupEventsMixin.java index bebe345c..c8138c74 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/backpacks/BackpackPickupEventsMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/backpacks/BackpackPickupEventsMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +/** + * Compatibility mixin for {@link com.spydnel.backpacks.events.BackpackPickupEvents} (Backpacks for Dummies), making backpack pickup checks account for sub-levels. + */ + @Mixin(BackpackPickupEvents.class) public class BackpackPickupEventsMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/AirCurrentMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/AirCurrentMixin.java index d5f9fca2..b009b885 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/AirCurrentMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/AirCurrentMixin.java @@ -26,6 +26,10 @@ import java.lang.ref.WeakReference; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.AirCurrent} so fan airflow correctly pushes entities in sub-levels. + */ + @Mixin(AirCurrent.class) public abstract class AirCurrentMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/FanProcessingTypeMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/FanProcessingTypeMixin.java index 28a1223f..8a3b2ec9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/FanProcessingTypeMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/airflow/FanProcessingTypeMixin.java @@ -9,6 +9,10 @@ import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.processing.FanProcessingType} so fan processing can resolve blocks in sub-levels. + */ + @Mixin(FanProcessingType.class) public interface FanProcessingTypeMixin { @WrapMethod(method = "getAt") diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinBlockEntityMixin.java index 957c20fb..df36f8c6 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinBlockEntityMixin.java @@ -18,6 +18,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link com.simibubi.create.content.processing.basin.BasinBlockEntity} so the basin can find heat sources in sub-levels. + */ + @Mixin(BasinBlockEntity.class) public class BasinBlockEntityMixin extends BlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinOperatingBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinOperatingBlockEntityMixin.java index d1362efc..ee00b98b 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinOperatingBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/basin_interactions/BasinOperatingBlockEntityMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.processing.basin.BasinOperatingBlockEntity} to locate basins in sub-levels and force periodic updates. + */ + @Mixin(BasinOperatingBlockEntity.class) public abstract class BasinOperatingBlockEntityMixin { @Shadow diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/BlockEntityBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/BlockEntityBehaviourMixin.java index 9dc6638b..540e6db1 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/BlockEntityBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/BlockEntityBehaviourMixin.java @@ -20,6 +20,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour} to find behaviours on block entities in sub-levels. + */ + @Mixin(BlockEntityBehaviour.class) public abstract class BlockEntityBehaviourMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java index 97570110..6b0bb8bd 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/BlockBreakingMovementBehaviourMixin.java @@ -27,6 +27,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour} so contraption block breaking can locate targets in sub-levels. + */ + @Mixin(BlockBreakingMovementBehaviour.class) public abstract class BlockBreakingMovementBehaviourMixin implements MovementBehaviour { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/SawMovementBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/SawMovementBehaviourMixin.java index 27d73b00..f9b64ca5 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/SawMovementBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/block_breaking_behaviour/SawMovementBehaviourMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.saw.SawMovementBehaviour} so saw drop item speed and distance calculations are correct across sub-levels. + */ + @Mixin(SawMovementBehaviour.class) public class SawMovementBehaviourMixin { @Redirect(method = "dropItemFromCutTree", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;distanceTo(Lnet/minecraft/world/phys/Vec3;)D")) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_behaviour/HarvesterMovementBehaviourMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_behaviour/HarvesterMovementBehaviourMixin.java index 72d4de11..6a6b27db 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_behaviour/HarvesterMovementBehaviourMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_behaviour/HarvesterMovementBehaviourMixin.java @@ -10,6 +10,10 @@ import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.actors.harvester.HarvesterMovementBehaviour} so harvesting can check target positions in sub-levels. + */ + @Mixin(HarvesterMovementBehaviour.class) public class HarvesterMovementBehaviourMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityMixin.java index 02357aa4..c742323d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.actors.harvester.HarvesterBlockEntity} to add client and sub-level ticks that drive the harvester. + */ + @Mixin(HarvesterBlockEntity.class) public abstract class HarvesterBlockEntityMixin extends CachedRenderBBBlockEntity implements HarvesterLerpedSpeed, BlockEntitySubLevelActor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityUsageMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityUsageMixin.java index 0cc64efb..5b0fb610 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityUsageMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockEntityUsageMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.actors.harvester.HarvesterMovementBehaviour} to handle item drops for static sub-level harvesters. + */ + @Mixin(HarvesterMovementBehaviour.class) public class HarvesterBlockEntityUsageMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockMixin.java index 8ba2c3cf..88221cfa 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterBlockMixin.java @@ -12,6 +12,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.actors.harvester.HarvesterBlock} to provide a custom client ticker for the harvester. + */ + @Mixin(HarvesterBlock.class) public abstract class HarvesterBlockMixin extends AttachedActorBlock implements IBE { protected HarvesterBlockMixin(final Properties properties) { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterRendererMixin.java index d3ff2316..45f7f05a 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/behaviour_compatibility/harvester_block_entity/HarvesterRendererMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.actors.harvester.HarvesterRenderer} to drive harvester animations with smoothed sub-level speed. + */ + @Mixin(HarvesterRenderer.class) public class HarvesterRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltBlockEntityMixin.java index 52626340..985c124c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltBlockEntityMixin.java @@ -13,6 +13,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.belt.BeltBlockEntity} to wake up physics objects when the belt speed changes. + */ + @Mixin(BeltBlockEntity.class) public abstract class BeltBlockEntityMixin extends KineticBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltMovementHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltMovementHandlerMixin.java index 35e319c5..2dfd119c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltMovementHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/belt/BeltMovementHandlerMixin.java @@ -18,6 +18,10 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.belt.transport.BeltMovementHandler} so belts correctly transport entities in sub-levels. + */ + @Mixin(BeltMovementHandler.class) public class BeltMovementHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blaze_burner/BlazeBurnerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blaze_burner/BlazeBurnerBlockEntityMixin.java index bb2e3c5d..5d6b7851 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blaze_burner/BlazeBurnerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blaze_burner/BlazeBurnerBlockEntityMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.processing.burner.BlazeBurnerBlockEntity} to project the player position into sub-levels to drive animations. + */ + @Mixin(BlazeBurnerBlockEntity.class) public abstract class BlazeBurnerBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/block_breakers/BlockBreakingKineticBlockEntityDamageMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/block_breakers/BlockBreakingKineticBlockEntityDamageMixin.java index 17245a92..fcaa9522 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/block_breakers/BlockBreakingKineticBlockEntityDamageMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/block_breakers/BlockBreakingKineticBlockEntityDamageMixin.java @@ -18,6 +18,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.saw.SawBlock} and {@link com.simibubi.create.content.kinetics.drill.DrillBlock} to compute damage checks against entities in sub-levels using oriented bounding boxes. + */ + @Mixin({SawBlock.class, DrillBlock.class}) public class BlockBreakingKineticBlockEntityDamageMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blueprint/BlueprintEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blueprint/BlueprintEntityMixin.java index d46bfa9c..59be673f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blueprint/BlueprintEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/blueprint/BlueprintEntityMixin.java @@ -9,6 +9,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +/** + * Mixin into {@link com.simibubi.create.content.equipment.blueprint.BlueprintEntity} (Create < 6.0.11) to use the sub-level aware Player#canInteractWithEntity check. + */ + @MixinModVersionConstraint("(,6.0.11)") @Mixin(BlueprintEntity.class) public abstract class BlueprintEntityMixin extends Entity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockEntityMixin.java index 71831659..d9005c4e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockEntityMixin.java @@ -13,6 +13,10 @@ import java.util.List; import java.util.Map; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity} to drop travelling packages when a connection is removed. + */ + @Mixin(ChainConveyorBlockEntity.class) public abstract class ChainConveyorBlockEntityMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockMixin.java index 467d746c..339b32a9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/chain_conveyor/ChainConveyorBlockMixin.java @@ -8,6 +8,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlock} to re-validate connections on connected conveyors after moving into a sub-level. + */ + @Mixin(ChainConveyorBlock.class) public class ChainConveyorBlockMixin implements BlockSubLevelAssemblyListener { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java index 08ced754..26734b04 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/AbstractContraptionEntityMixin.java @@ -46,6 +46,10 @@ import java.util.List; import java.util.Map; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.AbstractContraptionEntity} to connect Create contraptions to sub-level physics as kinematic rigid bodies. + */ + @Mixin(AbstractContraptionEntity.class) public abstract class AbstractContraptionEntityMixin extends Entity implements KinematicContraption { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/ContraptionColliderMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/ContraptionColliderMixin.java index 4b77a68c..c640e5c0 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/ContraptionColliderMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/ContraptionColliderMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.ContraptionCollider} so Create contraptions interact with sub-levels. + */ + @Mixin(value = ContraptionCollider.class, remap = false) public class ContraptionColliderMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/Matrix3dAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/Matrix3dAccessor.java index 427ed199..966a9777 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/Matrix3dAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/Matrix3dAccessor.java @@ -4,6 +4,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +/** + * Mixin into {@link com.simibubi.create.foundation.collision.Matrix3d} to expose matrix elements for sub-level transforms. + */ + @Mixin(Matrix3d.class) public interface Matrix3dAccessor { @Accessor("m00") diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/VisualizationEventHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/VisualizationEventHandlerMixin.java index 8128a8e2..e3057073 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/VisualizationEventHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/contraptions/VisualizationEventHandlerMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link dev.engine_room.flywheel.impl.visualization.VisualizationEventHandler} to create Flywheel render info when an entity joins a sub-level. + */ + @Mixin(VisualizationEventHandler.class) public class VisualizationEventHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel/CrushingWheelBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel/CrushingWheelBlockMixin.java index 6dea2537..446b9ba3 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel/CrushingWheelBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel/CrushingWheelBlockMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.crusher.CrushingWheelBlock} so crushing wheels correctly push entities in sub-levels. + */ + @Mixin(CrushingWheelBlock.class) public abstract class CrushingWheelBlockMixin extends RotatedPillarKineticBlock implements IBE { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel_entity_processing/CrushingWheelControllerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel_entity_processing/CrushingWheelControllerBlockEntityMixin.java index 7ee2b01c..b415253e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel_entity_processing/CrushingWheelControllerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/crushing_wheel_entity_processing/CrushingWheelControllerBlockEntityMixin.java @@ -19,6 +19,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.crusher.CrushingWheelControllerBlockEntity} so the crushing wheel controller can process entities in sub-levels. + */ + @Mixin(CrushingWheelControllerBlockEntity.class) public abstract class CrushingWheelControllerBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/deployer/DeployerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/deployer/DeployerBlockEntityMixin.java index 1de3fdea..ada06125 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/deployer/DeployerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/deployer/DeployerBlockEntityMixin.java @@ -22,6 +22,10 @@ import javax.annotation.Nullable; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.deployer.DeployerBlockEntity} so the deployer can compute distances and find targets in sub-levels. + */ + @Mixin(DeployerBlockEntity.class) public abstract class DeployerBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/depot/DepotRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/depot/DepotRendererMixin.java index 86e2a9d6..40d975ce 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/depot/DepotRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/depot/DepotRendererMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.logistics.depot.DepotRenderer} so items render correctly when the depot is in a sub-level. + */ + @Mixin(DepotRenderer.class) public class DepotRendererMixin { @ModifyExpressionValue(method = "renderItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Camera;getPosition()Lnet/minecraft/world/phys/Vec3;")) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/ClickToLinkBlockItemMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/ClickToLinkBlockItemMixin.java index d08964b4..75c3f7f3 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/ClickToLinkBlockItemMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/ClickToLinkBlockItemMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.redstone.displayLink.ClickToLinkBlockItem} so the click-to-link item's distance check accounts for sub-levels. + */ + @Mixin(ClickToLinkBlockItem.class) public class ClickToLinkBlockItemMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockEntityMixin.java index eced13c1..ac27560f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockEntityMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link com.simibubi.create.content.redstone.displayLink.DisplayLinkBlockEntity} so display link distance checks account for sub-levels. + */ + @Mixin(DisplayLinkBlockEntity.class) public abstract class DisplayLinkBlockEntityMixin extends LinkWithBulbBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockMixin.java index fdc94003..308967c6 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/display_link/DisplayLinkBlockMixin.java @@ -8,6 +8,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.redstone.displayLink.DisplayLinkBlock} to preserve the display link target when moving into a sub-level. + */ + @Mixin(DisplayLinkBlock.class) public class DisplayLinkBlockMixin implements BlockSubLevelAssemblyListener { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/ejector/EjectorBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/ejector/EjectorBlockMixin.java index 172c9c61..9dc94dcc 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/ejector/EjectorBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/ejector/EjectorBlockMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.logistics.depot.EjectorBlock} so the ejector accounts for sub-levels when flinging entities. + */ + @Mixin(EjectorBlock.class) public class EjectorBlockMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/BeltMillstoneBlocksMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/BeltMillstoneBlocksMixin.java index b80816cf..5cc44a62 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/BeltMillstoneBlocksMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/BeltMillstoneBlocksMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.belt.BeltBlock} and {@link com.simibubi.create.content.kinetics.millstone.MillstoneBlock} to find block entities in sub-levels when entities land on them. + */ + @Mixin({ BeltBlock.class, MillstoneBlock.class }) public class BeltMillstoneBlocksMixin extends Block { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/SawBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/SawBlockMixin.java index 79acc1d5..116a3024 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/SawBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/entity_falls_on_block/SawBlockMixin.java @@ -7,6 +7,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.saw.SawBlock} to use the standing position when entities land on a saw in a sub-level. + */ + @Mixin(SawBlock.class) public class SawBlockMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/factory_panel/FactoryPanelConnectionHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/factory_panel/FactoryPanelConnectionHandlerMixin.java index c7b134c3..0441427f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/factory_panel/FactoryPanelConnectionHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/factory_panel/FactoryPanelConnectionHandlerMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.logistics.factoryBoard.FactoryPanelConnectionHandler} so panel connection distance checks account for sub-levels. + */ + @Mixin(FactoryPanelConnectionHandler.class) public class FactoryPanelConnectionHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fans_provide_force/EncasedFanBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fans_provide_force/EncasedFanBlockEntityMixin.java index 98407f45..6a000192 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fans_provide_force/EncasedFanBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fans_provide_force/EncasedFanBlockEntityMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.EncasedFanBlockEntity} to act as a propeller providing airflow and thrust in sub-levels. + */ + @Mixin(EncasedFanBlockEntity.class) public class EncasedFanBlockEntityMixin extends KineticBlockEntity implements BlockEntitySubLevelPropellerActor, BlockEntityPropeller { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/OpenEndedPipeMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/OpenEndedPipeMixin.java index c59c7a03..e3227364 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/OpenEndedPipeMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/OpenEndedPipeMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.fluids.OpenEndedPipe} so open-ended pipes can interact with blocks and place fluids in sub-levels. + */ + @Mixin(OpenEndedPipe.class) public abstract class OpenEndedPipeMixin { @Shadow diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/PipeConnectionMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/PipeConnectionMixin.java index 14db0b93..a4f6013c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/PipeConnectionMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_handling/PipeConnectionMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.fluids.PipeConnection} so pipe render distance checks account for sub-levels. + */ + @Mixin(PipeConnection.class) public class PipeConnectionMixin { @Redirect(method = "isRenderEntityWithinDistance", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;distanceTo(Lnet/minecraft/world/phys/Vec3;)D")) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_tank_heating/BoilerDataMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_tank_heating/BoilerDataMixin.java index a19e8656..38717ee4 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_tank_heating/BoilerDataMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/fluid_tank_heating/BoilerDataMixin.java @@ -16,6 +16,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.fluids.tank.BoilerData} so the boiler can find heat sources in sub-levels and force temperature refreshes. + */ + @Mixin(BoilerData.class) public class BoilerDataMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/flywheel/FlywheelBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/flywheel/FlywheelBlockEntityMixin.java index 4b53a835..2d4e0f43 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/flywheel/FlywheelBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/flywheel/FlywheelBlockEntityMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.flywheel.FlywheelBlockEntity} to provide smoothed angular velocity for sub-level physics. + */ + @Mixin(FlywheelBlockEntity.class) public abstract class FlywheelBlockEntityMixin extends KineticBlockEntity implements BlockEntitySubLevelReactionWheel { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorBlockEntityMixin.java index 7fbcf308..07d25a88 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorBlockEntityMixin.java @@ -18,6 +18,10 @@ import java.util.Map; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorBlockEntity} to account for sub-level distances when exporting packages to frogports. + */ + @Mixin(ChainConveyorBlockEntity.class) public abstract class ChainConveyorBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorInteractionHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorInteractionHandlerMixin.java index d08ae962..22e099cb 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorInteractionHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorInteractionHandlerMixin.java @@ -21,6 +21,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorInteractionHandler} so chain conveyors correctly interact and render in sub-levels. + */ + @Mixin(ChainConveyorInteractionHandler.class) public class ChainConveyorInteractionHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorRidingHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorRidingHandlerMixin.java index a934eea3..1f8cd31d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorRidingHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorRidingHandlerMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorRidingHandler} so riding chain conveyors compute position and orientation correctly in sub-levels. + */ + @Mixin(ChainConveyorRidingHandler.class) public class ChainConveyorRidingHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorShapeAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorShapeAccessor.java index 7f8d3cf6..f563a55f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorShapeAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainConveyorShapeAccessor.java @@ -7,6 +7,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorShape} to expose drawOutline for sub-level selection box rendering. + */ + @Mixin(ChainConveyorShape.class) public interface ChainConveyorShapeAccessor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionHandlerMixin.java index 10517bac..764a870e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionHandlerMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainPackageInteractionHandler} so package interaction rays account for sub-levels. + */ + @Mixin(ChainPackageInteractionHandler.class) public class ChainPackageInteractionHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionPacketMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionPacketMixin.java index 9f9c0ecd..c8ea70b2 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionPacketMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/ChainPackageInteractionPacketMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainPackageInteractionPacket} to initialise package world positions for sub-level distance checks. + */ + @Mixin(ChainPackageInteractionPacket.class) public class ChainPackageInteractionPacketMixin { @Shadow @Final private BlockPos selectedConnection; diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/FrogportBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/FrogportBlockMixin.java index 8051daca..097907b1 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/FrogportBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/FrogportBlockMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.logistics.packagePort.frogport.FrogportBlock} to project the player position into a sub-level when placing a frogport. + */ + @Mixin(FrogportBlock.class) public class FrogportBlockMixin { @WrapOperation(method = "lambda$setPlacedBy$0", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;position()Lnet/minecraft/world/phys/Vec3;")) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetMixin.java index c18b65a8..5c2f09e3 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into PackagePortTarget.ChainConveyorFrogportTarget to account for sub-level distances when exporting from package ports. + */ + @Mixin(PackagePortTarget.ChainConveyorFrogportTarget.class) public class PackagePortTargetMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetSelectionHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetSelectionHandlerMixin.java index 4f1f3240..64129e19 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetSelectionHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/PackagePortTargetSelectionHandlerMixin.java @@ -16,6 +16,10 @@ import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +/** + * Mixin into {@link com.simibubi.create.content.logistics.packagePort.PackagePortTargetSelectionHandler} so package port target validation accounts for sub-levels. + */ + @Mixin(PackagePortTargetSelectionHandler.class) public class PackagePortTargetSelectionHandlerMixin { @Shadow diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/SmartBlockEntityRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/SmartBlockEntityRendererMixin.java index 23b30c16..a2031a42 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/SmartBlockEntityRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/frogports/SmartBlockEntityRendererMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer} so name plates render correctly in sub-levels. + */ + @Mixin(SmartBlockEntityRenderer.class) public class SmartBlockEntityRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyBlockEntityMixin.java index 2aae528f..f4d3ed65 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyBlockEntityMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.fluids.hosePulley.HosePulleyBlockEntity} so the hose pulley can find fluids and blocks in sub-levels. + */ + @Mixin(HosePulleyBlockEntity.class) public abstract class HosePulleyBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyFluidHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyFluidHandlerMixin.java index 35e0389f..c614b649 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyFluidHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/hose_pulley/HosePulleyFluidHandlerMixin.java @@ -19,6 +19,10 @@ import java.util.function.Supplier; +/** + * Mixin into {@link com.simibubi.create.content.fluids.hosePulley.HosePulleyFluidHandler} so the hose pulley can drain fluids from sub-levels. + */ + @Mixin(HosePulleyFluidHandler.class) public abstract class HosePulleyFluidHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockAccessor.java index be838031..835cb582 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockAccessor.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; +/** + * Mixin into {@link com.simibubi.create.content.equipment.bell.AbstractBellBlock} to expose the ring method for sub-level collision callbacks. + */ + @Mixin(AbstractBellBlock.class) public interface AbstractBellBlockAccessor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockMixin.java index e765d50c..df8f3e09 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/impact/AbstractBellBlockMixin.java @@ -6,6 +6,10 @@ import dev.ryanhcode.sable.neoforge.physics.callback.AbstractBellBlockCallback; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.equipment.bell.AbstractBellBlock} to register a collision callback so bells ring when hit in sub-levels. + */ + @Mixin(AbstractBellBlock.class) public class AbstractBellBlockMixin implements BlockWithSubLevelCollisionCallback { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/CapManipulationBehaviourBaseMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/CapManipulationBehaviourBaseMixin.java index 542edd36..05c59a40 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/CapManipulationBehaviourBaseMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/CapManipulationBehaviourBaseMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.behaviour.inventory.CapManipulationBehaviourBase} so inventory capability lookups account for sub-levels. + */ + @Mixin(CapManipulationBehaviourBase.class) public class CapManipulationBehaviourBaseMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/ChuteBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/ChuteBlockEntityMixin.java index ca4eb138..a84f0d46 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/ChuteBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/inventory_manipulation/ChuteBlockEntityMixin.java @@ -17,6 +17,10 @@ import org.joml.Vector3d; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.logistics.chute.ChuteBlockEntity} so chutes can grab inventory capabilities across sub-levels. + */ + @Mixin(ChuteBlockEntity.class) public abstract class ChuteBlockEntityMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockEntityMixin.java index faa0f898..359f56f4 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockEntityMixin.java @@ -23,6 +23,10 @@ import java.util.UUID; +/** + * Mixin into {@link com.simibubi.create.content.redstone.link.controller.LecternControllerBlockEntity} so controller drops and distance checks are correct across sub-levels. + */ + @Mixin(LecternControllerBlockEntity.class) public abstract class LecternControllerBlockEntityMixin extends SmartBlockEntity implements LecternControllerBlockEntityExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockMixin.java index 54390ddb..55afcbbe 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/lectern_controller/LecternControllerBlockMixin.java @@ -9,6 +9,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.redstone.link.controller.LecternControllerBlock} to prevent the controller from dropping when moved into a sub-level. + */ + @Mixin(LecternControllerBlock.class) public class LecternControllerBlockMixin implements BlockSubLevelAssemblyListener { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmBlockEntity.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmBlockEntity.java index 402f3871..e0c97f57 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmBlockEntity.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmBlockEntity.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.mechanicalArm.ArmBlockEntity} to force mechanical arms to load sub-level areas. + */ + @Mixin(ArmBlockEntity.class) public abstract class MechanicalArmBlockEntity extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmSublevelFailure.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmSublevelFailure.java index fb4ab54e..5b51cbd8 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmSublevelFailure.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/mechnical_arm/MechanicalArmSublevelFailure.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.mechanicalArm.ArmInteractionPointHandler} to filter cross-sub-level arm interaction points and give feedback. + */ + @Mixin(ArmInteractionPointHandler.class) public class MechanicalArmSublevelFailure { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/NozzleBlockEntityAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/NozzleBlockEntityAccessor.java index c7e3aca8..d1913802 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/NozzleBlockEntityAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/NozzleBlockEntityAccessor.java @@ -4,6 +4,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.NozzleBlockEntity} to expose its range field. + */ + @Mixin(NozzleBlockEntity.class) public interface NozzleBlockEntityAccessor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleBEFixesMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleBEFixesMixin.java index b79517fe..c32c2560 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleBEFixesMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleBEFixesMixin.java @@ -20,6 +20,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.NozzleBlockEntity} to fix position calculations and particle direction checks in sub-levels. + */ + @Mixin(NozzleBlockEntity.class) public abstract class NozzleBEFixesMixin extends SmartBlockEntity { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleHoveringMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleHoveringMixin.java index b8bf9c12..334aff7b 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleHoveringMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/NozzleHoveringMixin.java @@ -29,6 +29,10 @@ import java.util.List; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.NozzleBlockEntity} to provide wind lift as a sub-level actor. + */ + @Mixin(NozzleBlockEntity.class) public abstract class NozzleHoveringMixin extends SmartBlockEntity implements BlockEntitySubLevelActor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/ValidNozzledirectionMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/ValidNozzledirectionMixin.java index b71c7ea8..55e83e5f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/ValidNozzledirectionMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/nozzle/block_entity/ValidNozzledirectionMixin.java @@ -15,6 +15,10 @@ import java.util.EnumSet; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.NozzleBlockEntity} to maintain the set of valid output directions for the nozzle. + */ + @Mixin(NozzleBlockEntity.class) public abstract class ValidNozzledirectionMixin extends SmartBlockEntity implements NozzleBlockEntityExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirFlowParticleMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirFlowParticleMixin.java index 64a3a489..ab679ad2 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirFlowParticleMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirFlowParticleMixin.java @@ -20,6 +20,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.fan.AirFlowParticle} so airflow particles move correctly within sub-levels. + */ + @Mixin(AirFlowParticle.class) public abstract class AirFlowParticleMixin extends SimpleAnimatedParticle { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirParticleMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirParticleMixin.java index 60a72387..e16d3ee8 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirParticleMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/particles/AirParticleMixin.java @@ -20,6 +20,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.foundation.particle.AirParticle} so air particles can track target positions across sub-levels. + */ + @Mixin(AirParticle.class) public abstract class AirParticleMixin extends SimpleAnimatedParticle implements ParticleSubLevelKickable { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/AllBlockEntityTypesMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/AllBlockEntityTypesMixin.java index 24e8ac47..c228ba48 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/AllBlockEntityTypesMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/AllBlockEntityTypesMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link com.simibubi.create.AllBlockEntityTypes} to register the redstone contact block entity type used by Sable. + */ + @Mixin(AllBlockEntityTypes.class) public class AllBlockEntityTypesMixin implements RedstoneContactBlockEntityTypeGetter { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/RedstoneContactBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/RedstoneContactBlockMixin.java index 2d193540..538699fc 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/RedstoneContactBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/redstone_contacts/RedstoneContactBlockMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; +/** + * Mixin into {@link com.simibubi.create.content.redstone.contact.RedstoneContactBlock} so the redstone contact block uses Sable's custom block entity. + */ + @Mixin(RedstoneContactBlock.class) public class RedstoneContactBlockMixin extends WrenchableDirectionalBlock implements IBE { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/AABBOutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/AABBOutlineMixin.java index 9e0f9b18..e2422b27 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/AABBOutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/AABBOutlineMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.createmod.catnip.outliner.AABBOutline} to apply sub-level offsets when rendering outlines. + */ + @Mixin(value = AABBOutline.class, remap = false) public abstract class AABBOutlineMixin extends Outline implements AABBOutlineRenderingOptions { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BeltRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BeltRendererMixin.java index 55721290..48fd7673 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BeltRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BeltRendererMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.belt.BeltRenderer} so belt item render distances account for sub-levels. + */ + @Mixin(BeltRenderer.class) public class BeltRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BlockClusterOutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BlockClusterOutlineMixin.java index 12a3dc3f..a6a0a8b7 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BlockClusterOutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/BlockClusterOutlineMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.createmod.catnip.outliner.BlockClusterOutline} so block cluster outlines render correctly in sub-levels. + */ + @Mixin(BlockClusterOutline.class) public class BlockClusterOutlineMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChainConveyorRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChainConveyorRendererMixin.java index 11ee1cde..0a4e4c89 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChainConveyorRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChainConveyorRendererMixin.java @@ -9,6 +9,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.chainConveyor.ChainConveyorRenderer} so chain render distances account for sub-levels. + */ + @Mixin(ChainConveyorRenderer.class) public class ChainConveyorRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlineMixin.java index a30c18be..a975f4c1 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlineMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.createmod.catnip.outliner.ChasingAABBOutline} to apply sub-level offsets when rendering chasing outlines. + */ + @Mixin(value = ChasingAABBOutline.class, remap = false) public abstract class ChasingAABBOutlineMixin extends AABBOutline { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlinerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlinerMixin.java index 482b1b4c..9326ea50 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlinerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ChasingAABBOutlinerMixin.java @@ -7,6 +7,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link net.createmod.catnip.outliner.ChasingAABBOutline} to avoid interpolating bounding boxes across sub-levels. + */ + @Mixin(ChasingAABBOutline.class) public class ChasingAABBOutlinerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/FilteringRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/FilteringRendererMixin.java index 92c8ff98..3ebdcc27 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/FilteringRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/FilteringRendererMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringRenderer} so filter render distances account for sub-levels. + */ + @Mixin(FilteringRenderer.class) public class FilteringRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/GhostBlockValueBoxMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/GhostBlockValueBoxMixin.java index 05177881..22960968 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/GhostBlockValueBoxMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/GhostBlockValueBoxMixin.java @@ -9,6 +9,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into GhostBlockRenderer.TransparentGhostBlockRenderer to apply sub-level offsets when rendering ghost blocks. + */ + @Mixin(targets = "net.createmod.catnip.ghostblock.GhostBlockRenderer$TransparentGhostBlockRenderer") public abstract class GhostBlockValueBoxMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LineOutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LineOutlineMixin.java index 28cbe2a4..c3ff5bdc 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LineOutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LineOutlineMixin.java @@ -18,6 +18,10 @@ import org.joml.Vector4f; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.createmod.catnip.outliner.LineOutline} so line outlines can render across sub-levels. + */ + @Mixin(LineOutline.class) public abstract class LineOutlineMixin extends Outline { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LinkRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LinkRendererMixin.java index 4db7cf60..905ab355 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LinkRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/LinkRendererMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.redstone.link.LinkRenderer} so link render distances account for sub-levels. + */ + @Mixin(LinkRenderer.class) public class LinkRendererMixin { @Redirect(method = "renderOnBlockEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;distanceToSqr(Lnet/minecraft/world/phys/Vec3;)D")) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/OutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/OutlineMixin.java index 73c6cb8f..6e5f5871 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/OutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/OutlineMixin.java @@ -3,6 +3,10 @@ import net.createmod.catnip.outliner.Outline; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link net.createmod.catnip.outliner.Outline} so Create outlines work correctly with sub-levels. + */ + @Mixin(Outline.class) public class OutlineMixin { } \ No newline at end of file diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/PlacementClientMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/PlacementClientMixin.java index c57dab55..6fcdb8c5 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/PlacementClientMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/PlacementClientMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link net.createmod.catnip.placement.PlacementClient} to project the placement direction indicator out of sub-levels. + */ + @Mixin(PlacementClient.class) public class PlacementClientMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/SafeBlockEntityRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/SafeBlockEntityRendererMixin.java index c4c2bbfe..e37e8d6e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/SafeBlockEntityRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/SafeBlockEntityRendererMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer} so item culling checks work correctly across sub-levels. + */ + @Mixin(SafeBlockEntityRenderer.class) public class SafeBlockEntityRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ValueBoxMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ValueBoxMixin.java index 27869934..7303dd46 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ValueBoxMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/render_fixes/ValueBoxMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.foundation.blockEntity.behaviour.ValueBox} to apply sub-level offsets when rendering value boxes. + */ + @Mixin(ValueBox.class) public abstract class ValueBoxMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sails_providing_lift/SailBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sails_providing_lift/SailBlockMixin.java index da2c62a8..c6a89d5c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sails_providing_lift/SailBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sails_providing_lift/SailBlockMixin.java @@ -12,6 +12,10 @@ import org.joml.Vector3dc; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.bearing.SailBlock} to provide lift and a custom center of mass for sub-levels. + */ + @Mixin(SailBlock.class) public class SailBlockMixin implements BlockSubLevelLiftProvider, BlockSubLevelCustomCenterOfMass { @Override diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/DeployToolMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/DeployToolMixin.java index a85bf66c..a4d5f339 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/DeployToolMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/DeployToolMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.tools.DeployTool} so the deploy tool outline renders correctly in sub-levels. + */ + @Mixin(DeployTool.class) public abstract class DeployToolMixin extends SchematicToolBase { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicAndQuillHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicAndQuillHandlerMixin.java index 3c819668..e439f44e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicAndQuillHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicAndQuillHandlerMixin.java @@ -27,6 +27,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.SchematicAndQuillHandler} so schematic selection works across sub-levels and highlights intersecting ones. + */ + @Mixin(SchematicAndQuillHandler.class) public abstract class SchematicAndQuillHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicExportMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicExportMixin.java index c0fdec3a..e46176b9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicExportMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicExportMixin.java @@ -32,6 +32,10 @@ import java.nio.file.Path; import java.util.UUID; +/** + * Mixin into {@link com.simibubi.create.content.schematics.SchematicExport} to include sub-level data when exporting schematics. + */ + @Mixin(SchematicExport.class) public class SchematicExportMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicHandlerMixin.java index d2847db5..36e61ba9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicHandlerMixin.java @@ -19,6 +19,10 @@ import java.util.List; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.SchematicHandler} to place sub-level templates into the schematic render world. + */ + @Mixin(SchematicHandler.class) public class SchematicHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicLevelMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicLevelMixin.java index 12c980b2..bba409a4 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicLevelMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicLevelMixin.java @@ -8,6 +8,10 @@ import java.util.List; +/** + * Mixin into {@link net.createmod.catnip.levelWrappers.SchematicLevel} to store sub-level templates in the schematic world. + */ + @Mixin(SchematicLevel.class) public class SchematicLevelMixin implements SchematicLevelExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPlacePacketMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPlacePacketMixin.java index 5456a1bc..a918830a 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPlacePacketMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPlacePacketMixin.java @@ -51,6 +51,10 @@ import java.util.Map; import java.util.UUID; +/** + * Mixin into {@link com.simibubi.create.content.schematics.packet.SchematicPlacePacket} to spawn sub-levels when placing schematics. + */ + @Mixin(SchematicPlacePacket.class) public class SchematicPlacePacketMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPrinterMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPrinterMixin.java index e3dc88a5..d7dd9f4f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPrinterMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicPrinterMixin.java @@ -27,6 +27,10 @@ import java.util.List; +/** + * Mixin into {@link com.simibubi.create.content.schematics.SchematicPrinter} to load and transform sub-level templates in schematics. + */ + @Mixin(SchematicPrinter.class) public class SchematicPrinterMixin implements SchematicPrinterExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicRendererMixin.java index 6acef9af..1beea1c0 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicRendererMixin.java @@ -27,6 +27,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.SchematicRenderer} to render sub-level blocks in the schematic preview. + */ + @Mixin(SchematicRenderer.class) public class SchematicRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicToolBaseMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicToolBaseMixin.java index 1ea7789c..fcc3891b 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicToolBaseMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicToolBaseMixin.java @@ -21,6 +21,10 @@ import java.util.function.Predicate; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.tools.SchematicToolBase} so schematic tool rays and selection account for sub-levels. + */ + @Mixin(SchematicToolBase.class) public class SchematicToolBaseMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicTransformMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicTransformMixin.java index 78a47750..a99a1538 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicTransformMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/SchematicTransformMixin.java @@ -16,6 +16,10 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.schematics.client.SchematicTransformation} to apply sub-level offsets when rendering schematic transformations. + */ + @Mixin(SchematicTransformation.class) public abstract class SchematicTransformMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/StructureTemplateMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/StructureTemplateMixin.java index a313f4fc..2bf5be34 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/StructureTemplateMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/schematics/StructureTemplateMixin.java @@ -28,6 +28,10 @@ import java.util.List; import java.util.UUID; +/** + * Mixin into {@link net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate} to load and filter entities belonging to sub-levels. + */ + @Mixin(StructureTemplate.class) public abstract class StructureTemplateMixin implements StructureTemplateExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockEntityMixin.java index 76094ee1..839784ea 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockEntityMixin.java @@ -40,6 +40,10 @@ import java.util.Objects; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.chassis.StickerBlockEntity} so stickers can create fixed constraints between sub-levels. + */ + @Mixin(StickerBlockEntity.class) public abstract class StickerBlockEntityMixin extends SmartBlockEntity implements StickerBlockEntityExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockMixin.java index e6bb3941..d2d93192 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockMixin.java @@ -8,6 +8,10 @@ import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.chassis.StickerBlock} to remove sticker constraints when moved into sub-levels. + */ + @Mixin(StickerBlock.class) public class StickerBlockMixin implements BlockSubLevelAssemblyListener { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/EntityHatsMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/EntityHatsMixin.java index 03c35c6c..18f14b00 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/EntityHatsMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/EntityHatsMixin.java @@ -9,6 +9,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.equipment.hats.EntityHats} to use the vehicle position when checking for stock ticker hats on sub-level contraptions. + */ + @Mixin(EntityHats.class) public class EntityHatsMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/StockTickerInteractionHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/StockTickerInteractionHandlerMixin.java index 7c31842f..cf97ca9a 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/StockTickerInteractionHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/stock_ticker/StockTickerInteractionHandlerMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.logistics.stockTicker.StockTickerInteractionHandler} to use the vehicle position when riding sub-level contraptions. + */ + @Mixin(StockTickerInteractionHandler.class) public class StockTickerInteractionHandlerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/LevelAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/LevelAccessor.java index 836e3edb..8ac8d26d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/LevelAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/LevelAccessor.java @@ -6,6 +6,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; +/** + * Mixin into {@link net.minecraft.world.level.Level} to expose getEntities for sub-level aware entity queries. + */ + @Mixin(Level.class) public interface LevelAccessor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/SuperGlueEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/SuperGlueEntityMixin.java index 32792778..c37558c7 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/SuperGlueEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/super_glue/SuperGlueEntityMixin.java @@ -14,6 +14,10 @@ import java.util.List; +/** + * Mixin into {@link com.simibubi.create.content.contraptions.glue.SuperGlueEntity} to avoid entering sub-levels when collecting super glue entities. + */ + @Mixin(value = SuperGlueEntity.class, remap = false) public class SuperGlueEntityMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/CurvedTrackDestroyPacketMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/CurvedTrackDestroyPacketMixin.java index 466fb17a..b2fcd604 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/CurvedTrackDestroyPacketMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/CurvedTrackDestroyPacketMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.CurvedTrackDestroyPacket} so curved track destruction operates in world coordinates. + */ + @Mixin(CurvedTrackDestroyPacket.class) public class CurvedTrackDestroyPacketMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockItemMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockItemMixin.java index 750940f5..f0a17b0e 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockItemMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockItemMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.TrackBlockItem} and {@link com.simibubi.create.content.trains.track.TrackTargetingBlockItem} to account for sub-level orientation when placing tracks. + */ + @Mixin({ TrackBlockItem.class, TrackTargetingBlockItem.class }) public class TrackBlockItemMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockMixin.java index e3dfdcef..d49a518c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.TrackBlock} to account for sub-levels when computing placement orientation. + */ + @Mixin(TrackBlock.class) public class TrackBlockMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockOutlineMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockOutlineMixin.java index e374f7d6..cfdb3ca2 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockOutlineMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackBlockOutlineMixin.java @@ -29,6 +29,10 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.TrackBlockOutline} so track outline rendering and picking account for sub-levels. + */ + @Mixin(TrackBlockOutline.class) public class TrackBlockOutlineMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackGraphVisualizerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackGraphVisualizerMixin.java index 000ae0cb..a0ff77c9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackGraphVisualizerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackGraphVisualizerMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +/** + * Mixin into {@link com.simibubi.create.content.trains.graph.TrackGraphVisualizer} so track graph visualization displays correctly in sub-levels. + */ + @Mixin(TrackGraphVisualizer.class) public class TrackGraphVisualizerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackPlacementMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackPlacementMixin.java index 6e38589d..afa60cf1 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackPlacementMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackPlacementMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.TrackPlacement} to account for sub-level orientation when connecting tracks. + */ + @Mixin(TrackPlacement.class) public class TrackPlacementMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackTargetingClientMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackTargetingClientMixin.java index 6d24adc5..42d3d56d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackTargetingClientMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/tracks/TrackTargetingClientMixin.java @@ -17,6 +17,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.track.TrackTargetingClient} to render track targeting using sub-level poses. + */ + @Mixin(TrackTargetingClient.class) public class TrackTargetingClientMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/trains/CarriageContraptionVisualMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/trains/CarriageContraptionVisualMixin.java index 98c8ab8f..6e1d9642 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/trains/CarriageContraptionVisualMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/trains/CarriageContraptionVisualMixin.java @@ -20,6 +20,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.trains.entity.CarriageContraptionVisual} so train contraption visuals translate correctly in sub-levels. + */ + @Mixin(CarriageContraptionVisual.class) public abstract class CarriageContraptionVisualMixin extends ContraptionVisual { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/turntable/TurntableBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/turntable/TurntableBlockMixin.java index b05b9e27..8616696c 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/turntable/TurntableBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/turntable/TurntableBlockMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.kinetics.turntable.TurntableBlock} to account for sub-level positions when rotating entities. + */ + @Mixin(TurntableBlock.class) public class TurntableBlockMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/wand_of_symmetry/SymmetryHandlerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/wand_of_symmetry/SymmetryHandlerMixin.java index d75a62bc..c5abef1f 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/wand_of_symmetry/SymmetryHandlerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/wand_of_symmetry/SymmetryHandlerMixin.java @@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link com.simibubi.create.content.equipment.symmetryWand.SymmetryHandler} to apply sub-level offsets when rendering the symmetry wand effect. + */ + @Mixin(SymmetryHandler.class) public class SymmetryHandlerMixin { @Redirect(method = "onRenderWorld", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(DDD)V", ordinal = 0)) diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/AbstractBlockEntityVisualMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/AbstractBlockEntityVisualMixin.java index 97c8e3c6..603f6ded 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/AbstractBlockEntityVisualMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/AbstractBlockEntityVisualMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual} to scale lighting for block entity visuals in sub-levels. + */ + @Mixin(AbstractBlockEntityVisual.class) public class AbstractBlockEntityVisualMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EmbeddedEnvironmentMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EmbeddedEnvironmentMixin.java index 2824ef21..b28ae997 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EmbeddedEnvironmentMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EmbeddedEnvironmentMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.engine.embed.EmbeddedEnvironment} to write scene and sky light uniforms for sub-level embeddings. + */ + @Mixin(EmbeddedEnvironment.class) public class EmbeddedEnvironmentMixin implements EmbeddedEnvironmentExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EngineImplMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EngineImplMixin.java index 8e3c56a5..747fb5de 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EngineImplMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EngineImplMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.engine.EngineImpl} to replace the default light storage with Sable's sub-level aware implementation. + */ + @Mixin(EngineImpl.class) public class EngineImplMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EnvironmentStorageMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EnvironmentStorageMixin.java index aadff0da..25840891 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EnvironmentStorageMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/EnvironmentStorageMixin.java @@ -7,6 +7,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.engine.embed.EnvironmentStorage} to enlarge element size to hold sub-level scene info. + */ + @Mixin(EnvironmentStorage.class) public class EnvironmentStorageMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/LightStorageAccessor.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/LightStorageAccessor.java index 73a8323d..5db7a507 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/LightStorageAccessor.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/LightStorageAccessor.java @@ -5,6 +5,10 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.engine.LightStorage} to expose its collector and LUT rebuild flag. + */ + @Mixin(LightStorage.class) public interface LightStorageAccessor { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/MatrixBufferMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/MatrixBufferMixin.java index 1435ef73..624eccec 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/MatrixBufferMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/MatrixBufferMixin.java @@ -7,6 +7,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.engine.indirect.MatrixBuffer} to enlarge the matrix buffer stride to hold sub-level scene info. + */ + @Debug(export = true) @Mixin(MatrixBuffer.class) public class MatrixBufferMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/RenderDispatcherImplMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/RenderDispatcherImplMixin.java index 0c960cc3..0dbe717d 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/RenderDispatcherImplMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/RenderDispatcherImplMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into VisualizationManagerImpl.RenderDispatcherImpl to update sub-level embeddings before each frame. + */ + @Mixin(targets = "dev.engine_room.flywheel.impl.visualization.VisualizationManagerImpl$RenderDispatcherImpl") public class RenderDispatcherImplMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/ShaderSourcesMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/ShaderSourcesMixin.java index d3aa663b..e6d1cac3 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/ShaderSourcesMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/ShaderSourcesMixin.java @@ -3,6 +3,10 @@ import dev.engine_room.flywheel.backend.glsl.ShaderSources; import org.spongepowered.asm.mixin.Mixin; +/** + * Mixin into {@link dev.engine_room.flywheel.backend.glsl.ShaderSources} to load shader sources used for sub-level rendering. + */ + @Mixin(ShaderSources.class) public class ShaderSourcesMixin { } diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/VisualManagerImplMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/VisualManagerImplMixin.java index c6b68d17..0033a3cc 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/VisualManagerImplMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/flywheel/VisualManagerImplMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Mixin into {@link dev.engine_room.flywheel.impl.visualization.VisualManagerImpl} to provide visualization contexts for sub-level embeddings. + */ + @Mixin(value = VisualManagerImpl.class, remap = false) public abstract class VisualManagerImplMixin> implements VisualManager { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockEntityMixin.java index 3637245b..bbec4f12 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockEntityMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link dev.protomanly.pmweather.block.entity.AnemometerBlockEntity} (Protomanly's Weather) to query wind from sub-level positions. + */ + @Mixin(AnemometerBlockEntity.class) public class AnemometerBlockEntityMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockMixin.java index 3ca60c52..7dcf4305 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/AnemometerBlockMixin.java @@ -10,6 +10,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link dev.protomanly.pmweather.block.AnemometerBlock} (Protomanly's Weather) to query wind from sub-level positions. + */ + @Mixin(AnemometerBlock.class) public class AnemometerBlockMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/RadarRendererMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/RadarRendererMixin.java index 2dfa8d88..956c578b 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/RadarRendererMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/pmweather/RadarRendererMixin.java @@ -14,6 +14,10 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +/** + * Mixin into {@link dev.protomanly.pmweather.render.RadarRenderer} (Protomanly's Weather) so radar rendering accounts for sub-levels. + */ + @Mixin(RadarRenderer.class) public class RadarRendererMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/sodiumextras/EmbyToolsMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/sodiumextras/EmbyToolsMixin.java index 580c77b2..272f1036 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/sodiumextras/EmbyToolsMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/sodiumextras/EmbyToolsMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.Overwrite; import toni.sodiumextras.EmbyTools; +/** + * Mixin into {@link toni.sodiumextras.EmbyTools} (Sodium Extras) so distance checks account for sub-levels. + */ + @Mixin(EmbyTools.class) public class EmbyToolsMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/dynamic_directional_shading/SectionCompilerMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/dynamic_directional_shading/SectionCompilerMixin.java index 728b2701..f94df6bb 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/dynamic_directional_shading/SectionCompilerMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/dynamic_directional_shading/SectionCompilerMixin.java @@ -19,6 +19,10 @@ import java.util.List; +/** + * Mixin into {@link net.minecraft.client.renderer.chunk.SectionCompiler} to mark sub-level sections to enable dynamic directional shading. + */ + @Mixin(SectionCompiler.class) public class SectionCompilerMixin { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entities_stick_sublevels/effects/LivingEntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entities_stick_sublevels/effects/LivingEntityMixin.java index e1f995c1..1f006ba8 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entities_stick_sublevels/effects/LivingEntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entities_stick_sublevels/effects/LivingEntityMixin.java @@ -12,6 +12,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.LivingEntity} to use the standing position when playing fall sounds on sub-levels. + */ + @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity { public LivingEntityMixin(final EntityType entityType, final Level level) { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entity/entity_swimming/EntityMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entity/entity_swimming/EntityMixin.java index 70cd5950..6e482fa9 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entity/entity_swimming/EntityMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/entity/entity_swimming/EntityMixin.java @@ -36,6 +36,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +/** + * Mixin into {@link net.minecraft.world.entity.Entity} so swimming and fluid height calculations account for fluid in sub-levels. + */ + @Mixin(value = Entity.class, priority = 500) public abstract class EntityMixin implements IEntityExtension { diff --git a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/sound/MovingSoundInstanceDelegateMixin.java b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/sound/MovingSoundInstanceDelegateMixin.java index 56a951f0..f123395a 100644 --- a/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/sound/MovingSoundInstanceDelegateMixin.java +++ b/neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/sound/MovingSoundInstanceDelegateMixin.java @@ -11,6 +11,10 @@ import java.util.concurrent.CompletableFuture; +/** + * Mixin into {@link dev.ryanhcode.sable.sound.MovingSoundInstanceDelegate} to delegate audio stream loading for moving sound instances. + */ + @Mixin(MovingSoundInstanceDelegate.class) public abstract class MovingSoundInstanceDelegateMixin implements SoundInstance { diff --git a/sable_rapier/src/main/resources/natives/sable_rapier/README.zh-CN.md b/sable_rapier/src/main/resources/natives/sable_rapier/README.zh-CN.md new file mode 100644 index 00000000..b3bb350c --- /dev/null +++ b/sable_rapier/src/main/resources/natives/sable_rapier/README.zh-CN.md @@ -0,0 +1,2 @@ +此文件夹中的 natives 用于 Sable 的 Rapier 物理管线。 +它们包含一个稍作修改的 Rapier 版本,可见于 https://github.com/ryanhcode/rapier (请查看 LICENSE-RAPIER)。 diff --git a/wiki/Block Physics Properties.zh-CN.md b/wiki/Block Physics Properties.zh-CN.md new file mode 100644 index 00000000..1f4150d2 --- /dev/null +++ b/wiki/Block Physics Properties.zh-CN.md @@ -0,0 +1,97 @@ +Sable 按方块状态(block-state)存储与物理相关的属性。 +这些属性通过数据包(datapack)中的定义 JSON 进行配置。 + +### 可用属性 + +默认可用的属性包括: +- `sable:mass` - 方块的质量,单位 `kpg`。默认 `1.0` +- `sable:inertia` - 方块沿各轴的惯性(转动惯量)倍率,单位 `kpg*m^2`。使用前会乘以方块的质量。默认 `[1/6, 1/6, 1/6]` +- `sable:volume` - 方块的体积,单位 `m^3`。用于浮力计算。默认 `1.0` +- `sable:restitution` - 方块的弹性,范围 0-1。默认 `0.0` +- `sable:friction` - 方块的摩擦倍率。默认 `1.0` +- `sable:fragile` - 方块在受到撞击时是否应该破碎。默认 `false` +- `sable:floating_material` - 要指定的悬浮方块材质。默认 `null` +- `sable:floating_scale` - 悬浮方块材质的倍率。默认 `1.0` + +### JSON 结构 + +方块物理属性定义 JSON 可以放在任意数据包(datapack)的 `physics_block_properties` 文件夹下。 + +```js +// /data/examplemod/physics_block_properties/example_block.json +{ + // 选择器可以是标签(tag),也可以是方块 ID。 + // 如果使用标签,标签中的所有方块都会受到影响。 + // 例如 `#examplemod:example_blocks` 或 `examplemod:example_block` + "selector": "examplemod:example_block" + + // 优先级默认是 1000。 + // 定义按照优先级升序应用 + "priority": 1001, + + "properties": { + // 任何属性都可以在此定义 + "sable:mass": 2.0 + }, + + "overrides": { + // 覆盖键是方块状态条件 + "lit=true": { + // 任何属性都可以在此定义 + // 所有满足条件的方块状态都会受到影响 + "sable:mass": 3.0 + } + } + +} +``` + +### 示例 + +一个会弹跳的方块: + +```js +// /data/examplemod/physics_block_properties/bouncy_block.json +{ + "selector": "examplemod:bouncy_block", + + "properties": { + "sable:restitution": 0.5 + } +} +``` + +一个在伸出时没那么重的活塞: + +```js +// /data/examplemod/physics_block_properties/piston.json +{ + "selector": "examplemod:piston", + + "properties": { + "sable:mass": 1.0 + }, + + "overrides": { + "extended=true": { + "sable:mass": 0.5 + } + } +} +``` + +### 标签(Tags) + +Sable 在其内置的数据包中包含了许多常用的物理方块属性标签。 +如果你的方块不需要自定义属性定义,建议将方块放入预定义的标签中: + +- `#sable:super_light` 质量 = 0.25 +- `#sable:light` 质量 = 0.5 +- `#sable:heavy` 质量 = 2.0 +- `#sable:super_heavy` 质量 = 4.0 + +- `#sable:half_volume` 体积 = 0.5 +- `#sable:quarter_volume` 体积 = 0.25 + +- `#sable:slippery` 摩擦 = 0.0 +- `#sable:bouncy` 弹性 = 0.5 diff --git a/wiki/Dimension Physics Data.zh-CN.md b/wiki/Dimension Physics Data.zh-CN.md new file mode 100644 index 00000000..d888de66 --- /dev/null +++ b/wiki/Dimension Physics Data.zh-CN.md @@ -0,0 +1,103 @@ +Sable 允许数据包(datapack)为维度指定自定义物理参数。这些配置从 `/data//dimension_physics/.json` 加载。 + +### 字段 + +**`dimension`**(必填):此配置所适用的维度的资源位置(resource location)。 + +**`priority`**(可选,默认 `1000`):当多个配置针对同一维度时,优先级最高的配置生效。Sable 内置的默认值使用优先级 `0`,因此任何数据包配置都会自动覆盖它们。 + +**`base_gravity`**(可选,默认 `[0.0, -11.0, 0.0]`):重力加速度,为三维向量,单位 m/秒²。默认值以 11 m/s² 向下拉扯。 + +**`base_pressure`**(可选,默认 `1.0`):应用于维度中所有位置的压强倍率。设为 `0` 即为真空。如果同时定义了 `pressure_function`,两者会合并。 + +**`pressure_function`**(可选):用于控制空气压强随海拔变化的贝塞尔曲线控制点列表。每个点包含 `altitude`(y 层高度)、`value`(该高度处的压强)和 `slope`(变化速率)。省略此字段则以 `base_pressure` 保持均匀压强。 + +**`universal_drag`**(可选,默认 `0.09`):应用于维度中所有运动的平直阻力系数。 + +**`magnetic_north`**(可选,默认 `[0.0, 0.0, 0.0]`):指向磁北的方向向量。`[0, 0, 0]` 表示不存在磁场。 + +### 示例 + +一个重力更低、无阻力、无气压的月球维度: +```js +// /data/examplemod/dimension_physics/moon.json +{ + "dimension": "examplemod:moon", + + // 默认优先级为 1000 + // 优先级更高的配置"胜出" + "priority": 1000, + + // 将重力修改为较低值 + "base_gravity": [0.0, -4.0, 0.0], + + // 无气压 + "base_pressure": 0.0, + + // 无平直阻力 + "universal_drag": 0.0, + + // 无磁北 + "magnetic_north": [0.0, 0.0, 0.0] +} +``` + +### 内置默认值 + +Sable 会为原版维度生成这些配置。此处展示它们仅供参考,数值为近似值。 +`pressure_function` 是一条近似指数衰减的曲线,以海平面为中心,在地下被钳制为至多 1.5,并在建造上限处有 40 米的平滑下落。 + +**主世界(Overworld)**: +```json +{ + "dimension": "minecraft:overworld", + "priority": 0, + "universal_drag": 0.09, + "base_gravity": [0.0, -11.0, 0.0], + "base_pressure": 1.0, + "pressure_function": [ + { "altitude": -38.366277, "value": 1.5, "slope": -0.006 }, + { "altitude": 63.0, "value": 1.0, "slope": -0.004 }, + { "altitude": 263.0, "value": 0.449329, "slope": -0.001797 }, + { "altitude": 280.0, "value": 0.419786, "slope": -0.001679 }, + { "altitude": 320.0, "value": 0.0, "slope": -0.020989 } + ], + "magnetic_north": [0.0, 0.0, 0.0] +} +``` + +**下界(Nether)**: +```json +{ + "dimension": "minecraft:the_nether", + "priority": 0, + "universal_drag": 0.09, + "base_gravity": [0.0, -11.0, 0.0], + "base_pressure": 1.0, + "pressure_function": [ + { "altitude": 0.0, "value": 1.136553, "slope": -0.004546 }, + { "altitude": 32.0, "value": 1.0, "slope": -0.004 }, + { "altitude": 88.0, "value": 0.799315, "slope": -0.003197 }, + { "altitude": 128.0, "value": 0.0, "slope": -0.039966 } + ], + "magnetic_north": [0.0, 0.0, 0.0] +} +``` + +**末地(End)**: +```json +{ + "dimension": "minecraft:the_end", + "priority": 0, + "universal_drag": 0.09, + "base_gravity": [0.0, -11.0, 0.0], + "base_pressure": 1.0, + "pressure_function": [ + { "altitude": 0.0, "value": 1.0, "slope": -0.004 }, + { "altitude": 200.0, "value": 0.449329, "slope": -0.001797 }, + { "altitude": 216.0, "value": 0.421473, "slope": -0.001686 }, + { "altitude": 256.0, "value": 0.0, "slope": -0.021074 } + ], + "magnetic_north": [0.0, 0.0, 0.0] +} +``` diff --git a/wiki/Home.zh-CN.md b/wiki/Home.zh-CN.md new file mode 100644 index 00000000..bd57fbfc --- /dev/null +++ b/wiki/Home.zh-CN.md @@ -0,0 +1,95 @@ +## 依赖 Sable +[![Sable 1.21.1](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fmaven.ryanhcode.dev%2Freleases%2Fdev%2Fryanhcode%2Fsable%2Fsable-common-1.21.1%2Fmaven-metadata.xml&label=Sable%201.21.1)](https://maven.ryanhcode.dev/releases/dev/ryanhcode/sable/sable-common-1.21.1/) + +根据你的平台,将以下片段复制到你的 `build.gradle` 文件中: + +### NeoForge + +
+ 点击展开 + +```groovy +repositories { + exclusiveContent { // Sable + forRepository { + maven { + url = "https://maven.ryanhcode.dev/releases" + name = "RyanHCode Maven" + } + } + filter { + includeGroup("dev.ryanhcode.sable") + includeGroup("dev.ryanhcode.sable-companion") + } + } +} + +dependencies { + api("dev.ryanhcode.sable:sable-common-${project.minecraft_version}:${project.sable_version}") +} +``` + +
+ +### Fabric + +
+ 点击展开 + +```groovy +repositories { + exclusiveContent { // Sable + forRepository { + maven { + url = "https://maven.ryanhcode.dev/releases" + name = "RyanHCode Maven" + } + } + filter { + includeGroup("dev.ryanhcode.sable") + includeGroup("dev.ryanhcode.sable-companion") + } + } +} + +dependencies { + modApi("dev.ryanhcode.sable:sable-fabric-${project.minecraft_version}:${project.sable_version}") +} +``` + +
+ +### Common + +
+ 点击展开 + +```groovy +repositories { + exclusiveContent { // Sable + forRepository { + maven { + url = "https://maven.ryanhcode.dev/releases" + name = "RyanHCode Maven" + } + } + filter { + includeGroup("dev.ryanhcode.sable") + includeGroup("dev.ryanhcode.sable-companion") + } + } +} + +dependencies { + api "dev.ryanhcode.sable:sable-common-${project.minecraft_version}:${project.sable_version}" +} +``` + +
+ +### 使用 Sable + +- 通过 [Sable Companion](https://github.com/ryanhcode/sable-companion) 实现简单兼容 +- [与实体一起工作](https://github.com/ryanhcode/sable/wiki/Working-With-Entities) +- [方块物理属性](https://github.com/ryanhcode/sable/wiki/Block-Physics-Properties) +- [维度物理数据](https://github.com/ryanhcode/sable/wiki/Dimension-Physics-Data) diff --git a/wiki/Working with Entities.zh-CN.md b/wiki/Working with Entities.zh-CN.md new file mode 100644 index 00000000..f0898301 --- /dev/null +++ b/wiki/Working with Entities.zh-CN.md @@ -0,0 +1,40 @@ +## "实体踢出"(Entity Kicking) + +默认情况下,Sable 会将生成在子层级(sub-level)区域(plot)内的所有实体"踢出"到全局空间。 +该操作会把实体传送到其全局位置,应用来自子层级的速度,并将实体的速度和旋转从子层级坐标系中转换出来。 + +对于某些实体,例如画或盔甲架,这种行为并不理想,预期的结果应是让实体留在子层级内部。 +因此,Sable 提供了用于自定义实体与实体踢出交互方式的标签: + +- `#sable:retain_in_sub_level` - 绝不将该实体从子层级中踢出。(例如:盔甲架、画) +- `#sable:destroy_when_leaving_plot` - 当该实体位于子层级区域内、但超出了包含子层级方块的边界时,销毁该实体。 +- `#sable:destroy_with_sub_level` - 当包含该实体的子层级区域被销毁时,销毁该实体,而不是将其踢到全局世界。(例如:来自 Create 的超级胶水 Super Glue) + +### 示例 + +要指定一个实体应留在子层级区域内、并且绝不被踢出: +```js +// /data/sable/tags/entity_type/retain_in_sub_level.json +{ + "replace": false, + "values": [ + "examplemod:example_entity" + ] +} +``` + +## 追踪(Tracking) +实体可以位于子层级的区域*之外*,但仍随子层级一起移动(例如:站在子层级上的玩家,或子层级围栏里的牛)。当实体站在子层级上时,Sable 会将其标记为"追踪"该子层级。 + +正在追踪某个子层级的实体: +- 会相对于该子层级进行网络同步 +- 会相对于该子层级进行插值 +- 会随着子层级旋转和平移而一起移动 + +正在追踪某个子层级的玩家,还会通过追踪点(tracking points)系统,以相对于子层级的位置进行登出和登入。 + +Sable 提供了用于检查实体的追踪子层级的工具: +```java +Entity entity = ...; +SubLevel subLevel = EntitySubLevelUtil.getTrackingSubLevel(this.entity); +```