feat: Add entity meta support for WrappedBlockState.

This commit is contained in:
huanmeng-qwq 2025-07-20 18:51:40 +08:00
parent 9dec1374d6
commit 56e64cde5b
No known key found for this signature in database
GPG key ID: A282328441529B42
4 changed files with 43 additions and 1 deletions

View file

@ -1,6 +1,8 @@
package me.tofaa.entitylib.meta.display;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
import me.tofaa.entitylib.meta.Metadata;
public class BlockDisplayMeta extends AbstractDisplayMeta {
@ -20,4 +22,11 @@ public class BlockDisplayMeta extends AbstractDisplayMeta {
super.metadata.setIndex(OFFSET, EntityDataTypes.BLOCK_STATE, blockId);
}
public WrappedBlockState getBlockState() {
return WrappedBlockState.getByGlobalId(PacketEvents.getAPI().getServerManager().getVersion().toClientVersion(), getBlockId());
}
public void setBlockState(WrappedBlockState blockState) {
setBlockId(blockState.getGlobalId());
}
}

View file

@ -1,6 +1,8 @@
package me.tofaa.entitylib.meta.mobs.monster;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
import org.jetbrains.annotations.Nullable;
@ -24,6 +26,16 @@ public class EndermanMeta extends MobMeta {
super.metadata.setIndex(OFFSET, EntityDataTypes.OPTIONAL_INT, Optional.ofNullable(value));
}
public WrappedBlockState getCarriedBlockState() {
Integer carriedBlockID = getCarriedBlockID();
if (carriedBlockID == null) return null;
return WrappedBlockState.getByGlobalId(PacketEvents.getAPI().getServerManager().getVersion().toClientVersion(), carriedBlockID);
}
public void setCarriedBlockState(WrappedBlockState blockState) {
setCarriedBlockID(blockState.getGlobalId());
}
public boolean isScreaming() {
return super.metadata.getIndex(offset(OFFSET, 1), false);
}
@ -33,7 +45,7 @@ public class EndermanMeta extends MobMeta {
}
public boolean isStaring() {
return super.metadata.getIndex(offset(OFFSET, 2), false);
return super.metadata.getIndex(offset(OFFSET, 2), false);
}
public void setStaring(boolean value) {

View file

@ -1,6 +1,8 @@
package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
import com.github.retrooper.packetevents.util.Vector3i;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
@ -34,6 +36,14 @@ public class FallingBlockMeta extends EntityMeta implements ObjectData {
this.blockStateId = blockStateId;
}
public WrappedBlockState getBlockState() {
return WrappedBlockState.getByGlobalId(PacketEvents.getAPI().getServerManager().getVersion().toClientVersion(), getBlockStateId());
}
public void setBlockStateId(WrappedBlockState blockState) {
setBlockStateId(blockState.getGlobalId());
}
@Override
public int getObjectData() {
return blockStateId;

View file

@ -1,6 +1,8 @@
package me.tofaa.entitylib.meta.other;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState;
import com.github.retrooper.packetevents.protocol.world.states.type.StateTypes;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;
@ -28,4 +30,13 @@ public class TntMeta extends EntityMeta {
public void setBlockData(int blockData) {
super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.BLOCK_STATE, blockData);
}
public WrappedBlockState getBlockState() {
return WrappedBlockState.getByGlobalId(PacketEvents.getAPI().getServerManager().getVersion().toClientVersion(), getBlockData());
}
public void setBlockState(WrappedBlockState blockState) {
setBlockData(blockState.getGlobalId());
}
}