Skip to content

Commit 679236c

Browse files
committed
Upstream Paper
1 parent 5fe9361 commit 679236c

File tree

8 files changed

+856
-156
lines changed

8 files changed

+856
-156
lines changed

sources/src/main/java/net/minecraft/server/Entity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,6 +1478,7 @@ public boolean isCollidable() {
14781478
return false;
14791479
}
14801480

1481+
public void runKillTrigger(Entity entity, int kills, DamageSource damageSource) { this.a(entity, kills, damageSource); } // Paper - OBFHELPER
14811482
public void a(Entity entity, int i, DamageSource damagesource) {
14821483
if (entity instanceof EntityPlayer) {
14831484
CriterionTriggers.c.a((EntityPlayer) entity, this, damagesource);
@@ -2274,6 +2275,7 @@ public void onLightningStrike(EntityLightning entitylightning) {
22742275

22752276
}
22762277

2278+
public void onKill(EntityLiving entityLiving) { this.b(entityLiving); } // Paper - OBFHELPER
22772279
public void b(EntityLiving entityliving) {}
22782280

22792281
protected boolean i(double d0, double d1, double d2) {
@@ -2972,6 +2974,7 @@ public EnumPistonReaction getPushReaction() {
29722974
return EnumPistonReaction.NORMAL;
29732975
}
29742976

2977+
public SoundCategory getDeathSoundCategory() { return bK();} // Paper - OBFHELPER
29752978
public SoundCategory bK() {
29762979
return SoundCategory.NEUTRAL;
29772980
}

sources/src/main/java/net/minecraft/server/EntityPlayer.java

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ public void setViewDistance(int viewDistance) {
8484
}
8585
// Paper end
8686
private int containerUpdateDelay; // Paper
87+
// Paper start - cancellable death event
88+
public boolean queueHealthUpdatePacket = false;
89+
public net.minecraft.server.PacketPlayOutUpdateHealth queuedHealthUpdatePacket;
90+
// Paper end
8791

8892
// CraftBukkit start
8993
public String displayName;
@@ -441,9 +445,10 @@ private void a(IScoreboardCriteria iscoreboardcriteria, int i) {
441445
public void die(DamageSource damagesource) {
442446
boolean flag = this.world.getGameRules().getBoolean("showDeathMessages");
443447

444-
this.playerConnection.sendPacket(new PacketPlayOutCombatEvent(this.getCombatTracker(), PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED, flag));
448+
//this.playerConnection.sendPacket(new PacketPlayOutCombatEvent(this.getCombatTracker(), PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED, flag)); // Paper - moved down for cancellable death event
445449
// CraftBukkit start - fire PlayerDeathEvent
446450
if (this.dead) {
451+
this.playerConnection.sendPacket(new PacketPlayOutCombatEvent(this.getCombatTracker(), PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED, flag)); // Paper - moved down for cancellable death event
447452
return;
448453
}
449454
java.util.List<org.bukkit.inventory.ItemStack> loot = new java.util.ArrayList<org.bukkit.inventory.ItemStack>(this.inventory.getSize());
@@ -461,6 +466,16 @@ public void die(DamageSource damagesource) {
461466

462467
String deathmessage = chatmessage.toPlainText();
463468
org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, loot, deathmessage, keepInventory);
469+
// Paper start - cancellable death event
470+
if (event.isCancelled()) {
471+
// make compatible with plugins that might have already set the health in an event listener
472+
if (this.getHealth() <= 0) {
473+
this.setHealth((float) event.getReviveHealth());
474+
}
475+
return;
476+
}
477+
this.playerConnection.sendPacket(new PacketPlayOutCombatEvent(this.getCombatTracker(), PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED, flag));
478+
// Paper end
464479

465480
String deathMessage = event.getDeathMessage();
466481

@@ -614,7 +629,17 @@ public boolean damageEntity(DamageSource damagesource, float f) {
614629
}
615630
}
616631

617-
return super.damageEntity(damagesource, f);
632+
// Paper start - cancellable death events
633+
//return super.damageEntity(damagesource, f);
634+
this.queueHealthUpdatePacket = true;
635+
boolean damaged = super.damageEntity(damagesource, f);
636+
this.queueHealthUpdatePacket = false;
637+
if (this.queuedHealthUpdatePacket != null) {
638+
this.playerConnection.sendPacket(this.queuedHealthUpdatePacket);
639+
this.queuedHealthUpdatePacket = null;
640+
}
641+
return damaged;
642+
// Paper end
618643
}
619644
}
620645
}

sources/src/main/java/net/minecraft/server/PlayerConnection.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package net.minecraft.server;
22

3+
import com.google.common.collect.Lists;
34
import com.google.common.primitives.Doubles;
45
import com.google.common.primitives.Floats;
6+
import com.google.common.util.concurrent.Futures;
57

68
import io.akarin.api.internal.Akari;
79
import io.akarin.server.core.AkarinGlobalConfig;
@@ -10,6 +12,8 @@
1012
import java.io.IOException;
1113
import java.util.ArrayList;
1214
import java.util.Collections;
15+
import java.util.Iterator;
16+
import java.util.List;
1317
import java.util.Set;
1418
import org.apache.commons.lang3.StringUtils;
1519
import org.apache.logging.log4j.LogManager;
@@ -382,10 +386,13 @@ public void a(PacketPlayInVehicleMove packetplayinvehiclemove) {
382386
}
383387

384388
entity.setLocation(d3, d4, d5, f, f1);
389+
Location curPos = getPlayer().getLocation(); // Paper
390+
player.setLocation(d3, d4, d5, f, f1); // Paper
385391
boolean flag2 = worldserver.getCubes(entity, entity.getBoundingBox().shrink(0.0625D)).isEmpty();
386392

387393
if (flag && (flag1 || !flag2)) {
388394
entity.setLocation(d0, d1, d2, f, f1);
395+
player.setLocation(d0, d1, d2, f, f1); // Paper
389396
this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity));
390397
return;
391398
}
@@ -395,7 +402,7 @@ public void a(PacketPlayInVehicleMove packetplayinvehiclemove) {
395402
// Spigot Start
396403
if ( !hasMoved )
397404
{
398-
Location curPos = player.getLocation();
405+
//Location curPos = player.getLocation(); // Paper - move up
399406
lastPosX = curPos.getX();
400407
lastPosY = curPos.getY();
401408
lastPosZ = curPos.getZ();
@@ -2310,32 +2317,26 @@ public void a(PacketPlayInTabComplete packet) {
23102317
buffer, isCommand, blockpos != null ? MCUtil.toLocation(player.world, blockpos) : null);
23112318
event.callEvent();
23122319
completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
2313-
if (event.isCancelled() || event.isHandled()) {
2314-
// Still fire sync event with the provided completions, if someone is listening
2315-
if (!event.isCancelled() && org.bukkit.event.server.TabCompleteEvent.getHandlerList().getRegisteredListeners().length > 0) {
2316-
java.util.List<String> finalCompletions = completions;
2317-
Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
2318-
@Override
2319-
protected java.util.List<String> evaluate() {
2320-
org.bukkit.event.server.TabCompleteEvent syncEvent = new org.bukkit.event.server.TabCompleteEvent(PlayerConnection.this.getPlayer(), buffer, finalCompletions, isCommand, blockpos != null ? MCUtil.toLocation(player.world, blockpos) : null);
2321-
return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
2322-
}
2323-
};
2324-
server.getServer().processQueue.add(syncCompletions);
2325-
try {
2326-
completions = syncCompletions.get();
2327-
} catch (InterruptedException | ExecutionException e1) {
2328-
e1.printStackTrace();
2320+
if (!event.isHandled()) {
2321+
// If the event isn't handled, we can assume that we have no completions, and so we'll ask the server
2322+
2323+
Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
2324+
@Override
2325+
protected java.util.List<String> evaluate() {
2326+
return minecraftServer.tabCompleteCommand(player, buffer, blockpos, isCommand);
23292327
}
2328+
};
2329+
server.getServer().processQueue.add(syncCompletions);
2330+
try {
2331+
completions = syncCompletions.get();
2332+
} catch (InterruptedException | ExecutionException e1) {
2333+
e1.printStackTrace();
23302334
}
23312335

23322336
this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(completions.toArray(new String[completions.size()])));
2333-
return;
2337+
} else if (!event.isCancelled()) {
2338+
this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(completions.toArray(new String[completions.size()])));
23342339
}
2335-
minecraftServer.postToMainThread(() -> {
2336-
java.util.List<String> syncCompletions = this.minecraftServer.tabCompleteCommand(this.player, buffer, blockpos, isCommand);
2337-
this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(syncCompletions.toArray(new String[syncCompletions.size()])));
2338-
});
23392340
// Paper end
23402341
}
23412342

@@ -2377,7 +2378,6 @@ public void a(PacketPlayInCustomPayload packetplayincustompayload) {
23772378
}
23782379

23792380
if (itemstack.getItem() == Items.WRITABLE_BOOK && itemstack.getItem() == itemstack1.getItem()) {
2380-
itemstack1 = new ItemStack(Items.WRITABLE_BOOK); // CraftBukkit
23812381
itemstack1.a("pages", (NBTBase) itemstack.getTag().getList("pages", 8));
23822382
CraftEventFactory.handleEditBookEvent(player, itemstack1); // CraftBukkit
23832383
}

sources/src/main/java/net/minecraft/server/RegionFileCache.java

Lines changed: 0 additions & 127 deletions
This file was deleted.

sources/src/main/java/net/minecraft/server/World.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ else if (entity instanceof EntityExperienceOrb) {
11841184

11851185
int i = MathHelper.floor(entity.locX / 16.0D);
11861186
int j = MathHelper.floor(entity.locZ / 16.0D);
1187-
boolean flag = entity.attachedToPlayer;
1187+
boolean flag = true; // Paper - always load chunks
11881188

11891189
// Paper start - Set origin location when the entity is being added to the world
11901190
if (entity.origin == null) {
@@ -1831,7 +1831,7 @@ public void entityJoinedWorld(Entity entity, boolean flag) {
18311831
this.getChunkAt(entity.ab, entity.ad).a(entity, entity.ac);
18321832
}
18331833

1834-
if (false && !entity.bD() && !this.isChunkLoaded(i, k, true)) { // Paper - Always send entities into a new chunk, never lose them
1834+
if (!entity.valid && !entity.bD() && !this.isChunkLoaded(i, k, true)) { // Paper - always load to new chunk if valid
18351835
entity.aa = false;
18361836
} else {
18371837
this.getChunkAt(i, k).a(entity);

sources/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1622,7 +1622,15 @@ public void updateScaledHealth() {
16221622
}
16231623

16241624
public void sendHealthUpdate() {
1625-
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel()));
1625+
// Paper start - cancellable death event
1626+
//getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel()));
1627+
PacketPlayOutUpdateHealth packet = new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel());
1628+
if (this.getHandle().queueHealthUpdatePacket) {
1629+
this.getHandle().queuedHealthUpdatePacket = packet;
1630+
} else {
1631+
this.getHandle().playerConnection.sendPacket(packet);
1632+
}
1633+
// Paper end
16261634
}
16271635

16281636
public void injectScaledMaxHealth(Collection<AttributeInstance> collection, boolean force) {

0 commit comments

Comments
 (0)