Merge pull request #39 from huanmeng-qwq/blockstate

Add entity meta support for WrappedBlockState.
This commit is contained in:
Tofaa 2025-07-20 15:09:22 +04:00 committed by GitHub
commit d6a3cb72a4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 48 additions and 3 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,11 +1,12 @@
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;
import java.util.Optional;
import org.jetbrains.annotations.Nullable;
public class EndermanMeta extends MobMeta {
@ -24,6 +25,20 @@ 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) {
if (blockState == null) {
setCarriedBlockID(null);
return;
}
setCarriedBlockID(blockState.getGlobalId());
}
public boolean isScreaming() {
return super.metadata.getIndex(offset(OFFSET, 1), false);
}
@ -33,7 +48,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 setBlockState(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());
}
}