Merge pull request #2250 from MellowArpeggiation/master

Nodespace performance improvements MkII
This commit is contained in:
HbmMods 2025-07-01 10:03:23 +02:00 committed by GitHub
commit 3592deca8e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 108 additions and 239 deletions

View File

@ -1,6 +0,0 @@
package com.hbm.interfaces;
public interface IAnimatedDoor extends IDoor {
public void handleNewState(byte state);
}

View File

@ -1,24 +0,0 @@
package com.hbm.interfaces;
public interface IDoor {
void open();
void close();
DoorState getState();
void toggle();
default boolean setTexture(String tex) {
return false;
}
default void setTextureState(byte tex) { }
default boolean setSkinIndex(byte skinIndex) {
return false;
}
enum DoorState {
CLOSED,
OPEN,
CLOSING,
OPENING
}
}

View File

@ -53,8 +53,6 @@ public class PacketDispatcher {
wrapper.registerMessage(NBTControlPacket.Handler.class, NBTControlPacket.class, i++, Side.SERVER); wrapper.registerMessage(NBTControlPacket.Handler.class, NBTControlPacket.class, i++, Side.SERVER);
//Packet to send for anvil recipes to be crafted //Packet to send for anvil recipes to be crafted
wrapper.registerMessage(AnvilCraftPacket.Handler.class, AnvilCraftPacket.class, i++, Side.SERVER); wrapper.registerMessage(AnvilCraftPacket.Handler.class, AnvilCraftPacket.class, i++, Side.SERVER);
//Sends a funi text to display like a music disc announcement
wrapper.registerMessage(TEDoorAnimationPacket.Handler.class, TEDoorAnimationPacket.class, i++, Side.CLIENT);
//Does ExVNT standard player knockback //Does ExVNT standard player knockback
wrapper.registerMessage(ExplosionKnockbackPacket.Handler.class, ExplosionKnockbackPacket.class, i++, Side.CLIENT); wrapper.registerMessage(ExplosionKnockbackPacket.Handler.class, ExplosionKnockbackPacket.class, i++, Side.CLIENT);
//just go fuck yourself already //just go fuck yourself already

View File

@ -1,77 +0,0 @@
package com.hbm.packet.toclient;
import com.hbm.interfaces.IAnimatedDoor;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.tileentity.TileEntity;
public class TEDoorAnimationPacket implements IMessage {
public int x, y, z;
public byte state;
public byte skinIndex;
public byte texture;
public TEDoorAnimationPacket() {
}
public TEDoorAnimationPacket(int x, int y, int z, byte state) {
this(x, y, z, state, (byte) 0, (byte) -1);
}
public TEDoorAnimationPacket(int x, int y, int z, byte state, byte skinIndex, byte tex) {
this.x = x;
this.y = y;
this.z = z;
this.state = state;
this.skinIndex = skinIndex;
this.texture = tex;
}
@Override
public void fromBytes(ByteBuf buf) {
x = buf.readInt();
y = buf.readInt();
z = buf.readInt();
state = buf.readByte();
skinIndex = buf.readByte();
if(buf.readableBytes() == 1){
texture = buf.readByte();
}
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(x);
buf.writeInt(y);
buf.writeInt(z);
buf.writeByte(state);
buf.writeByte(skinIndex);
if(texture != -1){
buf.writeByte(texture);
}
}
public static class Handler implements IMessageHandler<TEDoorAnimationPacket, IMessage> {
@Override
@SideOnly(Side.CLIENT)
public IMessage onMessage(TEDoorAnimationPacket m, MessageContext ctx) {
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
if(te instanceof IAnimatedDoor){
((IAnimatedDoor) te).handleNewState(m.state);
((IAnimatedDoor) te).setSkinIndex(m.skinIndex);
((IAnimatedDoor) te).setTextureState(m.texture);
}
return null;
}
}
}

View File

@ -6,25 +6,22 @@ import java.util.Set;
import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.generic.BlockDoorGeneric; import com.hbm.blocks.generic.BlockDoorGeneric;
import com.hbm.interfaces.IAnimatedDoor;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.TEDoorAnimationPacket;
import com.hbm.sound.AudioWrapper; import com.hbm.sound.AudioWrapper;
import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.Rotation; import com.hbm.util.fauxpointtwelve.Rotation;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAnimatedDoor { public class TileEntityDoorGeneric extends TileEntityLockableBase {
//0: closed, 1: open, 2: closing, 3: opening //0: closed, 1: open, 2: closing, 3: opening
public byte state = 0; public byte state = 0;
@ -140,7 +137,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
if(state == 2 && openTicks == 0) { if(state == 2 && openTicks == 0) {
state = 0; state = 0;
} }
PacketDispatcher.wrapper.sendToAllAround(new TEDoorAnimationPacket(xCoord, yCoord, zCoord, state, skinIndex, (byte)(shouldUseBB ? 1 : 0)), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 100));
this.networkPackNT(100);
if(redstonePower == -1 && state == 1) { if(redstonePower == -1 && state == 1) {
tryToggle(-1); tryToggle(-1);
@ -153,6 +151,20 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
} }
} }
@Override
public void serialize(ByteBuf buf) {
buf.writeByte(state);
buf.writeByte(skinIndex);
buf.writeBoolean(shouldUseBB);
}
@Override
public void deserialize(ByteBuf buf) {
handleNewState(buf.readByte());
setSkinIndex(buf.readByte());
shouldUseBB = buf.readBoolean();
}
@Override @Override
public void onChunkUnload() { public void onChunkUnload() {
if(audio != null) { if(audio != null) {
@ -212,33 +224,6 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
return false; return false;
} }
@Override
public void open(){
if(state == 0)
toggle();
}
@Override
public void close(){
if(state == 1)
toggle();
}
@Override
public DoorState getState(){
return DoorState.values()[state];
}
@Override
public void toggle(){
if(state == 0) {
state = 3;
} else if(state == 1) {
state = 2;
}
}
@Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void handleNewState(byte state) { public void handleNewState(byte state) {
@ -315,22 +300,14 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
this.state = state; this.state = state;
if(state > 1) if(state > 1) animStartTime = System.currentTimeMillis();
animStartTime = System.currentTimeMillis();
} }
} }
//Ah yes piggy backing on this packet
@Override
public void setTextureState(byte tex){
shouldUseBB = tex > 0;
}
public int getSkinIndex() { public int getSkinIndex() {
return skinIndex; return skinIndex;
} }
@Override
public boolean setSkinIndex(byte skinIndex) { public boolean setSkinIndex(byte skinIndex) {
if(!getDoorType().hasSkins()) if(!getDoorType().hasSkins())
return false; return false;

View File

@ -2,6 +2,7 @@ package com.hbm.uninos;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Set; import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -117,7 +118,7 @@ public class UniNodespace {
public static class UniNodeWorld { public static class UniNodeWorld {
public HashMap<Pair<BlockPos, INetworkProvider>, GenNode> nodes = new HashMap(); public HashMap<Pair<BlockPos, INetworkProvider>, GenNode> nodes = new LinkedHashMap<>();
/** Adds a node at all its positions to the nodespace */ /** Adds a node at all its positions to the nodespace */
public void pushNode(GenNode node) { public void pushNode(GenNode node) {