mirror of
https://github.com/Minestom/Minestom.git
synced 2024-10-01 07:57:41 +02:00
Villagers and Ageable
This commit is contained in:
parent
2a55ed654d
commit
ca3d36ac0c
@ -1,6 +1,8 @@
|
||||
package net.minestom.server.entity;
|
||||
|
||||
import net.minestom.server.entity.type.ambient.EntityBat;
|
||||
import net.minestom.server.entity.type.ambient.EntityVillager;
|
||||
import net.minestom.server.entity.type.ambient.EntityWanderingTrader;
|
||||
import net.minestom.server.entity.type.animal.*;
|
||||
import net.minestom.server.entity.type.decoration.EntityArmorStand;
|
||||
import net.minestom.server.entity.type.monster.*;
|
||||
|
12
src/main/java/net/minestom/server/entity/type/Ageable.java
Normal file
12
src/main/java/net/minestom/server/entity/type/Ageable.java
Normal file
@ -0,0 +1,12 @@
|
||||
package net.minestom.server.entity.type;
|
||||
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public interface Ageable {
|
||||
|
||||
boolean isBaby();
|
||||
|
||||
void setBaby(boolean value);
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package net.minestom.server.entity.type;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public class AgeableCreature extends EntityCreature implements Ageable {
|
||||
|
||||
protected AgeableCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition) {
|
||||
super(entityType, spawnPosition);
|
||||
}
|
||||
|
||||
protected AgeableCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) {
|
||||
super(entityType, spawnPosition, instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBaby() {
|
||||
return this.metadata.getIndex((byte) 15, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBaby(boolean value) {
|
||||
this.metadata.setIndex((byte) 15, Metadata.Boolean(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getEyeHeight() {
|
||||
return isBaby() ? super.getEyeHeight() / 2 : super.getEyeHeight();
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package net.minestom.server.entity.type;
|
||||
|
||||
public interface Animal {
|
||||
public interface Animal extends Ageable {
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
package net.minestom.server.entity.type.ambient;
|
||||
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public class EntityAbstractVillager extends AgeableCreature {
|
||||
|
||||
EntityAbstractVillager(@NotNull EntityType entityType, @NotNull Position spawnPosition) {
|
||||
super(entityType, spawnPosition);
|
||||
}
|
||||
|
||||
EntityAbstractVillager(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) {
|
||||
super(entityType, spawnPosition, instance);
|
||||
}
|
||||
|
||||
public int getHeadShakeTimer() {
|
||||
return this.metadata.getIndex((byte) 16, 0);
|
||||
}
|
||||
|
||||
public void setHeadShakeTimer(int value) {
|
||||
this.metadata.setIndex((byte) 16, Metadata.VarInt(value));
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
package net.minestom.server.entity.type.ambient;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityBat extends EntityCreature implements Animal {
|
||||
public class EntityBat extends AgeableCreature implements Animal {
|
||||
|
||||
public EntityBat(Position spawnPosition) {
|
||||
super(EntityType.BAT, spawnPosition);
|
||||
|
@ -0,0 +1,131 @@
|
||||
package net.minestom.server.entity.type.ambient;
|
||||
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public class EntityVillager extends EntityAbstractVillager {
|
||||
|
||||
public EntityVillager(@NotNull Position spawnPosition) {
|
||||
this(EntityType.VILLAGER, spawnPosition);
|
||||
}
|
||||
|
||||
public EntityVillager(@NotNull Position spawnPosition, @Nullable Instance instance) {
|
||||
this(EntityType.VILLAGER, spawnPosition, instance);
|
||||
}
|
||||
|
||||
EntityVillager(@NotNull EntityType entityType, @NotNull Position spawnPosition) {
|
||||
super(entityType, spawnPosition);
|
||||
}
|
||||
|
||||
EntityVillager(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) {
|
||||
super(entityType, spawnPosition, instance);
|
||||
}
|
||||
|
||||
public VillagerData getVillagerData() {
|
||||
int[] data = this.metadata.getIndex((byte) 17, null);
|
||||
if (data == null) {
|
||||
return new VillagerData(Type.PLAINS, Profession.NONE, Level.NOVICE);
|
||||
}
|
||||
return new VillagerData(Type.VALUES[data[0]], Profession.VALUES[data[1]], Level.VALUES[data[2] - 1]);
|
||||
}
|
||||
|
||||
public void setVillagerData(VillagerData data) {
|
||||
this.metadata.setIndex((byte) 17, Metadata.VillagerData(
|
||||
data.type.ordinal(),
|
||||
data.profession.ordinal(),
|
||||
data.level.ordinal() + 1
|
||||
));
|
||||
}
|
||||
|
||||
public static class VillagerData {
|
||||
|
||||
private Type type;
|
||||
private Profession profession;
|
||||
private Level level;
|
||||
|
||||
public VillagerData(@NotNull Type type, @NotNull Profession profession, @NotNull Level level) {
|
||||
this.type = type;
|
||||
this.profession = profession;
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Type getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public void setType(@NotNull Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Profession getProfession() {
|
||||
return this.profession;
|
||||
}
|
||||
|
||||
public void setProfession(@NotNull Profession profession) {
|
||||
this.profession = profession;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Level getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel(@NotNull Level level) {
|
||||
this.level = level;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
DESERT,
|
||||
JUNGLE,
|
||||
PLAINS,
|
||||
SAVANNA,
|
||||
SNOW,
|
||||
SWAMP,
|
||||
TAIGA;
|
||||
|
||||
public final static Type[] VALUES = values();
|
||||
}
|
||||
|
||||
public enum Profession {
|
||||
NONE,
|
||||
ARMORER,
|
||||
BUTCHER,
|
||||
CARTOGRAPHER,
|
||||
CLERIC,
|
||||
FARMER,
|
||||
FISHERMAN,
|
||||
FLETCHER,
|
||||
LEATHERWORKER,
|
||||
LIBRARIAN,
|
||||
NITWIT,
|
||||
UNEMPLOYED,
|
||||
MASON,
|
||||
SHEPHERD,
|
||||
TOOLSMITH,
|
||||
WEAPONSMITH;
|
||||
|
||||
public final static Profession[] VALUES = values();
|
||||
}
|
||||
|
||||
public enum Level {
|
||||
NOVICE,
|
||||
APPRENTICE,
|
||||
JOURNEYMAN,
|
||||
EXPERT,
|
||||
MASTER;
|
||||
|
||||
public final static Level[] VALUES = values();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package net.minestom.server.entity.type.ambient;
|
||||
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public class EntityWanderingTrader extends EntityAbstractVillager {
|
||||
|
||||
public EntityWanderingTrader(@NotNull Position spawnPosition) {
|
||||
super(EntityType.WANDERING_TRADER, spawnPosition);
|
||||
}
|
||||
|
||||
public EntityWanderingTrader(@NotNull Position spawnPosition, @Nullable Instance instance) {
|
||||
super(EntityType.WANDERING_TRADER, spawnPosition, instance);
|
||||
}
|
||||
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.instance.Instance;
|
||||
import net.minestom.server.utils.Position;
|
||||
@ -14,7 +14,7 @@ import java.util.UUID;
|
||||
/**
|
||||
* Created by k.shandurenko on 23.02.2021
|
||||
*/
|
||||
public class EntityAbstractHorse extends EntityCreature implements Animal {
|
||||
public class EntityAbstractHorse extends AgeableCreature implements Animal {
|
||||
|
||||
private final static byte TAMED_BIT = 0x02;
|
||||
private final static byte SADDLED_BIT = 0x04;
|
||||
|
@ -1,13 +1,13 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityBee extends EntityCreature implements Animal {
|
||||
public class EntityBee extends AgeableCreature implements Animal {
|
||||
public EntityBee(Position spawnPosition) {
|
||||
super(EntityType.BEE, spawnPosition);
|
||||
setBoundingBox(0.7f,0.6f,0.7f);
|
||||
setBoundingBox(0.7f, 0.6f, 0.7f);
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityChicken extends EntityCreature implements Animal {
|
||||
public class EntityChicken extends AgeableCreature implements Animal {
|
||||
public EntityChicken(Position spawnPosition) {
|
||||
super(EntityType.CHICKEN, spawnPosition);
|
||||
setBoundingBox(0.4f, 0.7f, 0.4f);
|
||||
|
@ -1,11 +1,11 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityCow extends EntityCreature implements Animal {
|
||||
public class EntityCow extends AgeableCreature implements Animal {
|
||||
public EntityCow(Position spawnPosition) {
|
||||
super(EntityType.COW, spawnPosition);
|
||||
setBoundingBox(0.9f, 1.4f, 0.9f);
|
||||
|
@ -1,13 +1,13 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityDolphin extends EntityCreature implements Animal {
|
||||
public class EntityDolphin extends AgeableCreature implements Animal {
|
||||
public EntityDolphin(Position spawnPosition) {
|
||||
super(EntityType.DOLPHIN, spawnPosition);
|
||||
setBoundingBox(0.9f,0.6f,0.9f);
|
||||
setBoundingBox(0.9f, 0.6f, 0.9f);
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityFox extends EntityCreature implements Animal {
|
||||
public class EntityFox extends AgeableCreature implements Animal {
|
||||
public EntityFox(Position spawnPosition) {
|
||||
super(EntityType.FOX, spawnPosition);
|
||||
setBoundingBox(0.6f, 0.7f, 0.6f);
|
||||
|
@ -1,13 +1,13 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EntityMooshroom extends EntityCreature implements Animal {
|
||||
public class EntityMooshroom extends AgeableCreature implements Animal {
|
||||
|
||||
public EntityMooshroom(Position spawnPosition) {
|
||||
super(EntityType.MOOSHROOM, spawnPosition);
|
||||
|
@ -1,11 +1,11 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityOcelot extends EntityCreature implements Animal {
|
||||
public class EntityOcelot extends AgeableCreature implements Animal {
|
||||
public EntityOcelot(Position spawnPosition) {
|
||||
super(EntityType.OCELOT, spawnPosition);
|
||||
setBoundingBox(0.6f, 0.7f, 0.6f);
|
||||
|
@ -1,11 +1,11 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityPanda extends EntityCreature implements Animal {
|
||||
public class EntityPanda extends AgeableCreature implements Animal {
|
||||
public EntityPanda(Position spawnPosition) {
|
||||
super(EntityType.PANDA, spawnPosition);
|
||||
setBoundingBox(1.3f, 1.25f, 1.3f);
|
||||
|
@ -1,12 +1,12 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityPig extends EntityCreature implements Animal {
|
||||
public class EntityPig extends AgeableCreature implements Animal {
|
||||
|
||||
public EntityPig(Position spawnPosition) {
|
||||
super(EntityType.PIG, spawnPosition);
|
||||
|
@ -1,12 +1,12 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityPolarBear extends EntityCreature implements Animal {
|
||||
public class EntityPolarBear extends AgeableCreature implements Animal {
|
||||
|
||||
public EntityPolarBear(Position spawnPosition) {
|
||||
super(EntityType.POLAR_BEAR, spawnPosition);
|
||||
|
@ -1,12 +1,12 @@
|
||||
package net.minestom.server.entity.type.animal;
|
||||
|
||||
import net.minestom.server.entity.EntityCreature;
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.AgeableCreature;
|
||||
import net.minestom.server.entity.type.Animal;
|
||||
import net.minestom.server.utils.Position;
|
||||
|
||||
public class EntityRabbit extends EntityCreature implements Animal {
|
||||
public class EntityRabbit extends AgeableCreature implements Animal {
|
||||
|
||||
public EntityRabbit(Position spawnPosition) {
|
||||
super(EntityType.RABBIT, spawnPosition);
|
||||
|
@ -2,6 +2,7 @@ package net.minestom.server.entity.type.monster;
|
||||
|
||||
import net.minestom.server.entity.EntityType;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.type.ambient.EntityAbstractVillager;
|
||||
import net.minestom.server.utils.Position;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -22,12 +23,20 @@ public class EntityZombieVillager extends EntityZombie {
|
||||
this.metadata.setIndex((byte) 18, Metadata.Boolean(value));
|
||||
}
|
||||
|
||||
public int[] getVillagerData() {
|
||||
return this.metadata.getIndex((byte) 19, new int[]{});
|
||||
public EntityAbstractVillager.VillagerData getVillagerData() {
|
||||
int[] data = this.metadata.getIndex((byte) 17, null);
|
||||
if (data == null) {
|
||||
return new EntityAbstractVillager.VillagerData(EntityAbstractVillager.Type.PLAINS, EntityAbstractVillager.Profession.NONE, EntityAbstractVillager.Level.NOVICE);
|
||||
}
|
||||
return new EntityAbstractVillager.VillagerData(EntityAbstractVillager.Type.VALUES[data[0]], EntityAbstractVillager.Profession.VALUES[data[1]], EntityAbstractVillager.Level.VALUES[data[2] - 1]);
|
||||
}
|
||||
|
||||
public void setVillagerData(int[] value) {
|
||||
this.metadata.setIndex((byte) 19, Metadata.VillagerData(value[0], value[1], value[2]));
|
||||
public void setVillagerData(EntityAbstractVillager.VillagerData data) {
|
||||
this.metadata.setIndex((byte) 17, Metadata.VillagerData(
|
||||
data.getType().ordinal(),
|
||||
data.getProfession().ordinal(),
|
||||
data.getLevel().ordinal() + 1
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user