feat: Implement Arcane Lock synchronization packet handling. Fixes #900 GeckoLib incompat

This commit is contained in:
WinDanesz
2026-06-25 21:29:14 +02:00
parent 768a756723
commit d6087dfb9b
6 changed files with 83 additions and 0 deletions
@@ -181,6 +181,8 @@ public class CommonProxy {
public void handleBombExplosionPacket(PacketBombExplosion.Message message){}
public void handleArcaneLockSyncPacket(PacketSyncArcaneLock.Message message){}
// SECTION Misc
// ===============================================================================================================
@@ -717,6 +717,20 @@ public class ClientProxy extends CommonProxy {
}else Wizardry.logger.warn("Received a PacketConquerShrine, but there was no shrine core at the position sent");
}
@Override
public void handleArcaneLockSyncPacket(PacketSyncArcaneLock.Message message){
if(Minecraft.getMinecraft().world != null){
TileEntity tileentity = Minecraft.getMinecraft().world.getTileEntity(message.pos);
if(tileentity != null){
if(message.locked){
tileentity.getTileData().setUniqueId(electroblob.wizardry.spell.ArcaneLock.NBT_KEY, message.owner);
}else{
electroblob.wizardry.util.NBTExtras.removeUniqueId(tileentity.getTileData(), electroblob.wizardry.spell.ArcaneLock.NBT_KEY);
}
}
}
}
@Override
public void handleBombExplosionPacket(PacketBombExplosion.Message message){
@@ -60,8 +60,12 @@ public class RenderArcaneLock {
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GlStateManager.enableDepth();
GlStateManager.depthMask(true);
GlStateManager.disableCull();
lighting = GL11.glIsEnabled(GL11.GL_LIGHTING);
GlStateManager.disableLighting();
GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
@@ -90,6 +94,7 @@ public class RenderArcaneLock {
tessellator.draw();
GlStateManager.enableCull();
GlStateManager.disableBlend();
GlStateManager.enableTexture2D();
if(lighting){
@@ -0,0 +1,57 @@
package electroblob.wizardry.packet;
import electroblob.wizardry.Wizardry;
import io.netty.buffer.ByteBuf;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import javax.annotation.Nullable;
import java.util.UUID;
/**
* <b>[Server -> Client]</b> This packet is sent when a container is locked or unlocked by Arcane Lock to update clients.
*/
public class PacketSyncArcaneLock implements IMessageHandler<PacketSyncArcaneLock.Message, IMessage> {
@Override
public IMessage onMessage(Message message, MessageContext ctx){
if(ctx.side.isClient()){
net.minecraft.client.Minecraft.getMinecraft().addScheduledTask(() -> Wizardry.proxy.handleArcaneLockSyncPacket(message));
}
return null;
}
public static class Message implements IMessage {
public BlockPos pos;
public boolean locked;
public UUID owner;
public Message(){}
public Message(BlockPos pos, boolean locked, @Nullable UUID owner){
this.pos = pos;
this.locked = locked;
this.owner = owner != null ? owner : new UUID(0, 0);
}
@Override
public void fromBytes(ByteBuf buf){
this.pos = BlockPos.fromLong(buf.readLong());
this.locked = buf.readBoolean();
this.owner = new UUID(buf.readLong(), buf.readLong());
}
@Override
public void toBytes(ByteBuf buf){
buf.writeLong(pos.toLong());
buf.writeBoolean(locked);
buf.writeLong(owner.getMostSignificantBits());
buf.writeLong(owner.getLeastSignificantBits());
}
}
}
@@ -36,6 +36,7 @@ public class WizardryPacketHandler {
registerMessage(PacketRequestDonationPerks.class, PacketRequestDonationPerks.Message.class);
registerMessage(PacketSyncDonationPerks.class, PacketSyncDonationPerks.Message.class);
registerMessage(PacketBombExplosion.class, PacketBombExplosion.Message.class);
registerMessage(PacketSyncArcaneLock.class, PacketSyncArcaneLock.Message.class);
}
private static int nextPacketId = 0;
@@ -2,6 +2,8 @@ package electroblob.wizardry.spell;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.item.SpellActions;
import electroblob.wizardry.packet.PacketSyncArcaneLock;
import electroblob.wizardry.packet.WizardryPacketHandler;
import electroblob.wizardry.util.*;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
@@ -74,12 +76,14 @@ public class ArcaneLock extends SpellRay {
if(world.getPlayerEntityByUUID(tileentity.getTileData().getUniqueId(NBT_KEY)) == player){
NBTExtras.removeUniqueId(tileentity.getTileData(), NBT_KEY);
world.markAndNotifyBlock(pos, null, world.getBlockState(pos), world.getBlockState(pos), 3);
WizardryPacketHandler.net.sendToDimension(new PacketSyncArcaneLock.Message(pos, false, null), world.provider.getDimension());
return true;
}
}else{
// Locking
tileentity.getTileData().setUniqueId(NBT_KEY, player.getUniqueID());
world.markAndNotifyBlock(pos, null, world.getBlockState(pos), world.getBlockState(pos), 3);
WizardryPacketHandler.net.sendToDimension(new PacketSyncArcaneLock.Message(pos, true, player.getUniqueID()), world.provider.getDimension());
return true;
}
}