Skip to content

Commit f47c536

Browse files
committed
Begin work on custom entities.
1 parent 66225cc commit f47c536

197 files changed

Lines changed: 2262 additions & 2168 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,16 @@
6767
<scope>compile</scope>
6868
</dependency>
6969
<dependency>
70-
<groupId>com.nukkitx</groupId>
71-
<artifactId>fastutil-lite</artifactId>
72-
<version>8.1.1</version>
73-
<scope>compile</scope>
70+
<groupId>it.unimi.dsi</groupId>
71+
<artifactId>fastutil</artifactId>
72+
<version>8.3.0</version>
7473
</dependency>
74+
<!-- <dependency>-->
75+
<!-- <groupId>com.nukkitx</groupId>-->
76+
<!-- <artifactId>fastutil-lite</artifactId>-->
77+
<!-- <version>8.1.1</version>-->
78+
<!-- <scope>compile</scope>-->
79+
<!-- </dependency>-->
7580
<dependency>
7681
<groupId>com.spotify</groupId>
7782
<artifactId>completable-futures</artifactId>

src/main/java/cn/nukkit/AdventureSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void update() {
5555

5656
pk.commandPermission = (player.isOp() ? AdventureSettingsPacket.PERMISSION_OPERATOR : AdventureSettingsPacket.PERMISSION_NORMAL);
5757
pk.playerPermission = (player.isOp() ? Player.PERMISSION_OPERATOR : Player.PERMISSION_MEMBER);
58-
pk.entityUniqueId = player.getId();
58+
pk.entityUniqueId = player.getUniqueId();
5959

6060
Server.broadcastPacket(player.getViewers(), pk);
6161
player.dataPacket(pk);

src/main/java/cn/nukkit/Server.java

Lines changed: 14 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44
import cn.nukkit.command.*;
55
import cn.nukkit.console.NukkitConsole;
66
import cn.nukkit.entity.Attribute;
7-
import cn.nukkit.entity.Entity;
8-
import cn.nukkit.entity.EntityHuman;
97
import cn.nukkit.entity.data.Skin;
10-
import cn.nukkit.entity.item.*;
11-
import cn.nukkit.entity.mob.*;
12-
import cn.nukkit.entity.passive.*;
13-
import cn.nukkit.entity.projectile.*;
148
import cn.nukkit.event.HandlerList;
159
import cn.nukkit.event.server.BatchPacketsEvent;
1610
import cn.nukkit.event.server.PlayerDataSerializeEvent;
@@ -207,6 +201,7 @@ public class Server {
207201
private final StorageRegistry storageRegistry = StorageRegistry.get();
208202
private final BlockRegistry blockRegistry = BlockRegistry.get();
209203
private final ItemRegistry itemRegistry = ItemRegistry.get();
204+
private final EntityRegistry entityRegistry = EntityRegistry.get();
210205

211206
private final Map<InetSocketAddress, Player> players = new HashMap<>();
212207

@@ -560,6 +555,7 @@ public void boot() throws IOException {
560555
try {
561556
this.blockRegistry.close();
562557
this.itemRegistry.close();
558+
this.entityRegistry.close();
563559
this.gameRuleRegistry.close();
564560
this.storageRegistry.close();
565561
} catch (RegistryException e) {
@@ -889,7 +885,7 @@ public void onPlayerCompleteLoginSequence(Player player) {
889885

890886
public void onPlayerLogin(Player player) {
891887
if (this.sendUsageTicker > 0) {
892-
this.uniquePlayers.add(player.getUniqueId());
888+
this.uniquePlayers.add(player.getServerId());
893889
}
894890
}
895891

@@ -898,17 +894,17 @@ public void addPlayer(InetSocketAddress socketAddress, Player player) {
898894
}
899895

900896
public void addOnlinePlayer(Player player) {
901-
this.playerList.put(player.getUniqueId(), player);
902-
this.updatePlayerListData(player.getUniqueId(), player.getId(), player.getDisplayName(), player.getSkin(), player.getLoginChainData().getXUID());
897+
this.playerList.put(player.getServerId(), player);
898+
this.updatePlayerListData(player.getServerId(), player.getUniqueId(), player.getDisplayName(), player.getSkin(), player.getLoginChainData().getXUID());
903899
}
904900

905901
public void removeOnlinePlayer(Player player) {
906-
if (this.playerList.containsKey(player.getUniqueId())) {
907-
this.playerList.remove(player.getUniqueId());
902+
if (this.playerList.containsKey(player.getServerId())) {
903+
this.playerList.remove(player.getServerId());
908904

909905
PlayerListPacket pk = new PlayerListPacket();
910906
pk.type = PlayerListPacket.TYPE_REMOVE;
911-
pk.entries = new PlayerListPacket.Entry[]{new PlayerListPacket.Entry(player.getUniqueId())};
907+
pk.entries = new PlayerListPacket.Entry[]{new PlayerListPacket.Entry(player.getServerId())};
912908

913909
Server.broadcastPacket(this.playerList.values(), pk);
914910
}
@@ -936,7 +932,7 @@ public void updatePlayerListData(UUID uuid, long entityId, String name, Skin ski
936932
public void updatePlayerListData(UUID uuid, long entityId, String name, Skin skin, String xboxUserId, Collection<Player> players) {
937933
this.updatePlayerListData(uuid, entityId, name, skin, xboxUserId,
938934
players.stream()
939-
.filter(p -> !p.getUniqueId().equals(uuid))
935+
.filter(p -> !p.getServerId().equals(uuid))
940936
.toArray(Player[]::new));
941937
}
942938

@@ -960,11 +956,11 @@ public void sendFullPlayerListData(Player player) {
960956
pk.type = PlayerListPacket.TYPE_ADD;
961957
pk.entries = this.playerList.values().stream()
962958
.map(p -> new PlayerListPacket.Entry(
963-
p.getUniqueId(),
964-
p.getId(),
965-
p.getDisplayName(),
966-
p.getSkin(),
967-
p.getLoginChainData().getXUID()))
959+
p.getServerId(),
960+
p.getUniqueId(),
961+
p.getDisplayName(),
962+
p.getSkin(),
963+
p.getLoginChainData().getXUID()))
968964
.toArray(PlayerListPacket.Entry[]::new);
969965

970966
player.dataPacket(pk);
@@ -1993,7 +1989,6 @@ private void loadPacks() {
19931989
}
19941990

19951991
private void registerVanillaComponents() {
1996-
this.registerEntities();
19971992
this.registerBlockEntities();
19981993

19991994
// Generators
@@ -2011,96 +2006,6 @@ private void registerVanillaComponents() {
20112006
this.defaultLevelData.getGameRules().putAll(this.gameRuleRegistry.getDefaultRules());
20122007
}
20132008

2014-
private void registerEntities() {
2015-
Entity.registerEntity("Arrow", EntityArrow.class);
2016-
Entity.registerEntity("EnderPearl", EntityEnderPearl.class);
2017-
Entity.registerEntity("FallingSand", EntityFallingBlock.class);
2018-
Entity.registerEntity("Firework", EntityFirework.class);
2019-
Entity.registerEntity("Item", EntityItem.class);
2020-
Entity.registerEntity("Painting", EntityPainting.class);
2021-
Entity.registerEntity("PrimedTnt", EntityPrimedTNT.class);
2022-
Entity.registerEntity("Snowball", EntitySnowball.class);
2023-
//Monsters
2024-
Entity.registerEntity("Blaze", EntityBlaze.class);
2025-
Entity.registerEntity("CaveSpider", EntityCaveSpider.class);
2026-
Entity.registerEntity("Creeper", EntityCreeper.class);
2027-
Entity.registerEntity("Drowned", EntityDrowned.class);
2028-
Entity.registerEntity("ElderGuardian", EntityElderGuardian.class);
2029-
Entity.registerEntity("EnderDragon", EntityEnderDragon.class);
2030-
Entity.registerEntity("Enderman", EntityEnderman.class);
2031-
Entity.registerEntity("Endermite", EntityEndermite.class);
2032-
Entity.registerEntity("Evoker", EntityEvoker.class);
2033-
Entity.registerEntity("Ghast", EntityGhast.class);
2034-
Entity.registerEntity("Guardian", EntityGuardian.class);
2035-
Entity.registerEntity("Husk", EntityHusk.class);
2036-
Entity.registerEntity("MagmaCube", EntityMagmaCube.class);
2037-
Entity.registerEntity("Phantom", EntityPhantom.class);
2038-
Entity.registerEntity("Pillager", EntityPillager.class);
2039-
Entity.registerEntity("Ravager", EntityRavager.class);
2040-
Entity.registerEntity("Shulker", EntityShulker.class);
2041-
Entity.registerEntity("Silverfish", EntitySilverfish.class);
2042-
Entity.registerEntity("Skeleton", EntitySkeleton.class);
2043-
Entity.registerEntity("Slime", EntitySlime.class);
2044-
Entity.registerEntity("Spider", EntitySpider.class);
2045-
Entity.registerEntity("Stray", EntityStray.class);
2046-
Entity.registerEntity("Vex", EntityVex.class);
2047-
Entity.registerEntity("Vindicator", EntityVindicator.class);
2048-
Entity.registerEntity("Witch", EntityWitch.class);
2049-
Entity.registerEntity("Wither", EntityWither.class);
2050-
Entity.registerEntity("WitherSkeleton", EntityWitherSkeleton.class);
2051-
Entity.registerEntity("Zombie", EntityZombie.class);
2052-
Entity.registerEntity("ZombiePigman", EntityZombiePigman.class);
2053-
Entity.registerEntity("ZombieVillager", EntityZombieVillager.class);
2054-
Entity.registerEntity("ZombieVillagerV1", EntityZombieVillagerV1.class);
2055-
//Passive
2056-
Entity.registerEntity("Bat", EntityBat.class);
2057-
Entity.registerEntity("Cat", EntityCat.class);
2058-
Entity.registerEntity("Chicken", EntityChicken.class);
2059-
Entity.registerEntity("Cod", EntityCod.class);
2060-
Entity.registerEntity("Cow", EntityCow.class);
2061-
Entity.registerEntity("Dolphin", EntityDolphin.class);
2062-
Entity.registerEntity("Donkey", EntityDonkey.class);
2063-
Entity.registerEntity("Horse", EntityHorse.class);
2064-
Entity.registerEntity("Llama", EntityLlama.class);
2065-
Entity.registerEntity("Mooshroom", EntityMooshroom.class);
2066-
Entity.registerEntity("Mule", EntityMule.class);
2067-
Entity.registerEntity("Ocelot", EntityOcelot.class);
2068-
Entity.registerEntity("Panda", EntityPanda.class);
2069-
Entity.registerEntity("Parrot", EntityParrot.class);
2070-
Entity.registerEntity("Pig", EntityPig.class);
2071-
Entity.registerEntity("PolarBear", EntityPolarBear.class);
2072-
Entity.registerEntity("Pufferfish", EntityPufferfish.class);
2073-
Entity.registerEntity("Rabbit", EntityRabbit.class);
2074-
Entity.registerEntity("Salmon", EntitySalmon.class);
2075-
Entity.registerEntity("Sheep", EntitySheep.class);
2076-
Entity.registerEntity("SkeletonHorse", EntitySkeletonHorse.class);
2077-
Entity.registerEntity("Squid", EntitySquid.class);
2078-
Entity.registerEntity("TropicalFish", EntityTropicalFish.class);
2079-
Entity.registerEntity("Turtle", EntityTurtle.class);
2080-
Entity.registerEntity("Villager", EntityVillager.class);
2081-
Entity.registerEntity("VillagerV1", EntityVillagerV1.class);
2082-
Entity.registerEntity("WanderingTrader", EntityWanderingTrader.class);
2083-
Entity.registerEntity("Wolf", EntityWolf.class);
2084-
Entity.registerEntity("ZombieHorse", EntityZombieHorse.class);
2085-
//Projectile
2086-
Entity.registerEntity("Egg", EntityEgg.class);
2087-
Entity.registerEntity("ThrownExpBottle", EntityExpBottle.class);
2088-
Entity.registerEntity("ThrownPotion", EntityPotion.class);
2089-
Entity.registerEntity("ThrownTrident", EntityThrownTrident.class);
2090-
Entity.registerEntity("XpOrb", EntityXPOrb.class);
2091-
2092-
Entity.registerEntity("Human", EntityHuman.class, true);
2093-
//Vehicle
2094-
Entity.registerEntity("Boat", EntityBoat.class);
2095-
Entity.registerEntity("MinecartChest", EntityMinecartChest.class);
2096-
Entity.registerEntity("MinecartHopper", EntityMinecartHopper.class);
2097-
Entity.registerEntity("MinecartRideable", EntityMinecartEmpty.class);
2098-
Entity.registerEntity("MinecartTnt", EntityMinecartTNT.class);
2099-
2100-
Entity.registerEntity("EndCrystal", EntityEndCrystal.class);
2101-
Entity.registerEntity("FishingHook", EntityFishingHook.class);
2102-
}
2103-
21042009
private void registerBlockEntities() {
21052010
BlockEntity.registerBlockEntity(BlockEntity.FURNACE, BlockEntityFurnace.class);
21062011
BlockEntity.registerBlockEntity(BlockEntity.CHEST, BlockEntityChest.class);

src/main/java/cn/nukkit/block/BlockFallable.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package cn.nukkit.block;
22

3-
import cn.nukkit.entity.item.EntityFallingBlock;
3+
import cn.nukkit.entity.EntityTypes;
4+
import cn.nukkit.entity.misc.FallingBlock;
45
import cn.nukkit.level.Level;
56
import cn.nukkit.nbt.tag.CompoundTag;
67
import cn.nukkit.nbt.tag.DoubleTag;
78
import cn.nukkit.nbt.tag.FloatTag;
89
import cn.nukkit.nbt.tag.ListTag;
910
import cn.nukkit.registry.BlockRegistry;
11+
import cn.nukkit.registry.EntityRegistry;
1012
import cn.nukkit.utils.Identifier;
1113

1214
import static cn.nukkit.block.BlockIds.AIR;
@@ -43,7 +45,8 @@ public int onUpdate(int type) {
4345
.putInt("TileID", BlockRegistry.get().getLegacyId(this.getId()))
4446
.putByte("Data", this.getDamage());
4547

46-
EntityFallingBlock fall = new EntityFallingBlock(this.getLevel().getChunk((int) this.x >> 4, (int) this.z >> 4), nbt);
48+
FallingBlock fall = EntityRegistry.get().newEntity(EntityTypes.FALLING_BLOCK,
49+
this.getLevel().getChunk((int) this.x >> 4, (int) this.z >> 4), nbt);
4750

4851
fall.spawnToAll();
4952
}

src/main/java/cn/nukkit/block/BlockFire.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import cn.nukkit.Server;
44
import cn.nukkit.entity.Entity;
5-
import cn.nukkit.entity.projectile.EntityArrow;
5+
import cn.nukkit.entity.projectile.Arrow;
66
import cn.nukkit.event.block.BlockBurnEvent;
77
import cn.nukkit.event.block.BlockFadeEvent;
88
import cn.nukkit.event.block.BlockIgniteEvent;
@@ -61,7 +61,7 @@ public void onEntityCollide(Entity entity) {
6161
}
6262

6363
EntityCombustByBlockEvent ev = new EntityCombustByBlockEvent(this, entity, 8);
64-
if (entity instanceof EntityArrow) {
64+
if (entity instanceof Arrow) {
6565
ev.setCancelled();
6666
}
6767
Server.getInstance().getPluginManager().callEvent(ev);

src/main/java/cn/nukkit/block/BlockLava.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import cn.nukkit.Server;
44
import cn.nukkit.entity.Entity;
5-
import cn.nukkit.entity.item.EntityPrimedTNT;
5+
import cn.nukkit.entity.misc.Tnt;
66
import cn.nukkit.event.block.BlockIgniteEvent;
77
import cn.nukkit.event.entity.EntityCombustByBlockEvent;
88
import cn.nukkit.event.entity.EntityDamageByBlockEvent;
@@ -183,7 +183,7 @@ protected void flowIntoBlock(Block block, int newFlowDecay){
183183

184184
@Override
185185
public void addVelocityToEntity(Entity entity, Vector3 vector) {
186-
if (!(entity instanceof EntityPrimedTNT)) {
186+
if (!(entity instanceof Tnt)) {
187187
super.addVelocityToEntity(entity, vector);
188188
}
189189
}

src/main/java/cn/nukkit/block/BlockPressurePlateStone.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cn.nukkit.block;
22

33
import cn.nukkit.entity.Entity;
4-
import cn.nukkit.entity.EntityLiving;
4+
import cn.nukkit.entity.LivingEntity;
55
import cn.nukkit.item.Item;
66
import cn.nukkit.item.ItemTool;
77
import cn.nukkit.math.AxisAlignedBB;
@@ -55,7 +55,7 @@ protected int computeRedstoneStrength() {
5555
AxisAlignedBB bb = getCollisionBoundingBox();
5656

5757
for (Entity entity : this.level.getCollidingEntities(bb)) {
58-
if (entity instanceof EntityLiving && entity.doesTriggerPressurePlate()) {
58+
if (entity instanceof LivingEntity && entity.doesTriggerPressurePlate()) {
5959
return 15;
6060
}
6161
}

src/main/java/cn/nukkit/block/BlockRailDetector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package cn.nukkit.block;
22

33
import cn.nukkit.entity.Entity;
4-
import cn.nukkit.entity.item.EntityMinecartAbstract;
4+
import cn.nukkit.entity.vehicle.AbstractMinecart;
55
import cn.nukkit.item.Item;
66
import cn.nukkit.level.Level;
77
import cn.nukkit.math.BlockFace;
@@ -65,7 +65,7 @@ protected void updateState() {
6565
getFloorX() + 0.875D,
6666
getFloorY() + 0.525D,
6767
getFloorZ() + 0.875D))) {
68-
if (entity instanceof EntityMinecartAbstract) {
68+
if (entity instanceof AbstractMinecart) {
6969
isPowered = true;
7070
}
7171
}

src/main/java/cn/nukkit/block/BlockSignPost.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public boolean place(Item item, Block block, Block target, BlockFace face, doubl
6868
}
6969

7070
if (player != null) {
71-
nbt.putString("Creator", player.getUniqueId().toString());
71+
nbt.putString("Creator", player.getServerId().toString());
7272
}
7373

7474
if (item.hasCustomBlockData()) {

src/main/java/cn/nukkit/block/BlockTNT.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package cn.nukkit.block;
22

33
import cn.nukkit.entity.Entity;
4-
import cn.nukkit.entity.item.EntityPrimedTNT;
4+
import cn.nukkit.entity.EntityTypes;
5+
import cn.nukkit.entity.misc.Tnt;
56
import cn.nukkit.item.Item;
67
import cn.nukkit.level.Level;
78
import cn.nukkit.level.Sound;
@@ -77,10 +78,8 @@ public void prime(int fuse, Entity source) {
7778
.add(new FloatTag("", 0))
7879
.add(new FloatTag("", 0)))
7980
.putShort("Fuse", fuse);
80-
Entity tnt = new EntityPrimedTNT(
81-
this.getLevel().getChunk(this.getFloorX() >> 4, this.getFloorZ() >> 4),
82-
nbt, source
83-
);
81+
Entity tnt = new Tnt(EntityTypes.TNT,
82+
this.getLevel().getChunk(this.getFloorX() >> 4, this.getFloorZ() >> 4), nbt, source);
8483
tnt.spawnToAll();
8584
this.level.addSound(this, Sound.RANDOM_FUSE);
8685
}

0 commit comments

Comments
 (0)