mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-06 00:17:58 +01:00
Added EntityItemFrame
This commit is contained in:
parent
ef53c7f4b8
commit
43059df920
@ -0,0 +1,100 @@
|
|||||||
|
package net.minestom.server.entity.type;
|
||||||
|
|
||||||
|
import net.minestom.server.entity.EntityType;
|
||||||
|
import net.minestom.server.entity.ObjectEntity;
|
||||||
|
import net.minestom.server.item.ItemStack;
|
||||||
|
import net.minestom.server.network.packet.PacketWriter;
|
||||||
|
import net.minestom.server.utils.Position;
|
||||||
|
import net.minestom.server.utils.Rotation;
|
||||||
|
import net.minestom.server.utils.item.ItemStackUtils;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
// FIXME: https://wiki.vg/Object_Data#Item_Frame_.28id_71.29
|
||||||
|
// "You have to set both Orientation and Yaw/Pitch accordingly, otherwise it will not work."
|
||||||
|
public class EntityItemFrame extends ObjectEntity {
|
||||||
|
|
||||||
|
private ItemFrameOrientation orientation;
|
||||||
|
private ItemStack itemStack;
|
||||||
|
private Rotation rotation;
|
||||||
|
|
||||||
|
public EntityItemFrame(Position spawnPosition, ItemFrameOrientation orientation) {
|
||||||
|
super(EntityType.ITEM_FRAME, spawnPosition);
|
||||||
|
this.orientation = orientation;
|
||||||
|
this.rotation = Rotation.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Consumer<PacketWriter> getMetadataConsumer() {
|
||||||
|
return packet -> {
|
||||||
|
super.getMetadataConsumer().accept(packet);
|
||||||
|
fillMetadataIndex(packet, 7);
|
||||||
|
fillMetadataIndex(packet, 8);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillMetadataIndex(PacketWriter packet, int index) {
|
||||||
|
super.fillMetadataIndex(packet, index);
|
||||||
|
if (index == 7) {
|
||||||
|
packet.writeByte((byte) 7);
|
||||||
|
packet.writeByte(METADATA_SLOT);
|
||||||
|
packet.writeItemStack(ItemStackUtils.notNull(itemStack));
|
||||||
|
} else if (index == 8) {
|
||||||
|
packet.writeByte((byte) 8);
|
||||||
|
packet.writeByte(METADATA_VARINT);
|
||||||
|
packet.writeVarInt(rotation.ordinal());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getObjectData() {
|
||||||
|
return orientation.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the item stack in the frame
|
||||||
|
*
|
||||||
|
* @return the item stack in the frame
|
||||||
|
*/
|
||||||
|
public ItemStack getItemStack() {
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the item stack in the frame
|
||||||
|
*
|
||||||
|
* @param itemStack the new item stack in the frame
|
||||||
|
*/
|
||||||
|
public void setItemStack(ItemStack itemStack) {
|
||||||
|
this.itemStack = itemStack;
|
||||||
|
sendMetadataIndex(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the item rotation
|
||||||
|
*
|
||||||
|
* @return the item rotation
|
||||||
|
*/
|
||||||
|
public Rotation getRotation() {
|
||||||
|
return rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the item rotation
|
||||||
|
*
|
||||||
|
* @param rotation the new item rotation
|
||||||
|
*/
|
||||||
|
public void setRotation(Rotation rotation) {
|
||||||
|
this.rotation = rotation;
|
||||||
|
sendMetadataIndex(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent the orientation of the frame
|
||||||
|
*/
|
||||||
|
public enum ItemFrameOrientation {
|
||||||
|
DOWN, UP, NORTH, SOUTH, WEST, EAST
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
57
src/main/java/net/minestom/server/utils/Rotation.java
Normal file
57
src/main/java/net/minestom/server/utils/Rotation.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package net.minestom.server.utils;
|
||||||
|
|
||||||
|
public enum Rotation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No rotation
|
||||||
|
*/
|
||||||
|
NONE,
|
||||||
|
/**
|
||||||
|
* Rotated clockwise by 45 degrees
|
||||||
|
*/
|
||||||
|
CLOCKWISE_45,
|
||||||
|
/**
|
||||||
|
* Rotated clockwise by 90 degrees
|
||||||
|
*/
|
||||||
|
CLOCKWISE,
|
||||||
|
/**
|
||||||
|
* Rotated clockwise by 135 degrees
|
||||||
|
*/
|
||||||
|
CLOCKWISE_135,
|
||||||
|
/**
|
||||||
|
* Flipped upside-down, a 180 degree rotation
|
||||||
|
*/
|
||||||
|
FLIPPED,
|
||||||
|
/**
|
||||||
|
* Flipped upside-down + 45 degree rotation
|
||||||
|
*/
|
||||||
|
FLIPPED_45,
|
||||||
|
/**
|
||||||
|
* Rotated counter-clockwise by 90 degrees
|
||||||
|
*/
|
||||||
|
COUNTER_CLOCKWISE,
|
||||||
|
/**
|
||||||
|
* Rotated counter-clockwise by 45 degrees
|
||||||
|
*/
|
||||||
|
COUNTER_CLOCKWISE_45;
|
||||||
|
|
||||||
|
private static final Rotation[] rotations = values();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotate clockwise by 90 degrees.
|
||||||
|
*
|
||||||
|
* @return the relative rotation
|
||||||
|
*/
|
||||||
|
public Rotation rotateClockwise() {
|
||||||
|
return rotations[(this.ordinal() + 1) & 0x7];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotate counter-clockwise by 90 degrees.
|
||||||
|
*
|
||||||
|
* @return the relative rotation
|
||||||
|
*/
|
||||||
|
public Rotation rotateCounterClockwise() {
|
||||||
|
return rotations[(this.ordinal() - 1) & 0x7];
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user