Skip to content

Commit

Permalink
Upstream Paper
Browse files Browse the repository at this point in the history
  • Loading branch information
cakoyo committed Oct 4, 2018
1 parent 5fe9361 commit 679236c
Show file tree
Hide file tree
Showing 8 changed files with 856 additions and 156 deletions.
3 changes: 3 additions & 0 deletions sources/src/main/java/net/minecraft/server/Entity.java
Original file line number Diff line number Diff line change
Expand Up @@ -1478,6 +1478,7 @@ public boolean isCollidable() {
return false;
}

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

}

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

protected boolean i(double d0, double d1, double d2) {
Expand Down Expand Up @@ -2972,6 +2974,7 @@ public EnumPistonReaction getPushReaction() {
return EnumPistonReaction.NORMAL;
}

public SoundCategory getDeathSoundCategory() { return bK();} // Paper - OBFHELPER
public SoundCategory bK() {
return SoundCategory.NEUTRAL;
}
Expand Down
29 changes: 27 additions & 2 deletions sources/src/main/java/net/minecraft/server/EntityPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ public void setViewDistance(int viewDistance) {
}
// Paper end
private int containerUpdateDelay; // Paper
// Paper start - cancellable death event
public boolean queueHealthUpdatePacket = false;
public net.minecraft.server.PacketPlayOutUpdateHealth queuedHealthUpdatePacket;
// Paper end

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

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

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

String deathMessage = event.getDeathMessage();

Expand Down Expand Up @@ -614,7 +629,17 @@ public boolean damageEntity(DamageSource damagesource, float f) {
}
}

return super.damageEntity(damagesource, f);
// Paper start - cancellable death events
//return super.damageEntity(damagesource, f);
this.queueHealthUpdatePacket = true;
boolean damaged = super.damageEntity(damagesource, f);
this.queueHealthUpdatePacket = false;
if (this.queuedHealthUpdatePacket != null) {
this.playerConnection.sendPacket(this.queuedHealthUpdatePacket);
this.queuedHealthUpdatePacket = null;
}
return damaged;
// Paper end
}
}
}
Expand Down
46 changes: 23 additions & 23 deletions sources/src/main/java/net/minecraft/server/PlayerConnection.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package net.minecraft.server;

import com.google.common.collect.Lists;
import com.google.common.primitives.Doubles;
import com.google.common.primitives.Floats;
import com.google.common.util.concurrent.Futures;

import io.akarin.api.internal.Akari;
import io.akarin.server.core.AkarinGlobalConfig;
Expand All @@ -10,6 +12,8 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
Expand Down Expand Up @@ -382,10 +386,13 @@ public void a(PacketPlayInVehicleMove packetplayinvehiclemove) {
}

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

if (flag && (flag1 || !flag2)) {
entity.setLocation(d0, d1, d2, f, f1);
player.setLocation(d0, d1, d2, f, f1); // Paper
this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity));
return;
}
Expand All @@ -395,7 +402,7 @@ public void a(PacketPlayInVehicleMove packetplayinvehiclemove) {
// Spigot Start
if ( !hasMoved )
{
Location curPos = player.getLocation();
//Location curPos = player.getLocation(); // Paper - move up
lastPosX = curPos.getX();
lastPosY = curPos.getY();
lastPosZ = curPos.getZ();
Expand Down Expand Up @@ -2310,32 +2317,26 @@ public void a(PacketPlayInTabComplete packet) {
buffer, isCommand, blockpos != null ? MCUtil.toLocation(player.world, blockpos) : null);
event.callEvent();
completions = event.isCancelled() ? com.google.common.collect.ImmutableList.of() : event.getCompletions();
if (event.isCancelled() || event.isHandled()) {
// Still fire sync event with the provided completions, if someone is listening
if (!event.isCancelled() && org.bukkit.event.server.TabCompleteEvent.getHandlerList().getRegisteredListeners().length > 0) {
java.util.List<String> finalCompletions = completions;
Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
@Override
protected java.util.List<String> evaluate() {
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);
return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
}
};
server.getServer().processQueue.add(syncCompletions);
try {
completions = syncCompletions.get();
} catch (InterruptedException | ExecutionException e1) {
e1.printStackTrace();
if (!event.isHandled()) {
// If the event isn't handled, we can assume that we have no completions, and so we'll ask the server

Waitable<java.util.List<String>> syncCompletions = new Waitable<java.util.List<String>>() {
@Override
protected java.util.List<String> evaluate() {
return minecraftServer.tabCompleteCommand(player, buffer, blockpos, isCommand);
}
};
server.getServer().processQueue.add(syncCompletions);
try {
completions = syncCompletions.get();
} catch (InterruptedException | ExecutionException e1) {
e1.printStackTrace();
}

this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(completions.toArray(new String[completions.size()])));
return;
} else if (!event.isCancelled()) {
this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(completions.toArray(new String[completions.size()])));
}
minecraftServer.postToMainThread(() -> {
java.util.List<String> syncCompletions = this.minecraftServer.tabCompleteCommand(this.player, buffer, blockpos, isCommand);
this.player.playerConnection.sendPacket(new PacketPlayOutTabComplete(syncCompletions.toArray(new String[syncCompletions.size()])));
});
// Paper end
}

Expand Down Expand Up @@ -2377,7 +2378,6 @@ public void a(PacketPlayInCustomPayload packetplayincustompayload) {
}

if (itemstack.getItem() == Items.WRITABLE_BOOK && itemstack.getItem() == itemstack1.getItem()) {
itemstack1 = new ItemStack(Items.WRITABLE_BOOK); // CraftBukkit
itemstack1.a("pages", (NBTBase) itemstack.getTag().getList("pages", 8));
CraftEventFactory.handleEditBookEvent(player, itemstack1); // CraftBukkit
}
Expand Down
127 changes: 0 additions & 127 deletions sources/src/main/java/net/minecraft/server/RegionFileCache.java

This file was deleted.

4 changes: 2 additions & 2 deletions sources/src/main/java/net/minecraft/server/World.java
Original file line number Diff line number Diff line change
Expand Up @@ -1184,7 +1184,7 @@ else if (entity instanceof EntityExperienceOrb) {

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

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

if (false && !entity.bD() && !this.isChunkLoaded(i, k, true)) { // Paper - Always send entities into a new chunk, never lose them
if (!entity.valid && !entity.bD() && !this.isChunkLoaded(i, k, true)) { // Paper - always load to new chunk if valid
entity.aa = false;
} else {
this.getChunkAt(i, k).a(entity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1622,7 +1622,15 @@ public void updateScaledHealth() {
}

public void sendHealthUpdate() {
getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel()));
// Paper start - cancellable death event
//getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel()));
PacketPlayOutUpdateHealth packet = new PacketPlayOutUpdateHealth(getScaledHealth(), getHandle().getFoodData().getFoodLevel(), getHandle().getFoodData().getSaturationLevel());
if (this.getHandle().queueHealthUpdatePacket) {
this.getHandle().queuedHealthUpdatePacket = packet;
} else {
this.getHandle().playerConnection.sendPacket(packet);
}
// Paper end
}

public void injectScaledMaxHealth(Collection<AttributeInstance> collection, boolean force) {
Expand Down
Loading

0 comments on commit 679236c

Please sign in to comment.