rearranged mixins to correct packages

This commit is contained in:
iceBear67 committed 2025-03-28 11:01:27 +08:00
1 parent b75b4e1df1
commit 885920f38e
10 files changed
+43 -90

No files matched your search

+1 -1
View File
@@ -6,6 +6,6 @@ loader_version=0.16.10
# Fabric API # Fabric API
fabric_version=0.119.5+1.21.5 fabric_version=0.119.5+1.21.5
# Mod Properties # Mod Properties
mod_version=1.0.0 mod_version=1.1
maven_group=io.ib67 maven_group=io.ib67
archives_base_name=sfcraft archives_base_name=sfcraft
@@ -1,13 +1,21 @@
package io.ib67.sfcraft.mixin.common; package io.ib67.sfcraft.mixin.common;
import io.ib67.sfcraft.SFCraft;
import io.ib67.sfcraft.callback.SFCallbacks; import io.ib67.sfcraft.callback.SFCallbacks;
import io.ib67.sfcraft.module.RoomModule;
import io.ib67.sfcraft.registry.RoomRegistry;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.world.TeleportTarget;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.UUID;
@Mixin(Entity.class) @Mixin(Entity.class)
public abstract class EntityMixin { public abstract class EntityMixin {
@@ -18,6 +26,25 @@ public abstract class EntityMixin {
} }
} }
@Shadow
public abstract UUID getUuid();
@Inject(at = @At("HEAD"), method = "teleportTo", cancellable = true)
private void sf$redirectTeleport(TeleportTarget teleportTarget, CallbackInfoReturnable<Entity> cir) {
if (RoomModule.isVirtual(this.getUuid())) {
cir.setReturnValue((Entity) (Object) this);
}
}
@Inject(at = @At("HEAD"), method = "canUsePortals", cancellable = true)
private void sf$disablePortal(boolean allowVehicles, CallbackInfoReturnable<Boolean> cir) {
var registry = SFCraft.getInjector().getInstance(RoomRegistry.class);
var $this = (Entity) (Object) this;
if (registry.isRoomWorld($this.getWorld().getRegistryKey())) {
cir.setReturnValue(false);
}
}
@Unique @Unique
private Entity $this() { private Entity $this() {
return (Entity) (Object) this; return (Entity) (Object) this;
@@ -1,4 +1,4 @@
package io.ib67.sfcraft.mixin.server; package io.ib67.sfcraft.mixin.common.bridge;
import net.minecraft.server.world.ChunkLevelManager; import net.minecraft.server.world.ChunkLevelManager;
import net.minecraft.server.world.ServerChunkManager; import net.minecraft.server.world.ServerChunkManager;
@@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ServerChunkManager.class) @Mixin(ServerChunkManager.class)
public interface ServerChunkManagerMixin { public interface ServerChunkManagerBridge {
@Accessor("levelManager") @Accessor("levelManager")
ChunkLevelManager getLevelManager(); ChunkLevelManager getLevelManager();
} }
@@ -1,4 +1,4 @@
package io.ib67.sfcraft.mixin.server.fixes; package io.ib67.sfcraft.mixin.common.fixes;
import io.ib67.sfcraft.mixin.common.MobEntityMixin; import io.ib67.sfcraft.mixin.common.MobEntityMixin;
import net.minecraft.entity.mob.EndermanEntity; import net.minecraft.entity.mob.EndermanEntity;
@@ -1,4 +1,4 @@
package io.ib67.sfcraft.mixin.server.optimize; package io.ib67.sfcraft.mixin.common.fixes;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.passive.BeeEntity; import net.minecraft.entity.passive.BeeEntity;
@@ -1,4 +1,4 @@
package io.ib67.sfcraft.mixin.server.fixes; package io.ib67.sfcraft.mixin.common.fixes;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@@ -1,38 +0,0 @@
package io.ib67.sfcraft.mixin.server.subserver;
import io.ib67.sfcraft.SFCraft;
import io.ib67.sfcraft.module.RoomModule;
import io.ib67.sfcraft.registry.RoomRegistry;
import io.ib67.sfcraft.util.Helper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.world.TeleportTarget;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.UUID;
@Mixin(Entity.class)
public abstract class EntityMixin {
@Shadow
public abstract UUID getUuid();
@Inject(at = @At("HEAD"), method = "teleportTo", cancellable = true)
private void sf$redirectTeleport(TeleportTarget teleportTarget, CallbackInfoReturnable<Entity> cir) {
if (RoomModule.isVirtual(this.getUuid())) {
cir.setReturnValue((Entity) (Object) this);
}
}
@Inject(at = @At("HEAD"), method = "canUsePortals", cancellable = true)
private void sf$disablePortal(boolean allowVehicles, CallbackInfoReturnable<Boolean> cir) {
var registry = SFCraft.getInjector().getInstance(RoomRegistry.class);
var $this = (Entity) (Object) this;
if (registry.isRoomWorld($this.getWorld().getRegistryKey())) {
cir.setReturnValue(false);
}
}
}
@@ -2,20 +2,16 @@ package io.ib67.sfcraft.mixin.server.subserver;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import io.ib67.sfcraft.SFCraft; import io.ib67.sfcraft.SFCraft;
import io.ib67.sfcraft.mixin.server.ServerChunkManagerMixin; import io.ib67.sfcraft.mixin.common.bridge.ServerChunkManagerBridge;
import io.ib67.sfcraft.module.RoomModule; import io.ib67.sfcraft.module.RoomModule;
import io.ib67.sfcraft.registry.RoomRegistry; import io.ib67.sfcraft.registry.RoomRegistry;
import io.ib67.sfcraft.util.Helper;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.network.ClientConnection; import net.minecraft.network.ClientConnection;
import net.minecraft.server.PlayerManager; import net.minecraft.server.PlayerManager;
import net.minecraft.server.network.ConnectedClientData; import net.minecraft.server.network.ConnectedClientData;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.GlobalPos; import net.minecraft.util.math.GlobalPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.TeleportTarget;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -23,7 +19,6 @@ import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@@ -71,7 +66,7 @@ public abstract class PlayerManagerMixin {
private void teleportToRoom(ServerPlayerEntity player, GlobalPos spawn) { private void teleportToRoom(ServerPlayerEntity player, GlobalPos spawn) {
var world = player.getServer().getWorld(spawn.dimension()); var world = player.getServer().getWorld(spawn.dimension());
var pos = spawn.pos(); var pos = spawn.pos();
((ServerChunkManagerMixin)world.getChunkManager()).getLevelManager().handleChunkEnter(player.getWatchedSection(), player); ((ServerChunkManagerBridge)world.getChunkManager()).getLevelManager().handleChunkEnter(player.getWatchedSection(), player);
player.teleport(world, pos.getX(), pos.getY(), pos.getZ(), Set.of(), 0, 0, true); player.teleport(world, pos.getX(), pos.getY(), pos.getZ(), Set.of(), 0, 0, true);
} }
@@ -1,29 +0,0 @@
package io.ib67.sfcraft.mixin.server.subserver.command;
import com.mojang.brigadier.context.CommandContext;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.GameRuleCommand;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.world.GameRules;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(GameRuleCommand.class)
public abstract class GameRuleCommandMixin {
@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;getGameRules()Lnet/minecraft/world/GameRules;"), method = "executeSet")
private static GameRules sf$redirectSetForPerWorld(MinecraftServer instance, CommandContext<ServerCommandSource> context) {
return getGameRule(instance, context.getSource());
}
@Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;getGameRules()Lnet/minecraft/world/GameRules;"), method = "executeQuery")
private static GameRules sf$redirectSetForPerWorld(MinecraftServer instance, ServerCommandSource context) {
return getGameRule(instance, context);
}
private static GameRules getGameRule(MinecraftServer instance, ServerCommandSource source) {
var world = source.getWorld();
if (world == null) return instance.getGameRules();
return world.getGameRules(); // this is same as Server#getGameRule since one GameRules is shared across multiple worlds in vanilla.
}
}
+8 -10
View File
@@ -8,14 +8,17 @@
"common.bridge.ItemBridge", "common.bridge.ItemBridge",
"common.bridge.ServerPlayerBridge", "common.bridge.ServerPlayerBridge",
"common.bridge.ServerWorldBridge", "common.bridge.ServerWorldBridge",
"server.ServerChunkManagerMixin" "common.bridge.ServerChunkManagerBridge",
"common.fixes.EndermanEntityMixin",
"common.fixes.ProjectileEntityMixin",
"common.fixes.LivingEntityMixin",
"common.EntityMixin",
"common.MobEntityMixin",
"common.PlayerEntityMixin"
], ],
"client": [ "client": [
], ],
"server": [ "server": [
"common.EntityMixin",
"common.MobEntityMixin",
"common.PlayerEntityMixin",
"server.AbstractFurnaceBlockMixin", "server.AbstractFurnaceBlockMixin",
"server.LegacyQueryHandlerMixin", "server.LegacyQueryHandlerMixin",
"server.MinecraftServerMixin", "server.MinecraftServerMixin",
@@ -25,16 +28,11 @@
"server.ServerPlayNetworkHandlerMixin", "server.ServerPlayNetworkHandlerMixin",
"server.ServerWorldMixin", "server.ServerWorldMixin",
"server.SleepManagerMixin", "server.SleepManagerMixin",
"server.fixes.EndermanEntityMixin",
"server.fixes.ProjectileEntityMixin",
"server.optimize.LivingEntityMixin",
"server.subserver.EntityMixin",
"server.subserver.PlayerListS2CPacket$EntryMixin", "server.subserver.PlayerListS2CPacket$EntryMixin",
"server.subserver.PlayerManagerMixin", "server.subserver.PlayerManagerMixin",
"server.subserver.PlayerSaveHandlerMixin", "server.subserver.PlayerSaveHandlerMixin",
"server.subserver.ServerLoginNetworkHandlerMixin", "server.subserver.ServerLoginNetworkHandlerMixin",
"server.subserver.ServerPlayerEntityMixin", "server.subserver.ServerPlayerEntityMixin"
"server.subserver.command.GameRuleCommandMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1