Added LivingEntity#setArrowCount and fixed metadata during respawn

This commit is contained in:
Felix Cravic 2020-05-25 20:32:47 +02:00
parent a962b83958
commit 14e9dcb811
3 changed files with 31 additions and 5 deletions

View File

@ -10,6 +10,7 @@ import net.minestom.server.entity.damage.DamageType;
import net.minestom.server.entity.fakeplayer.FakePlayer;
import net.minestom.server.entity.fakeplayer.FakePlayerController;
import net.minestom.server.event.entity.EntityAttackEvent;
import net.minestom.server.event.entity.EntityDeathEvent;
import net.minestom.server.event.item.ItemDropEvent;
import net.minestom.server.event.item.ItemUpdateStateEvent;
import net.minestom.server.event.item.PickupItemEvent;
@ -152,6 +153,10 @@ public class PlayerInit {
//chickenCreature.setInstance(player.getInstance());
FakePlayer fakePlayer = new FakePlayer(UUID.randomUUID(), "test", true);
fakePlayer.addEventCallback(EntityDeathEvent.class, e -> {
fakePlayer.getController().respawn();
});
fakePlayer.setArrowCount(25);
FakePlayerController controller = fakePlayer.getController();
controller.sendChatMessage("I am a bot!");
@ -207,7 +212,7 @@ public class PlayerInit {
player.addEventCallback(PlayerSpawnEvent.class, event -> {
player.setGameMode(GameMode.SURVIVAL);
player.teleport(new Position(0, 70, 0));
player.teleport(new Position(0, 45, 0));
player.setGlowing(true);
@ -245,7 +250,7 @@ public class PlayerInit {
});
player.addEventCallback(PlayerRespawnEvent.class, event -> {
event.setRespawnPosition(new Position(0f, 70f, 0f));
event.setRespawnPosition(new Position(0f, 45f, 0f));
});
player.addEventCallback(PlayerUseItemEvent.class, useEvent -> {

View File

@ -35,6 +35,8 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
private boolean isHandActive;
private boolean offHand;
private boolean riptideSpinAttack;
// The number of arrows in entity
private int arrowCount;
/**
* Time at which this entity must be extinguished
@ -117,6 +119,7 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
super.getMetadataConsumer().accept(packet);
fillMetadataIndex(packet, 7);
fillMetadataIndex(packet, 8);
fillMetadataIndex(packet, 11);
// TODO all remaining metadata
};
@ -141,9 +144,22 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
packet.writeByte((byte) 8);
packet.writeByte(METADATA_FLOAT);
packet.writeFloat(health);
} else if (index == 11) {
packet.writeByte((byte) 11);
packet.writeByte(METADATA_VARINT);
packet.writeVarInt(arrowCount);
}
}
public int getArrowCount() {
return arrowCount;
}
public void setArrowCount(int arrowCount) {
this.arrowCount = arrowCount;
sendMetadataIndex(11);
}
/**
* Kill the entity, trigger the {@link EntityDeathEvent} event
*/
@ -151,6 +167,10 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
refreshIsDead(true); // So the entity isn't killed over and over again
triggerStatus((byte) 3); // Start death animation status
setHealth(0);
// Reset velocity
velocity.zero();
EntityDeathEvent entityDeathEvent = new EntityDeathEvent(this);
callEvent(EntityDeathEvent.class, entityDeathEvent);
}
@ -342,7 +362,7 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
sendPacketToViewers(getMetadataPacket());
}
public void refreshIsDead(boolean isDead) {
protected void refreshIsDead(boolean isDead) {
this.isDead = isDead;
}

View File

@ -835,6 +835,7 @@ public class Player extends LivingEntity {
spawnPlayerPacket.playerUuid = getUuid();
spawnPlayerPacket.position = getPosition();
sendPacketToViewers(spawnPlayerPacket);
sendPacketToViewersAndSelf(getMetadataPacket());
playerConnection.sendPacket(getPropertiesPacket());
sendUpdateHealthPacket();
syncEquipments();
@ -1356,7 +1357,7 @@ public class Player extends LivingEntity {
sendPacketToViewersAndSelf(playerInfoPacket);
}
public void refreshLevelType(LevelType levelType) {
protected void refreshLevelType(LevelType levelType) {
this.levelType = levelType;
}
@ -1375,7 +1376,7 @@ public class Player extends LivingEntity {
refreshEating(false);
}
public void refreshOpenInventory(Inventory openInventory) {
protected void refreshOpenInventory(Inventory openInventory) {
this.openInventory = openInventory;
}