mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
more more more more more work
This commit is contained in:
parent
7b6a88056c
commit
4aa42e8aea
36 changed files with 57 additions and 68 deletions
|
@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
|
@@ -0,0 +0,0 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
|
||||||
java.util.UUID uniqueId = ServerLoginPacketListenerImpl.this.gameProfile.getId();
|
java.util.UUID uniqueId = gameprofile.getId();
|
||||||
final org.bukkit.craftbukkit.CraftServer server = ServerLoginPacketListenerImpl.this.server.server;
|
final org.bukkit.craftbukkit.CraftServer server = ServerLoginPacketListenerImpl.this.server.server;
|
||||||
|
|
||||||
- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId);
|
- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId);
|
|
@ -19,7 +19,7 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,10 +37,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper
|
+ server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Paper start
|
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
|
||||||
}
|
|
||||||
// Paper end
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
+ // Paper start - async tab completion
|
+ // Paper start - async tab completion
|
||||||
+ TAB_COMPLETE_EXECUTOR.execute(() -> {
|
+ TAB_COMPLETE_EXECUTOR.execute(() -> {
|
||||||
|
@ -54,7 +50,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
-
|
-
|
||||||
- this.server.getCommands().getDispatcher().getCompletionSuggestions(parseresults).thenAccept((suggestions) -> {
|
- this.server.getCommands().getDispatcher().getCompletionSuggestions(parseresults).thenAccept((suggestions) -> {
|
||||||
- if (suggestions.isEmpty()) return; // CraftBukkit - don't send through empty suggestions - prevents [<args>] from showing for plugins with nothing more to offer
|
- if (suggestions.isEmpty()) return; // CraftBukkit - don't send through empty suggestions - prevents [<args>] from showing for plugins with nothing more to offer
|
||||||
- this.connection.send(new ClientboundCommandSuggestionsPacket(packet.getId(), suggestions));
|
- this.send(new ClientboundCommandSuggestionsPacket(packet.getId(), suggestions));
|
||||||
+ final String command = packet.getCommand();
|
+ final String command = packet.getCommand();
|
||||||
+ final com.destroystokyo.paper.event.server.AsyncTabCompleteEvent event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(this.getCraftPlayer(), command, true, null);
|
+ final com.destroystokyo.paper.event.server.AsyncTabCompleteEvent event = new com.destroystokyo.paper.event.server.AsyncTabCompleteEvent(this.getCraftPlayer(), command, true, null);
|
||||||
+ event.callEvent();
|
+ event.callEvent();
|
|
@ -12,7 +12,7 @@ diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListener
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
||||||
this.internalTeleport(dest.getX(), dest.getY(), dest.getZ(), dest.getYaw(), dest.getPitch(), Collections.emptySet());
|
this.internalTeleport(dest.getX(), dest.getY(), dest.getZ(), dest.getYaw(), dest.getPitch(), Collections.emptySet());
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ //double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D; // Paper - use from event
|
+ //double blockRange = (reducedRange) ? Math.pow(chunkRange << 4, 2) : 16384.0D; // Paper - use from event
|
||||||
+ double blockRange = 16384.0D; // Paper
|
+ double blockRange = 16384.0D; // Paper
|
||||||
// Spigot end
|
// Spigot end
|
||||||
long i = chunkcoordintpair.toLong();
|
if (!this.distanceManager.hasPlayersNearby(chunkcoordintpair.toLong())) {
|
||||||
|
return false;
|
||||||
@@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
@@ -0,0 +0,0 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,5 +76,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
|
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> cachedSingleHashSet; // Paper
|
||||||
+ public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
+ public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
||||||
|
|
||||||
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
|
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) {
|
||||||
public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
|
|
@ -91,7 +91,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
}).limit(5L).collect(Collectors.toList());
|
}).limit(5L).collect(Collectors.toList());
|
||||||
|
|
||||||
if (list1.size() >= requiredCount) {
|
if (list1.size() >= requiredCount) {
|
||||||
- if (SpawnUtil.trySpawnMob(EntityType.IRON_GOLEM, MobSpawnType.MOB_SUMMONED, world, this.blockPosition(), 10, 8, 6, SpawnUtil.Strategy.LEGACY_IRON_GOLEM, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE).isPresent()) { // CraftBukkit
|
- if (!SpawnUtil.trySpawnMob(EntityType.IRON_GOLEM, MobSpawnType.MOB_SUMMONED, world, this.blockPosition(), 10, 8, 6, SpawnUtil.Strategy.LEGACY_IRON_GOLEM, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE).isEmpty()) { // CraftBukkit
|
||||||
+ if (SpawnUtil.trySpawnMob(EntityType.IRON_GOLEM, MobSpawnType.MOB_SUMMONED, world, this.blockPosition(), 10, 8, 6, SpawnUtil.Strategy.LEGACY_IRON_GOLEM, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE, () -> {GolemSensor.golemDetected(this);}).isPresent()) { // CraftBukkit // Paper - Set Golem Last Seen to stop it from spawning another one
|
+ if (SpawnUtil.trySpawnMob(EntityType.IRON_GOLEM, MobSpawnType.MOB_SUMMONED, world, this.blockPosition(), 10, 8, 6, SpawnUtil.Strategy.LEGACY_IRON_GOLEM, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE, () -> {GolemSensor.golemDetected(this);}).isPresent()) { // CraftBukkit // Paper - Set Golem Last Seen to stop it from spawning another one
|
||||||
list.forEach(GolemSensor::golemDetected);
|
list.forEach(GolemSensor::golemDetected);
|
||||||
}
|
}
|
|
@ -12,13 +12,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
|
@@ -0,0 +0,0 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
if (this.state == ServerLoginPacketListenerImpl.State.READY_TO_ACCEPT) {
|
if (this.state == ServerLoginPacketListenerImpl.State.VERIFYING) {
|
||||||
- this.handleAcceptedLogin();
|
+ if (this.connection.isConnected()) { // Paper - prevent logins to be processed even though disconnect was called
|
||||||
+ // Paper start - prevent logins to be processed even though disconnect was called
|
this.verifyLoginAndFinishConnectionSetup((GameProfile) Objects.requireNonNull(this.authenticatedProfile));
|
||||||
+ if (connection.isConnected()) {
|
+ } // Paper
|
||||||
+ this.handleAcceptedLogin();
|
}
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
} else if (this.state == ServerLoginPacketListenerImpl.State.DELAY_ACCEPT) {
|
|
||||||
ServerPlayer entityplayer = this.server.getPlayerList().getPlayer(this.gameProfile.getId());
|
|
||||||
|
|
||||||
|
if (this.state == ServerLoginPacketListenerImpl.State.WAITING_FOR_DUPE_DISCONNECT && !this.isPlayerAlreadyInWorld((GameProfile) Objects.requireNonNull(this.authenticatedProfile))) {
|
|
@ -16,37 +16,32 @@ whereas higher values will make this less sensitive to issues such as spikes
|
||||||
from networking or during connections flood of chunk packets on slower clients,
|
from networking or during connections flood of chunk packets on slower clients,
|
||||||
at the cost of dead connections being kept open for longer.
|
at the cost of dead connections being kept open for longer.
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
@@ -0,0 +0,0 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||||
public ServerPlayer player;
|
private static final Component TIMEOUT_DISCONNECTION_MESSAGE = Component.translatable("disconnect.timeout");
|
||||||
private int tickCount;
|
protected final MinecraftServer server;
|
||||||
private int ackBlockChangesUpTo = -1;
|
public final Connection connection; // Paper
|
||||||
- private long keepAliveTime;
|
- private long keepAliveTime;
|
||||||
+ private long keepAliveTime = Util.getMillis();
|
+ private long keepAliveTime = Util.getMillis(); // Paper
|
||||||
private boolean keepAlivePending;
|
private boolean keepAlivePending;
|
||||||
private long keepAliveChallenge;
|
private long keepAliveChallenge;
|
||||||
// CraftBukkit start - multithreaded fields
|
private int latency;
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
private volatile boolean suspendFlushingOnServerThread = false;
|
||||||
private final LastSeenMessagesValidator lastSeenMessages;
|
|
||||||
private final MessageSignatureCache messageSignatureCache;
|
|
||||||
private final FutureChain chatMessageChain;
|
|
||||||
+ private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit
|
+ private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit
|
||||||
|
|
||||||
public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player) {
|
public ServerCommonPacketListenerImpl(MinecraftServer minecraftserver, Connection networkmanager, CommonListenerCookie commonlistenercookie, ServerPlayer player) { // CraftBukkit
|
||||||
this.lastChatTimeStamp = new AtomicReference(Instant.EPOCH);
|
this.server = minecraftserver;
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
@@ -0,0 +0,0 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||||
}
|
|
||||||
|
|
||||||
|
protected void keepConnectionAlive() {
|
||||||
this.server.getProfiler().push("keepAlive");
|
this.server.getProfiler().push("keepAlive");
|
||||||
- long i = Util.getMillis();
|
- long i = Util.getMillis();
|
||||||
-
|
-
|
||||||
- if (i - this.keepAliveTime >= 25000L) { // CraftBukkit
|
- if (i - this.keepAliveTime >= 25000L) { // CraftBukkit
|
||||||
- if (this.keepAlivePending) {
|
- if (this.keepAlivePending) {
|
||||||
- this.disconnect(Component.translatable("disconnect.timeout"));
|
|
||||||
- } else {
|
|
||||||
+ // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings
|
+ // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings
|
||||||
+ // This should effectively place the keepalive handling back to "as it was" before 1.12.2
|
+ // This should effectively place the keepalive handling back to "as it was" before 1.12.2
|
||||||
+ long currentTime = Util.getMillis();
|
+ long currentTime = Util.getMillis();
|
||||||
|
@ -55,7 +50,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ if (this.keepAlivePending) {
|
+ if (this.keepAlivePending) {
|
||||||
+ if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
+ if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
||||||
+ ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
|
+ ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
|
||||||
+ this.disconnect(Component.translatable("disconnect.timeout", new Object[0]));
|
this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE);
|
||||||
|
- } else {
|
||||||
+ }
|
+ }
|
||||||
+ } else {
|
+ } else {
|
||||||
+ if (elapsedTime >= 15000L) { // 15 seconds
|
+ if (elapsedTime >= 15000L) { // 15 seconds
|
||||||
|
@ -70,4 +66,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
|
|
||||||
this.server.getProfiler().pop();
|
this.server.getProfiler().pop();
|
||||||
// CraftBukkit start
|
}
|
|
@ -11,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
@@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Paper start - move open sign method to HumanEntity
|
+ // Paper start - move open sign method to HumanEntity
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public void openSign(final org.bukkit.block.Sign sign, final org.bukkit.block.sign.Side side) {
|
+ public void openSign(final org.bukkit.block.Sign sign, final org.bukkit.block.sign.Side side) {
|
||||||
|
|
|
@ -20,7 +20,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
|
|
||||||
public void onTickingEnd(Entity entity) {
|
public void onTickingEnd(Entity entity) {
|
||||||
ServerLevel.this.entityTickList.remove(entity);
|
ServerLevel.this.entityTickList.remove(entity);
|
||||||
+ // Paper start - Reset pearls when they stop being ticked
|
+ // Paper start - Reset pearls when they stop being ticked
|
||||||
|
@ -30,7 +30,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onTrackingStart(Entity entity) {
|
public void onTrackingStart(Entity entity) {
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
@ -42,5 +42,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
this.cachedOwner = null;
|
this.cachedOwner = null;
|
||||||
+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit
|
+ if (this instanceof ThrownEnderpearl && this.level() != null && this.level().paperConfig().fixes.disableUnloadedChunkEnderpearlExploit) { this.ownerUUID = null; } // Paper - Don't store shooter name for pearls to block enderpearl travel exploit
|
||||||
}
|
}
|
||||||
|
|
||||||
this.leftOwner = nbt.getBoolean("LeftOwner");
|
this.leftOwner = nbt.getBoolean("LeftOwner");
|
||||||
|
|
|
@ -11,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
|
||||||
@@ -0,0 +0,0 @@ public abstract class Player extends LivingEntity {
|
@@ -0,0 +0,0 @@ public abstract class Player extends LivingEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setDeltaMovement(this.getDeltaMovement().multiply(0.6D, 1.0D, 0.6D));
|
this.setDeltaMovement(this.getDeltaMovement().multiply(0.6D, 1.0D, 0.6D));
|
||||||
- this.setSprinting(false);
|
- this.setSprinting(false);
|
||||||
+ // Paper start - Configuration option to disable automatic sprint interruption
|
+ // Paper start - Configuration option to disable automatic sprint interruption
|
||||||
|
@ -20,5 +20,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flag3) {
|
if (flag3) {
|
||||||
|
|
|
@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class CraftEnderman extends CraftMonster implements Enderman {
|
@@ -0,0 +0,0 @@ public class CraftEnderman extends CraftMonster implements Enderman {
|
||||||
super(server, entity);
|
super(server, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ @Override public boolean teleportRandomly() { return getHandle().teleport(); } // Paper
|
+ @Override public boolean teleportRandomly() { return getHandle().teleport(); } // Paper
|
||||||
@Override
|
@Override
|
||||||
public MaterialData getCarriedMaterial() {
|
public MaterialData getCarriedMaterial() {
|
||||||
|
|
|
@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
this.readPersistentAngerSaveData(this.level(), nbt);
|
this.readPersistentAngerSaveData(this.level(), nbt);
|
||||||
}
|
}
|
||||||
|
|
||||||
- boolean isLookingAtMe(Player player) {
|
- boolean isLookingAtMe(Player player) {
|
||||||
+ // Paper start - EndermanAttackPlayerEvent
|
+ // Paper start - EndermanAttackPlayerEvent
|
||||||
+ private boolean isLookingAtMe(Player player) {
|
+ private boolean isLookingAtMe(Player player) {
|
||||||
|
@ -26,5 +26,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ private boolean isLookingAtMe_check(Player player) {
|
+ private boolean isLookingAtMe_check(Player player) {
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3);
|
ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3);
|
||||||
|
|
||||||
if (itemstack.is(Blocks.CARVED_PUMPKIN.asItem())) {
|
if (itemstack.is(Blocks.CARVED_PUMPKIN.asItem())) {
|
||||||
|
|
|
@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
this.setTarget(target, EntityTargetEvent.TargetReason.UNKNOWN, true);
|
this.setTarget(target, EntityTargetEvent.TargetReason.UNKNOWN, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ private boolean tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason reason) {
|
+ private boolean tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason reason) {
|
||||||
+ return new com.destroystokyo.paper.event.entity.EndermanEscapeEvent((org.bukkit.craftbukkit.entity.CraftEnderman) this.getBukkitEntity(), reason).callEvent();
|
+ return new com.destroystokyo.paper.event.entity.EndermanEscapeEvent((org.bukkit.craftbukkit.entity.CraftEnderman) this.getBukkitEntity(), reason).callEvent();
|
||||||
|
@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
if (this.level().isDay() && this.tickCount >= this.targetChangeTime + 600) {
|
if (this.level().isDay() && this.tickCount >= this.targetChangeTime + 600) {
|
||||||
float f = this.getLightLevelDependentMagicValue();
|
float f = this.getLightLevelDependentMagicValue();
|
||||||
|
|
||||||
- if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
|
- if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) {
|
||||||
+ if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
|
+ if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper
|
||||||
this.setTarget((LivingEntity) null);
|
this.setTarget((LivingEntity) null);
|
||||||
|
@ -36,7 +36,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
} else {
|
} else {
|
||||||
flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount);
|
flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount);
|
||||||
|
|
||||||
+ if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start
|
+ if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start
|
||||||
for (int i = 0; i < 64; ++i) {
|
for (int i = 0; i < 64; ++i) {
|
||||||
if (this.teleport()) {
|
if (this.teleport()) {
|
||||||
|
@ -44,7 +44,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+ } // Paper end
|
+ } // Paper end
|
||||||
|
|
||||||
return flag1;
|
return flag1;
|
||||||
}
|
}
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
|
@ -55,4 +55,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ if (this.target.distanceToSqr((Entity) this.enderman) < 16.0D && this.enderman.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.STARE)) { // Paper
|
+ if (this.target.distanceToSqr((Entity) this.enderman) < 16.0D && this.enderman.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.STARE)) { // Paper
|
||||||
this.enderman.teleport();
|
this.enderman.teleport();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends ParticleOptions> int sendParticles(ServerPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, boolean force) {
|
public <T extends ParticleOptions> int sendParticles(ServerPlayer sender, T t0, double d0, double d1, double d2, int i, double d3, double d4, double d5, double d6, boolean force) {
|
||||||
+ // Paper start - Particle API Expansion
|
+ // Paper start - Particle API Expansion
|
||||||
+ return sendParticles(players, sender, t0, d0, d1, d2, i, d3, d4, d5, d6, force);
|
+ return sendParticles(players, sender, t0, d0, d1, d2, i, d3, d4, d5, d6, force);
|
||||||
|
@ -25,20 +25,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
ClientboundLevelParticlesPacket packetplayoutworldparticles = new ClientboundLevelParticlesPacket(t0, force, d0, d1, d2, (float) d3, (float) d4, (float) d5, (float) d6, i);
|
ClientboundLevelParticlesPacket packetplayoutworldparticles = new ClientboundLevelParticlesPacket(t0, force, d0, d1, d2, (float) d3, (float) d4, (float) d5, (float) d6, i);
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
|
||||||
- for (int k = 0; k < this.players.size(); ++k) {
|
- for (int k = 0; k < this.players.size(); ++k) {
|
||||||
- ServerPlayer entityplayer = (ServerPlayer) this.players.get(k);
|
- ServerPlayer entityplayer = (ServerPlayer) this.players.get(k);
|
||||||
+ for (Player entityhuman : receivers) { // Paper - Particle API Expansion
|
+ for (Player entityhuman : receivers) { // Paper - Particle API Expansion
|
||||||
+ ServerPlayer entityplayer = (ServerPlayer) entityhuman; // Paper - Particle API Expansion
|
+ ServerPlayer entityplayer = (ServerPlayer) entityhuman; // Paper - Particle API Expansion
|
||||||
if (sender != null && !entityplayer.getBukkitEntity().canSee(sender.getBukkitEntity())) continue; // CraftBukkit
|
if (sender != null && !entityplayer.getBukkitEntity().canSee(sender.getBukkitEntity())) continue; // CraftBukkit
|
||||||
|
|
||||||
if (this.sendParticles(entityplayer, force, d0, d1, d2, packetplayoutworldparticles)) { // CraftBukkit
|
if (this.sendParticles(entityplayer, force, d0, d1, d2, packetplayoutworldparticles)) { // CraftBukkit
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||||
@@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
@@ -0,0 +0,0 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data, boolean force) {
|
public <T> void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, double offsetY, double offsetZ, double extra, T data, boolean force) {
|
||||||
- if (data != null) {
|
- if (data != null) {
|
||||||
|
|
|
@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
|
||||||
@@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
|
@@ -0,0 +0,0 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
|
||||||
Style chatmodifier = signtext.getMessage(i, entityhuman.isTextFilteringEnabled()).getStyle();
|
Style chatmodifier = signtext.getMessage(i, entityhuman.isTextFilteringEnabled()).getStyle();
|
||||||
|
|
||||||
if (entityhuman.isTextFilteringEnabled()) {
|
if (entityhuman.isTextFilteringEnabled()) {
|
||||||
- signtext = signtext.setMessage(i, Component.literal(filteredtext.filteredOrEmpty()).setStyle(chatmodifier));
|
- signtext = signtext.setMessage(i, Component.literal(filteredtext.filteredOrEmpty()).setStyle(chatmodifier));
|
||||||
+ signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
|
+ signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
|
||||||
|
@ -19,4 +19,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.raw())).setStyle(chatmodifier), Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
|
+ signtext = signtext.setMessage(i, Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.raw())).setStyle(chatmodifier), Component.literal(net.minecraft.SharedConstants.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
|
--- a/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
|
+++ b/src/main/java/net/minecraft/world/level/block/FrostedIceBlock.java
|
||||||
@@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
|
@@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
|
||||||
|
|
||||||
for(Direction direction : Direction.values()) {
|
for(Direction direction : Direction.values()) {
|
||||||
mutableBlockPos.setWithOffset(pos, direction);
|
mutableBlockPos.setWithOffset(pos, direction);
|
||||||
- BlockState blockState = world.getBlockState(mutableBlockPos);
|
- BlockState blockState = world.getBlockState(mutableBlockPos);
|
||||||
|
@ -20,7 +20,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
world.scheduleTick(mutableBlockPos, this, Mth.nextInt(random, world.paperConfig().environment.frostedIce.delay.min, world.paperConfig().environment.frostedIce.delay.max)); // Paper - use configurable min/max delay
|
world.scheduleTick(mutableBlockPos, this, Mth.nextInt(random, world.paperConfig().environment.frostedIce.delay.min, world.paperConfig().environment.frostedIce.delay.max)); // Paper - use configurable min/max delay
|
||||||
}
|
}
|
||||||
@@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
|
@@ -0,0 +0,0 @@ public class FrostedIceBlock extends IceBlock {
|
||||||
|
|
||||||
for(Direction direction : Direction.values()) {
|
for(Direction direction : Direction.values()) {
|
||||||
mutableBlockPos.setWithOffset(pos, direction);
|
mutableBlockPos.setWithOffset(pos, direction);
|
||||||
- if (world.getBlockState(mutableBlockPos).is(this)) {
|
- if (world.getBlockState(mutableBlockPos).is(this)) {
|
||||||
|
|
|
@ -10,7 +10,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
|
--- a/src/main/java/net/minecraft/world/entity/monster/Witch.java
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
|
+++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java
|
||||||
@@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
|
@@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
|
||||||
|
|
||||||
this.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY);
|
this.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY);
|
||||||
if (itemstack.is(Items.POTION)) {
|
if (itemstack.is(Items.POTION)) {
|
||||||
- List<MobEffectInstance> list = PotionUtils.getMobEffects(itemstack);
|
- List<MobEffectInstance> list = PotionUtils.getMobEffects(itemstack);
|
||||||
|
@ -19,6 +19,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+
|
+
|
||||||
+ List<MobEffectInstance> list = event.callEvent() ? PotionUtils.getMobEffects(org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getPotion())) : null;
|
+ List<MobEffectInstance> list = event.callEvent() ? PotionUtils.getMobEffects(org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getPotion())) : null;
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
|
|
||||||
if (list != null) {
|
if (list != null) {
|
||||||
Iterator iterator = list.iterator();
|
Iterator iterator = list.iterator();
|
||||||
|
|
|
@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
@@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
|
@@ -0,0 +0,0 @@ public class Witch extends Raider implements RangedAttackMob {
|
||||||
potionregistry = Potions.WEAKNESS;
|
potionregistry = Potions.WEAKNESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ ItemStack potion = PotionUtils.setPotion(new ItemStack(Items.SPLASH_POTION), potionregistry);
|
+ ItemStack potion = PotionUtils.setPotion(new ItemStack(Items.SPLASH_POTION), potionregistry);
|
||||||
+ com.destroystokyo.paper.event.entity.WitchThrowPotionEvent event = new com.destroystokyo.paper.event.entity.WitchThrowPotionEvent((org.bukkit.entity.Witch) this.getBukkitEntity(), (org.bukkit.entity.LivingEntity) target.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion));
|
+ com.destroystokyo.paper.event.entity.WitchThrowPotionEvent event = new com.destroystokyo.paper.event.entity.WitchThrowPotionEvent((org.bukkit.entity.Witch) this.getBukkitEntity(), (org.bukkit.entity.LivingEntity) target.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion));
|
||||||
|
|
Loading…
Reference in a new issue