Add EntityMoveEvent

This commit is contained in:
William Blake Galbreath
2020-02-11 21:56:48 -06:00
parent 6f6ed7acb9
commit 48c492c4d1
3 changed files with 128 additions and 103 deletions

View File

@@ -61,7 +61,7 @@
private int lastSpawnChunkRadius;
final EntityTickList entityTickList = new EntityTickList();
public final PersistentEntitySectionManager<Entity> entityManager;
@@ -214,54 +226,203 @@
@@ -214,54 +226,204 @@
private final boolean tickTime;
private final RandomSequences randomSequences;
@@ -79,6 +79,7 @@
+ public final LevelStorageSource.LevelStorageAccess convertable;
+ public final UUID uuid;
+ public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent
+ public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent
+
+ public LevelChunk getChunkIfLoaded(int x, int z) {
+ return this.chunkSource.getChunk(x, z, false);
@@ -132,7 +133,7 @@
+
+ int maxBlockX = Mth.floor(axisalignedbb.maxX + 1.0E-7D) + 3;
+ int maxBlockZ = Mth.floor(axisalignedbb.maxZ + 1.0E-7D) + 3;
+
+ int minChunkX = minBlockX >> 4;
+ int minChunkZ = minBlockZ >> 4;
+
@@ -218,7 +219,7 @@
+ chunkgenerator = new FlatLevelSource(cpf.settings(), worldChunkManager);
+ }
+ }
+
+ if (gen != null) {
+ chunkgenerator = new org.bukkit.craftbukkit.generator.CustomChunkGenerator(this, chunkgenerator, gen);
+ }
@@ -289,7 +290,7 @@
/** @deprecated */
@Deprecated
@VisibleForTesting
@@ -305,12 +466,20 @@
@@ -305,12 +467,20 @@
long j;
if (this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) {
@@ -313,7 +314,7 @@
if (this.getGameRules().getBoolean(GameRules.RULE_WEATHER_CYCLE) && this.isRaining()) {
this.resetWeatherCycle();
}
@@ -345,7 +514,7 @@
@@ -345,7 +515,7 @@
this.handlingTick = false;
gameprofilerfiller.pop();
@@ -322,7 +323,7 @@
if (flag1) {
this.resetEmptyTime();
@@ -359,6 +528,7 @@
@@ -359,6 +529,7 @@
gameprofilerfiller.pop();
}
@@ -330,7 +331,7 @@
this.entityTickList.forEach((entity) -> {
if (!entity.isRemoved()) {
if (!tickratemanager.isEntityFrozen(entity)) {
@@ -429,7 +599,7 @@
@@ -429,7 +600,7 @@
private void wakeUpAllPlayers() {
this.sleepStatus.removeAllSleepers();
@@ -339,7 +340,7 @@
entityplayer.stopSleepInBed(false, false);
});
}
@@ -442,12 +612,12 @@
@@ -442,12 +613,12 @@
ProfilerFiller gameprofilerfiller = Profiler.get();
gameprofilerfiller.push("thunder");
@@ -354,7 +355,7 @@
if (flag1) {
SkeletonHorse entityhorseskeleton = (SkeletonHorse) EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT);
@@ -456,7 +626,7 @@
@@ -456,7 +627,7 @@
entityhorseskeleton.setTrap(true);
entityhorseskeleton.setAge(0);
entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ());
@@ -363,7 +364,7 @@
}
}
@@ -465,18 +635,20 @@
@@ -465,18 +636,20 @@
if (entitylightning != null) {
entitylightning.moveTo(Vec3.atBottomCenterOf(blockposition));
entitylightning.setVisualOnly(flag1);
@@ -385,7 +386,7 @@
gameprofilerfiller.popPush("tickBlocks");
if (randomTickSpeed > 0) {
@@ -521,7 +693,7 @@
@@ -521,7 +694,7 @@
Biome biomebase = (Biome) this.getBiome(blockposition1).value();
if (biomebase.shouldFreeze(this, blockposition2)) {
@@ -394,7 +395,7 @@
}
if (this.isRaining()) {
@@ -537,10 +709,10 @@
@@ -537,10 +710,10 @@
BlockState iblockdata1 = (BlockState) iblockdata.setValue(SnowLayerBlock.LAYERS, j + 1);
Block.pushEntitiesUp(iblockdata, iblockdata1, this, blockposition1);
@@ -407,7 +408,7 @@
}
}
@@ -701,33 +873,67 @@
@@ -701,33 +874,67 @@
this.rainLevel = Mth.clamp(this.rainLevel, 0.0F, 1.0F);
}
@@ -483,7 +484,7 @@
}
public void resetEmptyTime() {
@@ -754,6 +960,13 @@
@@ -754,6 +961,13 @@
}
public void tickNonPassenger(Entity entity) {
@@ -497,7 +498,7 @@
entity.setOldPosAndRot();
ProfilerFiller gameprofilerfiller = Profiler.get();
@@ -763,6 +976,7 @@
@@ -763,6 +977,7 @@
});
gameprofilerfiller.incrementCounter("tickNonPassenger");
entity.tick();
@@ -505,7 +506,7 @@
gameprofilerfiller.pop();
Iterator iterator = entity.getPassengers().iterator();
@@ -786,6 +1000,7 @@
@@ -786,6 +1001,7 @@
});
gameprofilerfiller.incrementCounter("tickPassenger");
passenger.rideTick();
@@ -513,7 +514,7 @@
gameprofilerfiller.pop();
Iterator iterator = passenger.getPassengers().iterator();
@@ -810,6 +1025,7 @@
@@ -810,6 +1026,7 @@
ServerChunkCache chunkproviderserver = this.getChunkSource();
if (!savingDisabled) {
@@ -521,7 +522,7 @@
if (progressListener != null) {
progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel"));
}
@@ -827,11 +1043,19 @@
@@ -827,11 +1044,19 @@
}
}
@@ -542,7 +543,7 @@
}
DimensionDataStorage worldpersistentdata = this.getChunkSource().getDataStorage();
@@ -903,18 +1127,40 @@
@@ -903,18 +1128,40 @@
@Override
public boolean addFreshEntity(Entity entity) {
@@ -586,7 +587,7 @@
}
}
@@ -939,41 +1185,99 @@
@@ -939,41 +1186,99 @@
this.entityManager.addNewEntity(player);
}
@@ -691,7 +692,7 @@
while (iterator.hasNext()) {
ServerPlayer entityplayer = (ServerPlayer) iterator.next();
@@ -982,6 +1286,12 @@
@@ -982,6 +1287,12 @@
double d1 = (double) pos.getY() - entityplayer.getY();
double d2 = (double) pos.getZ() - entityplayer.getZ();
@@ -704,7 +705,7 @@
if (d0 * d0 + d1 * d1 + d2 * d2 < 1024.0D) {
entityplayer.connection.send(new ClientboundBlockDestructionPacket(entityId, pos, progress));
}
@@ -1030,7 +1340,7 @@
@@ -1030,7 +1341,7 @@
@Override
public void levelEvent(@Nullable Player player, int eventId, BlockPos pos, int data) {
@@ -713,7 +714,7 @@
}
public int getLogicalHeight() {
@@ -1060,7 +1370,18 @@
@@ -1060,7 +1371,18 @@
Iterator iterator = this.navigatingMobs.iterator();
while (iterator.hasNext()) {
@@ -733,7 +734,7 @@
PathNavigation navigationabstract = entityinsentient.getNavigation();
if (navigationabstract.shouldRecomputePath(pos)) {
@@ -1086,11 +1407,13 @@
@@ -1086,11 +1408,13 @@
@Override
public void updateNeighborsAt(BlockPos pos, Block block) {
@@ -747,7 +748,7 @@
this.neighborUpdater.updateNeighborsAtExceptFromFacing(pos, sourceBlock, (Direction) null, orientation);
}
@@ -1126,9 +1449,20 @@
@@ -1126,9 +1450,20 @@
@Override
public void explode(@Nullable Entity entity, @Nullable DamageSource damageSource, @Nullable ExplosionDamageCalculator behavior, double x, double y, double z, float power, boolean createFire, Level.ExplosionInteraction explosionSourceType, ParticleOptions smallParticle, ParticleOptions largeParticle, Holder<SoundEvent> soundEvent) {
@@ -769,7 +770,7 @@
case NONE:
explosion_effect = Explosion.BlockInteraction.KEEP;
break;
@@ -1144,16 +1478,27 @@
@@ -1144,16 +1479,27 @@
case TRIGGER:
explosion_effect = Explosion.BlockInteraction.TRIGGER_BLOCK;
break;
@@ -800,7 +801,7 @@
Iterator iterator = this.players.iterator();
while (iterator.hasNext()) {
@@ -1162,10 +1507,11 @@
@@ -1162,10 +1508,11 @@
if (entityplayer.distanceToSqr(vec3d) < 4096.0D) {
Optional<Vec3> optional = Optional.ofNullable((Vec3) serverexplosion.getHitPlayers().get(entityplayer));
@@ -813,7 +814,7 @@
}
private Explosion.BlockInteraction getDestroyType(GameRules.Key<GameRules.BooleanValue> decayRule) {
@@ -1226,17 +1572,29 @@
@@ -1226,17 +1573,29 @@
}
public <T extends ParticleOptions> int sendParticles(T parameters, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double speed) {
@@ -848,7 +849,7 @@
++j;
}
}
@@ -1292,7 +1650,7 @@
@@ -1292,7 +1651,7 @@
@Nullable
public BlockPos findNearestMapStructure(TagKey<Structure> structureTag, BlockPos pos, int radius, boolean skipReferencedStructures) {
@@ -857,7 +858,7 @@
return null;
} else {
Optional<HolderSet.Named<Structure>> optional = this.registryAccess().lookupOrThrow(Registries.STRUCTURE).get(structureTag);
@@ -1334,11 +1692,22 @@
@@ -1334,11 +1693,22 @@
@Nullable
@Override
public MapItemSavedData getMapData(MapId id) {
@@ -881,7 +882,7 @@
this.getServer().overworld().getDataStorage().set(id.key(), state);
}
@@ -1352,7 +1721,9 @@
@@ -1352,7 +1722,9 @@
float f1 = this.levelData.getSpawnAngle();
if (!blockposition1.equals(pos) || f1 != angle) {
@@ -891,7 +892,7 @@
this.getServer().getPlayerList().broadcastAll(new ClientboundSetDefaultSpawnPositionPacket(pos, angle));
}
@@ -1419,6 +1790,11 @@
@@ -1419,6 +1791,11 @@
});
optional1.ifPresent((holder) -> {
this.getServer().execute(() -> {
@@ -903,7 +904,7 @@
this.getPoiManager().add(blockposition1, holder);
DebugPackets.sendPoiAddedPacket(this, blockposition1);
});
@@ -1649,6 +2025,11 @@
@@ -1649,6 +2026,11 @@
@Override
public void blockUpdated(BlockPos pos, Block block) {
if (!this.isDebug()) {
@@ -915,7 +916,7 @@
this.updateNeighborsAt(pos, block);
}
@@ -1668,12 +2049,12 @@
@@ -1668,12 +2050,12 @@
}
public boolean isFlat() {
@@ -930,7 +931,7 @@
}
@Nullable
@@ -1696,7 +2077,7 @@
@@ -1696,7 +2078,7 @@
private static <T> String getTypeCount(Iterable<T> items, Function<T, String> classifier) {
try {
Object2IntOpenHashMap<String> object2intopenhashmap = new Object2IntOpenHashMap();
@@ -939,7 +940,7 @@
while (iterator.hasNext()) {
T t0 = iterator.next();
@@ -1705,7 +2086,7 @@
@@ -1705,7 +2087,7 @@
object2intopenhashmap.addTo(s, 1);
}
@@ -948,7 +949,7 @@
String s1 = (String) entry.getKey();
return s1 + ":" + entry.getIntValue();
@@ -1717,6 +2098,7 @@
@@ -1717,6 +2099,7 @@
@Override
public LevelEntityGetter<Entity> getEntities() {
@@ -956,7 +957,7 @@
return this.entityManager.getEntityGetter();
}
@@ -1802,6 +2184,17 @@
@@ -1802,6 +2185,17 @@
return this.serverLevelData.getGameRules();
}
@@ -974,7 +975,7 @@
@Override
public CrashReportCategory fillReportDetails(CrashReport report) {
CrashReportCategory crashreportsystemdetails = super.fillReportDetails(report);
@@ -1836,7 +2229,8 @@
@@ -1836,7 +2230,8 @@
}
public void onTrackingStart(Entity entity) {
@@ -984,7 +985,7 @@
if (entity instanceof ServerPlayer entityplayer) {
ServerLevel.this.players.add(entityplayer);
ServerLevel.this.updateSleepingPlayerList();
@@ -1864,9 +2258,53 @@
@@ -1864,9 +2259,53 @@
}
entity.updateDynamicGameEventListener(DynamicGameEventListener::add);
@@ -1038,7 +1039,7 @@
ServerLevel.this.getChunkSource().removeEntity(entity);
if (entity instanceof ServerPlayer entityplayer) {
ServerLevel.this.players.remove(entityplayer);
@@ -1895,6 +2333,15 @@
@@ -1895,6 +2334,15 @@
}
entity.updateDynamicGameEventListener(DynamicGameEventListener::remove);