Even more patches for 1.14

This commit is contained in:
Shane Freeder 2019-04-30 02:20:24 +01:00
parent cab9529fe8
commit 86e7cee50c
35 changed files with 504 additions and 847 deletions

View File

@ -6,81 +6,62 @@ Subject: [PATCH] Add Debug Entities option to debug dupe uuid issues
Add -Ddebug.entities=true to your JVM flags to gain more information Add -Ddebug.entities=true to your JVM flags to gain more information
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 69a058d830..b6c46e01d9 100644 index c7d19d957..8dd589aae 100644
--- a/src/main/java/net/minecraft/server/Entity.java --- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java
@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper
protected CraftEntity bukkitEntity; protected CraftEntity bukkitEntity;
EntityTrackerEntry tracker; // Paper + EntityTrackerEntry tracker; // Paper
+ Throwable addedToWorldStack; // Paper - entity debug + Throwable addedToWorldStack; // Paper - entity debug
public CraftEntity getBukkitEntity() { public CraftEntity getBukkitEntity() {
if (bukkitEntity == null) { if (bukkitEntity == null) {
bukkitEntity = CraftEntity.getEntity(world.getServer(), this); bukkitEntity = CraftEntity.getEntity(world.getServer(), this);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index c7712d2e71..1496125ddf 100644 index 6bd181565..f9f0a94e9 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc @@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
public boolean pvpMode; public boolean pvpMode;
public boolean keepSpawnInMemory = true; public boolean keepSpawnInMemory = true;
public ChunkGenerator generator; public org.bukkit.generator.ChunkGenerator generator;
+ public static final boolean DEBUG_ENTITIES = Boolean.getBoolean("debug.entities"); // Paper + public static final boolean DEBUG_ENTITIES = Boolean.getBoolean("debug.entities"); // Paper
public boolean captureBlockStates = false; public boolean captureBlockStates = false;
public boolean captureTreeGeneration = false; public boolean captureTreeGeneration = false;
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 85a30652c4..6d1f70b39e 100644 index 0b4990a00..3e41c080d 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java --- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { @@ -0,0 +0,0 @@ public class WorldServer extends World {
// CraftBukkit start
public final DimensionManager dimension; public final DimensionManager dimension;
private int tickPosition;
boolean hasPhysicsEvent = true; // Paper
+ private static Throwable getAddToWorldStackTrace(Entity entity) { + private static Throwable getAddToWorldStackTrace(Entity entity) {
+ return new Throwable(entity + " Added to world at " + new java.util.Date()); + return new Throwable(entity + " Added to world at " + new java.util.Date());
+ } + }
// Add env and gen to constructor // Add env and gen to constructor
public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, PersistentCollection persistentcollection, WorldData worlddata, DimensionManager dimensionmanager, MethodProfiler methodprofiler, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { public WorldServer(MinecraftServer minecraftserver, Executor executor, WorldNBTStorage worldnbtstorage, WorldData worlddata, DimensionManager dimensionmanager, GameProfilerFiller gameprofilerfiller, WorldLoadListener worldloadlistener, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) {
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { @@ -0,0 +0,0 @@ public class WorldServer extends World {
org.spigotmc.AsyncCatcher.catchOp( "entity add"); // Spigot
private boolean j(Entity entity) { if (entity.valid) { MinecraftServer.LOGGER.error("Attempted Double World add on " + entity, new Throwable()); return true; } // Paper
if (entity.dead) { if (entity.dead) {
- // WorldServer.a.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getName(entity.P())); // CraftBukkit
+ // Paper start + // Paper start
+ if (DEBUG_ENTITIES) { + if (DEBUG_ENTITIES) {
+ new Throwable("Tried to add entity " + entity + " but it was marked as removed already").printStackTrace(); // CraftBukkit + new Throwable("Tried to add entity " + entity + " but it was marked as removed already").printStackTrace(); // CraftBukkit
+ getAddToWorldStackTrace(entity).printStackTrace(); + getAddToWorldStackTrace(entity).printStackTrace();
+ } + }
+ // Paper end + // Paper end
// WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getName(entity.getEntityType())); // CraftBukkit
return false; return false;
} else { } else if (this.isUUIDTaken(entity)) {
UUID uuid = entity.getUniqueID(); @@ -0,0 +0,0 @@ public class WorldServer extends World {
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { }
this.g.remove(entity1);
} else {
if (!(entity instanceof EntityHuman)) {
- WorldServer.a.error("Keeping entity {} that already exists with UUID {} - " + entity1, EntityTypes.getName(entity1.P()), uuid.toString()); // CraftBukkit // Paper
- WorldServer.a.error("Deleting duplicate entity {}", entity); // Paper
+ if (DEBUG_ENTITIES) {
+ WorldServer.a.error("Keeping entity {} that already exists with UUID {}", entity1, uuid.toString()); // CraftBukkit // Paper
+ WorldServer.a.error("Deleting duplicate entity {}", entity); // Paper
+
+ if (entity1.addedToWorldStack != null) {
+ entity1.addedToWorldStack.printStackTrace();
+ }
+ getAddToWorldStackTrace(entity).printStackTrace();
+ }
return false;
} }
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
protected void b(Entity entity) {
super.b(entity);
this.entitiesById.a(entity.getId(), entity);
- this.entitiesByUUID.put(entity.getUniqueID(), entity); - this.entitiesByUUID.put(entity.getUniqueID(), entity);
+ // Paper start
+ if (DEBUG_ENTITIES) { + if (DEBUG_ENTITIES) {
+ entity.addedToWorldStack = getAddToWorldStackTrace(entity); + entity.addedToWorldStack = getAddToWorldStackTrace(entity);
+ } + }
@ -98,8 +79,8 @@ index 85a30652c4..6d1f70b39e 100644
+ entity.addedToWorldStack.printStackTrace(); + entity.addedToWorldStack.printStackTrace();
+ } + }
+ } + }
+ // Paper end +
Entity[] aentity = entity.bi(); this.getChunkProvider().addEntity(entity);
if (entity instanceof EntityInsentient) {
if (aentity != null) { this.I.add(((EntityInsentient) entity).getNavigation());
-- --

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Add config to disable ender dragon legacy check
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 47f8dfcc41..aa2be2ede6 100644 index ce17447fa..3294fbbea 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -0,0 +0,0 @@ public class PaperWorldConfig { @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@ -19,7 +19,7 @@ index 47f8dfcc41..aa2be2ede6 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java
index a6259d9e6c..aad7ce93f6 100644 index 5ae20b132..60ba37c92 100644
--- a/src/main/java/net/minecraft/server/EnderDragonBattle.java --- a/src/main/java/net/minecraft/server/EnderDragonBattle.java
+++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java +++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java
@@ -0,0 +0,0 @@ public class EnderDragonBattle { @@ -0,0 +0,0 @@ public class EnderDragonBattle {

View File

@ -10,68 +10,66 @@ to the object directly on the Entity/TileEntity object we can directly grab.
Use that local value instead to reduce lookups in many hot places. Use that local value instead to reduce lookups in many hot places.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index d87b08a49e..c7712d2e71 100644 index 3737fca81..6bd181565 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc @@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
int i = entity.chunkX; if (!tileentity.isRemoved() && tileentity.hasWorld()) {
int j = entity.chunkZ;
- if (entity.inChunk && this.isChunkLoaded(i, j, true)) {
- this.getChunkAt(i, j).b(entity);
- }
+ Chunk chunk = entity.getCurrentChunk(); // Paper
+ if (chunk != null) chunk.removeEntity(entity); // Paper
// CraftBukkit start - Decrement loop variable field if we've already ticked this entity
int index = this.entityList.indexOf(entity);
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
int k = entity.chunkX;
j = entity.chunkZ;
- if (entity.inChunk && this.isChunkLoaded(k, j, true)) {
- this.getChunkAt(k, j).b(entity);
- }
+ Chunk chunk = entity.getCurrentChunk(); // Paper
+ if (chunk != null) chunk.removeEntity(entity); // Paper
//} // Paper - merge
//for (Entity e : this.g) { // Paper - merge
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
j = entity.chunkX;
int l = entity.chunkZ;
- if (entity.inChunk && this.isChunkLoaded(j, l, true)) {
- this.getChunkAt(j, l).b(entity);
- }
+ // Paper start
+ Chunk chunk = entity.getCurrentChunk();
+ if (chunk != null) chunk.removeEntity(entity);
+ // Paper end
guardEntityList = false; // Spigot
this.entityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
BlockPosition blockposition = tileentity.getPosition(); BlockPosition blockposition = tileentity.getPosition();
// Paper start - Skip ticking in chunks scheduled for unload - if (this.isLoaded(blockposition) && this.getWorldBorder().a(blockposition)) {
- net.minecraft.server.Chunk chunk = this.getChunkIfLoaded(blockposition); + Chunk currentChunk = tileentity.getCurrentChunk(); // Paper
+ net.minecraft.server.Chunk chunk = tileentity.getCurrentChunk(); + if (currentChunk != null && this.getWorldBorder().a(blockposition)) { // Paper
boolean shouldTick = chunk != null; try {
if(this.paperConfig.skipEntityTickingInChunksScheduledForUnload) gameprofilerfiller.a(() -> {
shouldTick = shouldTick && chunk.scheduledForUnload == null; return String.valueOf(TileEntityTypes.a(tileentity.q()));
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc @@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
tilesThisCycle--;
this.tileEntityListTick.remove(tileTickPosition--); this.tileEntityListTick.remove(tileTickPosition--);
// Spigot end
//this.tileEntityList.remove(tileentity); // Paper - remove unused list //this.tileEntityList.remove(tileentity); // Paper - remove unused list
- if (this.isLoaded(tileentity.getPosition())) { - if (this.isLoaded(tileentity.getPosition())) {
- this.getChunkAtWorldCoords(tileentity.getPosition()).d(tileentity.getPosition()); + if (tileentity.getCurrentChunk() != null ) { // Paper - avoid lookups
this.getChunkAtWorldCoords(tileentity.getPosition()).removeTileEntity(tileentity.getPosition());
}
}
@@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
}
// CraftBukkit end */
- if (this.isLoaded(tileentity1.getPosition())) {
- Chunk chunk = this.getChunkAtWorldCoords(tileentity1.getPosition());
+ Chunk chunk = tileentity1.getCurrentChunk(); // Paper
+ if (chunk != null) { // Paper
+ //Chunk chunk = this.getChunkAtWorldCoords(tileentity1.getPosition()); // Paper
IBlockData iblockdata = chunk.getType(tileentity1.getPosition());
chunk.setTileEntity(tileentity1.getPosition(), tileentity1);
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 79be8cfa3..af62ab182 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World {
}
this.entitiesByUUID.remove(entity.getUniqueID());
- this.getChunkProvider().removeEntity(entity);
+ if (entity.getCurrentChunk() != null ) this.getChunkProvider().removeEntity(entity); // Paper
if (entity instanceof EntityPlayer) {
EntityPlayer entityplayer = (EntityPlayer) entity;
@@ -0,0 +0,0 @@ public class WorldServer extends World {
}
private void removeEntityFromChunk(Entity entity) {
- IChunkAccess ichunkaccess = this.getChunkAt(entity.chunkX, entity.chunkZ, ChunkStatus.FULL, false);
+ // Paper start + // Paper start
+ net.minecraft.server.Chunk chunk = tileentity.getCurrentChunk(); + if (!entity.inChunk) return;
+ if (chunk != null) { + IChunkAccess ichunkaccess = this.getChunkIfLoaded(entity.chunkX, entity.chunkZ);
+ chunk.removeTileEntity(tileentity.getPosition()); + // Paper start
+ // Paper end
} - if (ichunkaccess instanceof Chunk) {
} + if (ichunkaccess != null) {
((Chunk) ichunkaccess).b(entity);
} }
-- --

View File

@ -5,18 +5,18 @@ Subject: [PATCH] Avoid item merge if stack size above max stack size
diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java
index e9986420c2..c9473087ad 100644 index c582c6711..c5fefa060 100644
--- a/src/main/java/net/minecraft/server/EntityItem.java --- a/src/main/java/net/minecraft/server/EntityItem.java
+++ b/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java
@@ -0,0 +0,0 @@ public class EntityItem extends Entity { @@ -0,0 +0,0 @@ public class EntityItem extends Entity {
} }
private void v() { private void mergeNearby() {
+ // Paper start - avoid item merge if stack size above max stack size + // Paper start - avoid item merge if stack size above max stack size
+ ItemStack stack = getItemStack(); + ItemStack stack = getItemStack();
+ if (stack.getCount() >= stack.getMaxStackSize()) return; + if (stack.getCount() >= stack.getMaxStackSize()) return;
+ // Paper end + // Paper end
// Spigot start // Spigot start
double radius = world.spigotConfig.itemMerge; double radius = world.spigotConfig.itemMerge;
Iterator iterator = this.world.a(EntityItem.class, this.getBoundingBox().grow(radius, radius, radius)).iterator(); List<EntityItem> list = this.world.a(EntityItem.class, this.getBoundingBox().grow(radius, radius, radius), (entityitem) -> {
-- --

View File

@ -36,7 +36,7 @@ This change will result in some major changes to fishing formulas.
I would love to see this change in Vanilla, so Mojang please pull :) I would love to see this change in Vanilla, so Mojang please pull :)
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
index b85cd10437..d42853d14c 100644 index 7fba61a6d..c8f9c45e5 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
@@ -0,0 +0,0 @@ public class PaperConfig { @@ -0,0 +0,0 @@ public class PaperConfig {
@ -53,33 +53,61 @@ index b85cd10437..d42853d14c 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/LootSelectorEntry.java b/src/main/java/net/minecraft/server/LootSelectorEntry.java diff --git a/src/main/java/net/minecraft/server/LootSelectorEntry.java b/src/main/java/net/minecraft/server/LootSelectorEntry.java
index 3e313bba7c..80f9f9a252 100644 index 929053491..62cac814d 100644
--- a/src/main/java/net/minecraft/server/LootSelectorEntry.java --- a/src/main/java/net/minecraft/server/LootSelectorEntry.java
+++ b/src/main/java/net/minecraft/server/LootSelectorEntry.java +++ b/src/main/java/net/minecraft/server/LootSelectorEntry.java
@@ -0,0 +0,0 @@ import java.util.Random; @@ -0,0 +0,0 @@ import org.apache.commons.lang3.ArrayUtils;
public abstract class LootSelectorEntry { public abstract class LootSelectorEntry extends LootEntryAbstract {
- protected final int c; - protected final int e;
- protected final int d; - protected final int f;
+ protected final int c; public int getWeight() { return c; } // Paper - OBFHELPER + protected final int e; public int getWeight() { return e; } // Paper - OBFHELPER
+ protected final int d; public int getQuality() { return d; } // Paper - OBFHELPER + protected final int f; public int getQuality() { return f; } // Paper - OBFHELPER
protected final LootItemCondition[] e; protected final LootItemFunction[] g;
private final BiFunction<ItemStack, LootTableInfo, ItemStack> c;
protected LootSelectorEntry(int i, int j, LootItemCondition[] alootitemcondition) { private final LootEntry h = new LootSelectorEntry.c() {
@@ -0,0 +0,0 @@ public abstract class LootSelectorEntry { @@ -0,0 +0,0 @@ public abstract class LootSelectorEntry extends LootEntryAbstract {
@Override
public T b(LootItemFunction.a lootitemfunction_a) {
this.c.add(lootitemfunction_a.b());
- return (LootSelectorEntry.a) this.d();
+ return this.d(); // Paper - decompile fix -- move to mcdev fixes
} }
protected LootItemFunction[] a() {
@@ -0,0 +0,0 @@ public abstract class LootSelectorEntry extends LootEntryAbstract {
public T a(int i) {
this.a = i;
- return (LootSelectorEntry.a) this.d();
+ return this.d(); // Paper - decompile fix -- move to mcdev fixes
}
public T b(int i) {
this.b = i;
- return (LootSelectorEntry.a) this.d();
+ return this.d(); // Paper - decompile fix -- MOVE UP
}
}
public abstract class c implements LootEntry {
- protected c() {}
+ protected c() {
+ }
@Override
public int a(float f) { public int a(float f) {
- return Math.max(MathHelper.d((float) this.c + (float) this.d * f), 0); - return Math.max(MathHelper.d((float) LootSelectorEntry.this.e + (float) LootSelectorEntry.this.f * f), 0);
+ // Paper start - Offer an alternative loot formula to refactor how luck bonus applies + // Paper start - Offer an alternative loot formula to refactor how luck bonus applies
+ // SEE: https://luckformula.emc.gs for details and data + // SEE: https://luckformula.emc.gs for details and data
+ if (lastLuck != null && lastLuck == f) { + if (lastLuck != null && lastLuck == f) {
+ return lastWeight; + return lastWeight;
+ } + }
+ // This is vanilla + // This is vanilla
+ float qualityModifer = (float) this.getQuality() * f; + float qualityModifer = (float) getQuality() * f;
+ double baseWeight = (this.getWeight() + qualityModifer); + double baseWeight = (getWeight() + qualityModifer);
+ if (com.destroystokyo.paper.PaperConfig.useAlternativeLuckFormula) { + if (com.destroystokyo.paper.PaperConfig.useAlternativeLuckFormula) {
+ // Random boost to avoid losing precision in the final int cast on return + // Random boost to avoid losing precision in the final int cast on return
+ final int weightBoost = 100; + final int weightBoost = 100;
@ -97,10 +125,9 @@ index 3e313bba7c..80f9f9a252 100644
+ lastWeight = (int) Math.max(0, Math.floor(baseWeight)); + lastWeight = (int) Math.max(0, Math.floor(baseWeight));
+ return lastWeight; + return lastWeight;
} }
}
+ private Float lastLuck = null; + private Float lastLuck = null;
+ private int lastWeight = 0; + private int lastWeight = 0;
+ // Paper end + // Paper end
}
public abstract void a(Collection<ItemStack> collection, Random random, LootTableInfo loottableinfo);
-- --

View File

@ -10,7 +10,7 @@ player at their bed should it of became obstructed.
Defaults to vanilla 1. Defaults to vanilla 1.
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index aa2be2ede6..f5b2e88f3b 100644 index 3294fbbea..83e54cb90 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -0,0 +0,0 @@ public class PaperWorldConfig { @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@ -30,16 +30,17 @@ index aa2be2ede6..f5b2e88f3b 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java
index 06f627002c..d81a2db6cd 100644 index 2a451025f..75331c986 100644
--- a/src/main/java/net/minecraft/server/BlockBed.java --- a/src/main/java/net/minecraft/server/BlockBed.java
+++ b/src/main/java/net/minecraft/server/BlockBed.java +++ b/src/main/java/net/minecraft/server/BlockBed.java
@@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { @@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
@Nullable
public static BlockPosition a(IBlockAccess iblockaccess, BlockPosition blockposition, int i) { public static Optional<Vec3D> a(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition, int i) {
EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBed.FACING); EnumDirection enumdirection = (EnumDirection) iworldreader.getType(blockposition).get(BlockBed.FACING);
+ // Paper - replace whole method + // Paper - configurable bed search radius
+ World world = (World) iblockaccess; + World world = (World) iworldreader;
+ int radius = world.paperConfig.bedSearchRadius; + int radius = world.paperConfig.bedSearchRadius;
+ if (radius > 0) {
+ for (int r = 1; r <= radius; r++) { + for (int r = 1; r <= radius; r++) {
+ int x = -r; + int x = -r;
+ int z = r; + int z = r;
@ -48,29 +49,32 @@ index 06f627002c..d81a2db6cd 100644
+ while (x <= r && z > -r) { + while (x <= r && z > -r) {
+ for (int y = -1; y <= 1; y++) { + for (int y = -1; y <= 1; y++) {
+ BlockPosition pos = blockposition.add(x, y, z); + BlockPosition pos = blockposition.add(x, y, z);
+ if (isSafeRespawn(world, pos)) { + Optional<Vec3D> vector;
+ vector = isSafeRespawn(entitytypes, world, pos);
+ if (vector.isPresent()) {
+ if (i-- <= 0) { + if (i-- <= 0) {
+ return pos; + return vector;
+ } + }
+ } + }
+ pos = blockposition.add(-x, y, -z); + pos = blockposition.add(-x, y, -z);
+ if (isSafeRespawn(world, pos)) { + vector = isSafeRespawn(entitytypes, world, pos);
+ if (vector.isPresent()) {
+ if (i-- <= 0) { + if (i-- <= 0) {
+ return pos; + return vector;
+ } + }
+ } + }
+ +
+ pos = blockposition.add(enumdirection.getAdjacentX() + x, y, enumdirection.getAdjacentZ() + z); + vector = isSafeRespawn(entitytypes, world, pos);
+ if (isSafeRespawn(world, pos)) { + if (vector.isPresent()) {
+ if (i-- <= 0) { + if (i-- <= 0) {
+ return pos; + return vector;
+ } + }
+ } + }
+ +
+ pos = blockposition.add(enumdirection.getAdjacentX() - x, y, enumdirection.getAdjacentZ() - z); + vector = isSafeRespawn(entitytypes, world, pos);
+ if (isSafeRespawn(world, pos)) { + if (vector.isPresent()) {
+ if (i-- <= 0) { + if (i-- <= 0) {
+ return pos; + return vector;
+ } + }
+ } + }
+ } + }
@ -82,22 +86,18 @@ index 06f627002c..d81a2db6cd 100644
+ } + }
+ } + }
+ +
+ return null; /* // Paper comment out + return Optional.empty();
+ }
+ // Paper end
int j = blockposition.getX(); int j = blockposition.getX();
int k = blockposition.getY(); int k = blockposition.getY();
int l = blockposition.getZ(); int l = blockposition.getZ();
@@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { @@ -0,0 +0,0 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity {
} return Optional.empty();
} }
- return null; + protected static Optional<Vec3D> isSafeRespawn(EntityTypes<?> entityTypes, IWorldReader iworldreader, BlockPosition blockPosition) { return a(entityTypes, iworldreader, blockPosition); } // Paper -- obfhelper
+ return null;*/ // Paper protected static Optional<Vec3D> a(EntityTypes<?> entitytypes, IWorldReader iworldreader, BlockPosition blockposition) {
} VoxelShape voxelshape = iworldreader.getType(blockposition).getCollisionShape(iworldreader, blockposition);
+ protected static boolean isSafeRespawn(IBlockAccess iblockaccess, BlockPosition blockposition) { // Paper - OBFHELPER + behavior improvement
+ return a(iblockaccess, blockposition) && iblockaccess.getType(blockposition.down()).getMaterial().isBuildable(); // Paper - ensure solid block
+ }
protected static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition) {
return iblockaccess.getType(blockposition.down()).q() && !iblockaccess.getType(blockposition).getMaterial().isBuildable() && !iblockaccess.getType(blockposition.up()).getMaterial().isBuildable();
}
-- --

View File

@ -5,16 +5,16 @@ Subject: [PATCH] Don't change the Entity Random seed for squids
diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java
index b9c76325db..ab79317a2d 100644 index d5dff4b88..77c0ed42f 100644
--- a/src/main/java/net/minecraft/server/EntitySquid.java --- a/src/main/java/net/minecraft/server/EntitySquid.java
+++ b/src/main/java/net/minecraft/server/EntitySquid.java +++ b/src/main/java/net/minecraft/server/EntitySquid.java
@@ -0,0 +0,0 @@ public class EntitySquid extends EntityWaterAnimal { @@ -0,0 +0,0 @@ public class EntitySquid extends EntityWaterAnimal {
public EntitySquid(World world) {
super(EntityTypes.SQUID, world); public EntitySquid(EntityTypes<? extends EntitySquid> entitytypes, World world) {
this.setSize(0.8F, 0.8F); super(entitytypes, world);
- this.random.setSeed((long) (1 + this.getId())); - this.random.setSeed((long) this.getId());
+ //this.random.setSeed((long) (1 + this.getId())); // Paper + //this.random.setSeed((long) this.getId()); // Paper
this.bI = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F; this.bF = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
} }
-- --

View File

@ -1,27 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 19 Jul 2018 01:23:00 -0400
Subject: [PATCH] Don't process despawn if entity is in a chunk scheduled for
unload
This won't happen anyways if the user has
"skip ticking for entities in chunks scheduled for unload" turned on,
but if they don't, protect from this instant killing the entity to
keep it vanilla in behavior
a player may teleport away, and trigger instant despawn
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index 98e214cdd6..ee5078370c 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -0,0 +0,0 @@ public abstract class EntityInsentient extends EntityLiving {
if (this.persistent) {
this.ticksFarFromPlayer = 0;
} else {
+ Chunk currentChunk = getChunkAtLocation(); // Paper
+ if (currentChunk != null && currentChunk.scheduledForUnload != null) return; // Paper
EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
if (entityhuman != null && entityhuman.affectsSpawning) { // Paper - Affects Spawning API
--

View File

@ -7,37 +7,16 @@ These chunks are unfinished, and waste cpu time saving these unfinished chunks.
the loadChunk method refuses to acknoledge they exists, and will restart the loadChunk method refuses to acknoledge they exists, and will restart
a new chunk generation process to begin with, so saving them serves no benefit. a new chunk generation process to begin with, so saving them serves no benefit.
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index 0fc4d9f520..2c4a4fc6b7 100644 index 3fab45aa9..26fd5dd1e 100644
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -0,0 +0,0 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { @@ -0,0 +0,0 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d {
} }
public void saveChunk(World world, IChunkAccess ichunkaccess, boolean unloaded) throws IOException, ExceptionWorldConflict { public void saveChunk(IChunkAccess ichunkaccess, boolean save) {
+ if (ichunkaccess.i().d() == ChunkStatus.Type.PROTOCHUNK) { return; } // Paper - don't save proto chunks + if (ichunkaccess.getChunkStatus().getType() == ChunkStatus.Type.PROTOCHUNK) { return; } // Paper - don't save proto chunks
// Spigot end // CraftBukkit end
world.checkSession(); this.n.a(ichunkaccess.getPos());
if (save) { // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/ChunkTaskScheduler.java b/src/main/java/net/minecraft/server/ChunkTaskScheduler.java
index 70a95c2636..56958a5ce3 100644
--- a/src/main/java/net/minecraft/server/ChunkTaskScheduler.java
+++ b/src/main/java/net/minecraft/server/ChunkTaskScheduler.java
@@ -0,0 +0,0 @@ public class ChunkTaskScheduler extends Scheduler<ChunkCoordIntPair, ChunkStatus
protected boolean a(Scheduler<ChunkCoordIntPair, ChunkStatus, ProtoChunk>.a scheduler_a) {
ProtoChunk protochunk = (ProtoChunk) scheduler_a.a();
- return !protochunk.ab_() && !protochunk.h();
+ return !protochunk.ab_() /*&& !protochunk.h()*/; // Paper
}
};
@@ -0,0 +0,0 @@ public class ChunkTaskScheduler extends Scheduler<ChunkCoordIntPair, ChunkStatus
}
public void a(BooleanSupplier booleansupplier) {
+ if (true) return; // Paper - we don't save proto chunks, and don't want to block thread
IChunkLoader ichunkloader = this.e;
synchronized (this.e) {
-- --

View File

@ -1,221 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 21 Jul 2018 14:27:34 -0400
Subject: [PATCH] Duplicate UUID Resolve Option
Due to a bug in https://github.com/PaperMC/Paper/commit/2e29af3df05ec0a383f48be549d1c03200756d24
which was added all the way back in March of 2016, it was unknown (potentially not at the time)
that an entity might actually change the seed of the random object.
At some point, EntitySquid did start setting the seed. Due to this shared random, this caused
every entity to use a Random object with a predictable seed.
This has caused entities to potentially generate with the same UUID....
Over the years, servers have had entities disappear, but no sign of trouble
because CraftBukkit removed the log lines indicating that something was wrong.
We have fixed the root issue causing duplicate UUID's, however we now have chunk
files full of entities that have the same UUID as another entity!
When these chunks load, the 2nd entity will not be added to the world correctly.
If that chunk loads in a different order in the future, then it will reverse and the
missing one is now the one added to the world and not the other. This results in very
inconsistent entity behavior.
This change allows you to recover any duplicate entity by generating a new UUID for it.
This also lets you delete them instead if you don't want to risk having new entities added to
the world that you previously did not see.
But for those who are ok with leaving this inconsistent behavior, you may use WARN or NOTHING options.
It is recommended you regenerate the entities, as these were legit entities, and deserve your love.
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index f5b2e88f3b..8c4ff18868 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
log("Bed Search Radius: " + bedSearchRadius);
}
}
+
+ public enum DuplicateUUIDMode {
+ SAFE_REGEN, DELETE, NOTHING, WARN
+ }
+ public DuplicateUUIDMode duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN;
+ public int duplicateUUIDDeleteRange = 32;
+ private void repairDuplicateUUID() {
+ String desiredMode = getString("duplicate-uuid-resolver", "saferegen").toLowerCase().trim();
+ duplicateUUIDDeleteRange = getInt("duplicate-uuid-saferegen-delete-range", duplicateUUIDDeleteRange);
+ switch (desiredMode.toLowerCase()) {
+ case "regen":
+ case "regenerate":
+ case "saferegen":
+ case "saferegenerate":
+ duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN;
+ log("Duplicate UUID Resolve: Regenerate New UUID if distant (Delete likely duplicates within " + duplicateUUIDDeleteRange + " blocks)");
+ break;
+ case "remove":
+ case "delete":
+ duplicateUUIDMode = DuplicateUUIDMode.DELETE;
+ log("Duplicate UUID Resolve: Delete Entity");
+ break;
+ case "silent":
+ case "nothing":
+ duplicateUUIDMode = DuplicateUUIDMode.NOTHING;
+ logError("Duplicate UUID Resolve: Do Nothing (no logs) - Warning, may lose indication of bad things happening");
+ break;
+ case "log":
+ case "warn":
+ duplicateUUIDMode = DuplicateUUIDMode.WARN;
+ log("Duplicate UUID Resolve: Warn (do nothing but log it happened, may be spammy)");
+ break;
+ default:
+ duplicateUUIDMode = DuplicateUUIDMode.WARN;
+ logError("Warning: Invalid duplicate-uuid-resolver config " + desiredMode + " - must be one of: regen, delete, nothing, warn");
+ log("Duplicate UUID Resolve: Warn (do nothing but log it happened, may be spammy)");
+ break;
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index c2f12f92b0..e8c06e01b4 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -0,0 +0,0 @@
package net.minecraft.server;
+// Paper start
+import com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode;
+import java.util.HashMap;
+import java.util.UUID;
+// Paper end
import com.destroystokyo.paper.exception.ServerInternalException;
import com.google.common.collect.Maps;
import com.google.common.collect.Queues;
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
public final World world;
public final Map<HeightMap.Type, HeightMap> heightMap;
public Long scheduledForUnload; // Paper - delay chunk unloads
+ private static final Logger logger = LogManager.getLogger(); // Paper
public final int locX;
public final int locZ;
private boolean l;
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
if (i != this.locX || j != this.locZ) {
Chunk.d.warn("Wrong location! ({}, {}) should be ({}, {}), {}", i, j, this.locX, this.locZ, entity);
entity.die();
+ return; // Paper
}
int k = MathHelper.floor(entity.locY / 16.0D);
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
for (int j = 0; j < i; ++j) {
List<Entity> entityslice = aentityslice[j]; // Spigot
+ // Paper start
+ DuplicateUUIDMode mode = world.paperConfig.duplicateUUIDMode;
+ if (mode == DuplicateUUIDMode.WARN || mode == DuplicateUUIDMode.DELETE || mode == DuplicateUUIDMode.SAFE_REGEN) {
+ Map<UUID, Entity> thisChunk = new HashMap<>();
+ for (Iterator<Entity> iterator = ((List<Entity>) entityslice).iterator(); iterator.hasNext(); ) {
+ Entity entity = iterator.next();
+ if (entity.dead || entity.valid) continue;
+ Entity other = ((WorldServer) world).entitiesByUUID.get(entity.uniqueID);
+ if (other == null || other.dead || world.getEntityUnloadQueue().contains(other)) {
+ other = thisChunk.get(entity.uniqueID);
+ }
+
+ if (mode == DuplicateUUIDMode.SAFE_REGEN && other != null && !other.dead &&
+ !world.getEntityUnloadQueue().contains(other)
+ && java.util.Objects.equals(other.getSaveID(), entity.getSaveID())
+ && entity.getBukkitEntity().getLocation().distance(other.getBukkitEntity().getLocation()) < world.paperConfig.duplicateUUIDDeleteRange
+ ) {
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + " because it was near the duplicate and likely an actual duplicate. See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
+ entity.die();
+ iterator.remove();
+ continue;
+ }
+ if (other != null && !other.dead) {
+ switch (mode) {
+ case SAFE_REGEN: {
+ entity.setUUID(UUID.randomUUID());
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", regenerated UUID for " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
+ break;
+ }
+ case DELETE: {
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
+ entity.die();
+ iterator.remove();
+ break;
+ }
+ default:
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", doing nothing to " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
+ break;
+ }
+ }
+ thisChunk.put(entity.uniqueID, entity);
+ }
+ }
+ // Paper end
// CraftBukkit start
List<Entity> toRemove = new LinkedList<>();
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index b6c46e01d9..6598b87eef 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
});
}
+ public void setUUID(UUID uuid) { a(uuid); } // Paper - OBFHELPER
public void a(UUID uuid) {
this.uniqueID = uuid;
this.au = this.uniqueID.toString();
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 1496125ddf..a5f4b9ad94 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
}
};
// Spigot end
- protected final Set<Entity> g = com.google.common.collect.Sets.newHashSet(); // Paper
+ protected final Set<Entity> g = com.google.common.collect.Sets.newHashSet(); public Set<Entity> getEntityUnloadQueue() { return g; };// Paper - OBFHELPER
//public final List<TileEntity> tileEntityList = Lists.newArrayList(); // Paper - remove unused list
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
private final List<TileEntity> c = Lists.newArrayList();
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 6d1f70b39e..293818b196 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
private final MinecraftServer server;
public EntityTracker tracker;
private final PlayerChunkMap manager;
- private final Map<UUID, Entity> entitiesByUUID = Maps.newHashMap();
+ public final Map<UUID, Entity> entitiesByUUID = Maps.newHashMap(); // Paper
public boolean savingDisabled;
private boolean J;
private int emptyTime;
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
this.g.remove(entity1);
} else {
if (!(entity instanceof EntityHuman)) {
- if (DEBUG_ENTITIES) {
+ if (DEBUG_ENTITIES && entity.world.paperConfig.duplicateUUIDMode != com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode.NOTHING) {
WorldServer.a.error("Keeping entity {} that already exists with UUID {}", entity1, uuid.toString()); // CraftBukkit // Paper
WorldServer.a.error("Deleting duplicate entity {}", entity); // Paper
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
}
Entity old = this.entitiesByUUID.put(entity.getUniqueID(), entity);
- if (old != null && old.getId() != entity.getId() && old.valid) {
+ if (old != null && old.getId() != entity.getId() && old.valid && entity.world.paperConfig.duplicateUUIDMode != com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode.NOTHING) {
Logger logger = LogManager.getLogger();
logger.error("Overwrote an existing entity " + old + " with " + entity);
if (DEBUG_ENTITIES) {
--

View File

@ -5,12 +5,12 @@ Subject: [PATCH] EnderDragon Events
diff --git a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java diff --git a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java
index 1906bcfc96..50d291139c 100644 index 4ab310cd6..90f6d58dd 100644
--- a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java --- a/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java
+++ b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java +++ b/src/main/java/net/minecraft/server/DragonControllerLandedFlame.java
@@ -0,0 +0,0 @@ public class DragonControllerLandedFlame extends AbstractDragonControllerLanded @@ -0,0 +0,0 @@ public class DragonControllerLandedFlame extends AbstractDragonControllerLanded
this.d.setDuration(200); this.d.setDuration(200);
this.d.setParticle(Particles.j); this.d.setParticle(Particles.DRAGON_BREATH);
this.d.a(new MobEffect(MobEffects.HARM)); this.d.a(new MobEffect(MobEffects.HARM));
+ if (new com.destroystokyo.paper.event.entity.EnderDragonFlameEvent((org.bukkit.entity.EnderDragon) this.a.getBukkitEntity(), (org.bukkit.entity.AreaEffectCloud) this.d.getBukkitEntity()).callEvent()) // Paper + if (new com.destroystokyo.paper.event.entity.EnderDragonFlameEvent((org.bukkit.entity.EnderDragon) this.a.getBukkitEntity(), (org.bukkit.entity.AreaEffectCloud) this.d.getBukkitEntity()).callEvent()) // Paper
this.a.world.addEntity(this.d); this.a.world.addEntity(this.d);
@ -22,12 +22,13 @@ index 1906bcfc96..50d291139c 100644
++this.c; ++this.c;
} }
+
+ public void removeAreaEffect() { this.e(); } // Paper - OBFHELPER + public void removeAreaEffect() { this.e(); } // Paper - OBFHELPER
@Override
public void e() { public void e() {
if (this.d != null) { if (this.d != null) {
this.d.die();
diff --git a/src/main/java/net/minecraft/server/DragonControllerStrafe.java b/src/main/java/net/minecraft/server/DragonControllerStrafe.java diff --git a/src/main/java/net/minecraft/server/DragonControllerStrafe.java b/src/main/java/net/minecraft/server/DragonControllerStrafe.java
index e742586765..141ba1e5e6 100644 index b46660576..bf15964e7 100644
--- a/src/main/java/net/minecraft/server/DragonControllerStrafe.java --- a/src/main/java/net/minecraft/server/DragonControllerStrafe.java
+++ b/src/main/java/net/minecraft/server/DragonControllerStrafe.java +++ b/src/main/java/net/minecraft/server/DragonControllerStrafe.java
@@ -0,0 +0,0 @@ public class DragonControllerStrafe extends AbstractDragonController { @@ -0,0 +0,0 @@ public class DragonControllerStrafe extends AbstractDragonController {
@ -41,7 +42,7 @@ index e742586765..141ba1e5e6 100644
if (this.d != null) { if (this.d != null) {
while (!this.d.b()) { while (!this.d.b()) {
diff --git a/src/main/java/net/minecraft/server/EntityDragonFireball.java b/src/main/java/net/minecraft/server/EntityDragonFireball.java diff --git a/src/main/java/net/minecraft/server/EntityDragonFireball.java b/src/main/java/net/minecraft/server/EntityDragonFireball.java
index 7df8fd4d74..c0d66a0233 100644 index 239be99c5..2195b83ce 100644
--- a/src/main/java/net/minecraft/server/EntityDragonFireball.java --- a/src/main/java/net/minecraft/server/EntityDragonFireball.java
+++ b/src/main/java/net/minecraft/server/EntityDragonFireball.java +++ b/src/main/java/net/minecraft/server/EntityDragonFireball.java
@@ -0,0 +0,0 @@ public class EntityDragonFireball extends EntityFireball { @@ -0,0 +0,0 @@ public class EntityDragonFireball extends EntityFireball {

View File

@ -6,7 +6,7 @@ Subject: [PATCH] EntityShootBowEvent consumeArrow and getArrowItem API
Adds ability to get what arrow was shot, and control if it should be consumed. Adds ability to get what arrow was shot, and control if it should be consumed.
diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
index 749a8a5272..6e2ee04c77 100644 index e575d3cff..85157e80d 100644
--- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java --- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
+++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java
@@ -0,0 +0,0 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR @@ -0,0 +0,0 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR
@ -19,10 +19,10 @@ index 749a8a5272..6e2ee04c77 100644
event.getProjectile().remove(); event.getProjectile().remove();
return; return;
diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java
index 6934114005..52bc68e6a6 100644 index 50b815dc8..4ec02c8ce 100644
--- a/src/main/java/net/minecraft/server/ItemBow.java --- a/src/main/java/net/minecraft/server/ItemBow.java
+++ b/src/main/java/net/minecraft/server/ItemBow.java +++ b/src/main/java/net/minecraft/server/ItemBow.java
@@ -0,0 +0,0 @@ public class ItemBow extends Item { @@ -0,0 +0,0 @@ public class ItemBow extends ItemProjectileWeapon {
if ((double) f >= 0.1D) { if ((double) f >= 0.1D) {
boolean flag1 = flag && itemstack1.getItem() == Items.ARROW; boolean flag1 = flag && itemstack1.getItem() == Items.ARROW;
@ -30,7 +30,7 @@ index 6934114005..52bc68e6a6 100644
if (!world.isClientSide) { if (!world.isClientSide) {
ItemArrow itemarrow = (ItemArrow) ((ItemArrow) (itemstack1.getItem() instanceof ItemArrow ? itemstack1.getItem() : Items.ARROW)); ItemArrow itemarrow = (ItemArrow) ((ItemArrow) (itemstack1.getItem() instanceof ItemArrow ? itemstack1.getItem() : Items.ARROW));
EntityArrow entityarrow = itemarrow.a(world, itemstack1, (EntityLiving) entityhuman); EntityArrow entityarrow = itemarrow.a(world, itemstack1, (EntityLiving) entityhuman);
@@ -0,0 +0,0 @@ public class ItemBow extends Item { @@ -0,0 +0,0 @@ public class ItemBow extends ItemProjectileWeapon {
entityarrow.setOnFire(100); entityarrow.setOnFire(100);
} }
// CraftBukkit start // CraftBukkit start
@ -39,17 +39,17 @@ index 6934114005..52bc68e6a6 100644
if (event.isCancelled()) { if (event.isCancelled()) {
event.getProjectile().remove(); event.getProjectile().remove();
return; return;
@@ -0,0 +0,0 @@ public class ItemBow extends Item { @@ -0,0 +0,0 @@ public class ItemBow extends ItemProjectileWeapon {
// CraftBukkit end itemstack.damage(1, entityhuman, (entityhuman1) -> {
entityhuman1.d(entityhuman.getRaisedHand());
itemstack.damage(1, entityhuman); });
- if (flag1 || entityhuman.abilities.canInstantlyBuild && (itemstack1.getItem() == Items.SPECTRAL_ARROW || itemstack1.getItem() == Items.TIPPED_ARROW)) { - if (flag1 || entityhuman.abilities.canInstantlyBuild && (itemstack1.getItem() == Items.SPECTRAL_ARROW || itemstack1.getItem() == Items.TIPPED_ARROW)) {
+ consumeArrow = event.getConsumeArrow(); // Paper + consumeArrow = event.getConsumeArrow(); // Paper
+ if (!consumeArrow || flag1 || (entityhuman.abilities.canInstantlyBuild && ((itemstack1.getItem() == Items.SPECTRAL_ARROW) || (itemstack1.getItem() == Items.TIPPED_ARROW)))) { // Paper - add !consumeArrow + if (!consumeArrow || flag1 || (entityhuman.abilities.canInstantlyBuild && ((itemstack1.getItem() == Items.SPECTRAL_ARROW) || (itemstack1.getItem() == Items.TIPPED_ARROW)))) { // Paper - add
entityarrow.fromPlayer = EntityArrow.PickupStatus.CREATIVE_ONLY; entityarrow.fromPlayer = EntityArrow.PickupStatus.CREATIVE_ONLY;
} }
@@ -0,0 +0,0 @@ public class ItemBow extends Item { @@ -0,0 +0,0 @@ public class ItemBow extends ItemProjectileWeapon {
} }
world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.i.nextFloat() * 0.4F + 1.2F) + f * 0.5F); world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (ItemBow.i.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
@ -58,25 +58,48 @@ index 6934114005..52bc68e6a6 100644
itemstack1.subtract(1); itemstack1.subtract(1);
if (itemstack1.isEmpty()) { if (itemstack1.isEmpty()) {
entityhuman.inventory.f(itemstack1); entityhuman.inventory.f(itemstack1);
diff --git a/src/main/java/net/minecraft/server/ItemCrossbow.java b/src/main/java/net/minecraft/server/ItemCrossbow.java
index 569e117b7..144c63c9a 100644
--- a/src/main/java/net/minecraft/server/ItemCrossbow.java
+++ b/src/main/java/net/minecraft/server/ItemCrossbow.java
@@ -0,0 +0,0 @@ public class ItemCrossbow extends ItemProjectileWeapon {
((IProjectile) object).shoot((double) vector3fa.a(), (double) vector3fa.b(), (double) vector3fa.c(), f1, f2);
}
// CraftBukkit start
- org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityliving, itemstack, (Entity) object, f);
+ org.bukkit.event.entity.EntityShootBowEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityShootBowEvent(entityliving, itemstack, itemstack1, (IProjectile) object, f); // Paper // TODO: consume??
if (event.isCancelled()) {
event.getProjectile().remove();
return;
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index c02619bb57..acc80d0684 100644 index 8d3dca2a9..4a16f2f53 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -0,0 +0,0 @@ import net.minecraft.server.GeneratorAccess;
import net.minecraft.server.IBlockData;
import net.minecraft.server.IChatBaseComponent;
import net.minecraft.server.IInventory;
+import net.minecraft.server.IProjectile;
import net.minecraft.server.ItemActionContext;
import net.minecraft.server.ItemStack;
import net.minecraft.server.Items;
@@ -0,0 +0,0 @@ public class CraftEventFactory { @@ -0,0 +0,0 @@ public class CraftEventFactory {
/** /**
* EntityShootBowEvent * EntityShootBowEvent
*/ */
- public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, ItemStack itemstack, EntityArrow entityArrow, float force) { - public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, ItemStack itemstack, Entity entityArrow, float force) {
+ public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, /*bow*/ItemStack itemstack, /*arrow*/ ItemStack arrowItem, EntityArrow entityArrow, float force) { // Paper + public static EntityShootBowEvent callEntityShootBowEvent(EntityLiving who, ItemStack itemstack, ItemStack arrowItem, IProjectile entityArrow, float force) { // paper
LivingEntity shooter = (LivingEntity) who.getBukkitEntity(); LivingEntity shooter = (LivingEntity) who.getBukkitEntity();
CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack); CraftItemStack itemInHand = CraftItemStack.asCraftMirror(itemstack);
Arrow arrow = (Arrow) entityArrow.getBukkitEntity(); - org.bukkit.entity.Entity arrow = entityArrow.getBukkitEntity();
@@ -0,0 +0,0 @@ public class CraftEventFactory { + org.bukkit.entity.Entity arrow = ((Entity) entityArrow).getBukkitEntity(); // Paper
if (itemInHand != null && (itemInHand.getType() == Material.AIR || itemInHand.getAmount() == 0)) {
itemInHand = null; itemInHand = null;
} }
- EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, arrow, force); - EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, arrow, force);
+ EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, CraftItemStack.asCraftMirror(arrowItem), arrow, force); // Paper + EntityShootBowEvent event = new EntityShootBowEvent(shooter, itemInHand, CraftItemStack.asCraftMirror(arrowItem), (Projectile) arrow, force); // Paper
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
return event; return event;

View File

@ -6,12 +6,12 @@ Subject: [PATCH] Expand Explosions API
Add Entity as a Source capability, and add more API choices, and on Location. Add Entity as a Source capability, and add more API choices, and on Location.
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 1cc42edae8..cfa35740b4 100644 index 3ed9d3f47..c8cbedb5c 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 implements World { @@ -0,0 +0,0 @@ public class CraftWorld implements World {
public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks) { public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks) {
return !world.createExplosion(null, x, y, z, power, setFire, breakBlocks).wasCanceled; return !world.createExplosion(null, x, y, z, power, setFire, breakBlocks ? Explosion.Effect.BREAK : Explosion.Effect.NONE).wasCanceled;
} }
+ // Paper start + // Paper start
+ public boolean createExplosion(Entity source, Location loc, float power, boolean setFire, boolean breakBlocks) { + public boolean createExplosion(Entity source, Location loc, float power, boolean setFire, boolean breakBlocks) {

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Fire EntityShootBowEvent for Illusioner
diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
index 08af4453fa..8b595979e7 100644 index 378267314..96ad67889 100644
--- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
+++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
@@ -0,0 +0,0 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -0,0 +0,0 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan
@ -27,5 +27,5 @@ index 08af4453fa..8b595979e7 100644
+ // Paper end + // Paper end
} }
protected EntityArrow v(float f) { class a extends EntityIllagerWizard.c {
-- --

View File

@ -21,7 +21,7 @@ check is essentially the same as this.getHandle() == other.getHandle()
However, replaced it too to make it clearer of intent. However, replaced it too to make it clearer of intent.
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 84a58c7dcd..a0e1a70d43 100644 index e0ae72bbc..65621f966 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -0,0 +0,0 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -0,0 +0,0 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {

View File

@ -6,29 +6,29 @@ Subject: [PATCH] Ignore Missing Recipes in RecipeBook to avoid data errors
This code was causing NPE's in saving player data, potentially related to reloads. This code was causing NPE's in saving player data, potentially related to reloads.
diff --git a/src/main/java/net/minecraft/server/RecipeBookServer.java b/src/main/java/net/minecraft/server/RecipeBookServer.java diff --git a/src/main/java/net/minecraft/server/RecipeBookServer.java b/src/main/java/net/minecraft/server/RecipeBookServer.java
index 5a21aed438..4d9f3d3695 100644 index 440e8f134..091c4abbd 100644
--- a/src/main/java/net/minecraft/server/RecipeBookServer.java --- a/src/main/java/net/minecraft/server/RecipeBookServer.java
+++ b/src/main/java/net/minecraft/server/RecipeBookServer.java +++ b/src/main/java/net/minecraft/server/RecipeBookServer.java
@@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook { @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook {
while (iterator.hasNext()) { while (iterator.hasNext()) {
MinecraftKey minecraftkey = (MinecraftKey) iterator.next(); MinecraftKey minecraftkey = (MinecraftKey) iterator.next();
+ // Paper start - ignore missing recipes + // Paper start - ignore missing recipes
+ IRecipe recipe = this.h.a(minecraftkey); + final Optional<? extends IRecipe<?>> recipe = this.l.a(minecraftkey);
+ if (recipe == null) continue; + if (!recipe.isPresent()) continue;
+ // Paper end + // Paper end
nbttaglist.add((NBTBase) (new NBTTagString(minecraftkey.toString())));
}
nbttaglist.add(new NBTTagString(minecraftkey.toString()));
}
@@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook { @@ -0,0 +0,0 @@ public class RecipeBookServer extends RecipeBook {
while (iterator1.hasNext()) { while (iterator1.hasNext()) {
MinecraftKey minecraftkey1 = (MinecraftKey) iterator1.next(); MinecraftKey minecraftkey1 = (MinecraftKey) iterator1.next();
+ // Paper start - ignore missing recipes + // Paper start - ignore missing recipes
+ IRecipe recipe = this.h.a(minecraftkey1); + final Optional<? extends IRecipe<?>> recipe = this.l.a(minecraftkey1);
+ if (recipe == null) continue; + if (!recipe.isPresent()) continue;
+ // Paper end + // Paper end
nbttaglist1.add((NBTBase) (new NBTTagString(minecraftkey1.toString())));
}
nbttaglist1.add(new NBTTagString(minecraftkey1.toString()));
}
-- --

View File

@ -6,36 +6,21 @@ Subject: [PATCH] Implement EntityKnockbackByEntityEvent
This event is called when an entity receives knockback by another entity. This event is called when an entity receives knockback by another entity.
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index deb50b84f7..164e4b412a 100644 index 8c6d53f44..d65933e9e 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java --- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
this.impulse = true; Vec3D vec3d1 = (new Vec3D(d0, 0.0D, d1)).d().a((double) f);
float f1 = MathHelper.sqrt(d0 * d0 + d1 * d1);
+ // Paper start - preserve old velocity this.setMot(vec3d.x / 2.0D - vec3d1.x, this.onGround ? Math.min(0.4D, vec3d.y / 2.0D + (double) f) : vec3d.y, vec3d.z / 2.0D - vec3d1.z);
+ double oldMotX = this.motX;
+ double oldMotY = this.motY;
+ double oldMotZ = this.motZ;
+ // Paper end
+ +
this.motX /= 2.0D;
this.motZ /= 2.0D;
this.motX -= d0 / (double) f1 * (double) f;
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
}
}
+ // Paper start - call EntityKnockbackByEntityEvent + // Paper start - call EntityKnockbackByEntityEvent
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(this.motX - oldMotX, this.motY - oldMotY, this.motZ - oldMotZ); + Vec3D currentMot = this.getMot();
+ org.bukkit.util.Vector delta = new org.bukkit.util.Vector(currentMot.x - vec3d.x, currentMot.y - vec3d.y, currentMot.z - vec3d.z);
+ // Restore old velocity to be able to access it in the event + // Restore old velocity to be able to access it in the event
+ this.motX = oldMotX; + this.setMot(vec3d);
+ this.motY = oldMotY;
+ this.motZ = oldMotZ;
+ if (entity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((LivingEntity) getBukkitEntity(), entity.getBukkitEntity(), f, delta).callEvent()) { + if (entity == null || new com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent((LivingEntity) getBukkitEntity(), entity.getBukkitEntity(), f, delta).callEvent()) {
+ this.motX += delta.getX(); + this.setMot(vec3d.x + delta.getX(), vec3d.y + delta.getY(), vec3d.z + delta.getZ());
+ this.motY += delta.getY();
+ this.motZ += delta.getZ();
+ } + }
+ // Paper end + // Paper end
} }

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Implement World.getEntity(UUID) API
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 cfa35740b4..609b911265 100644 index c8cbedb5c..f8870f37b 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 implements World { @@ -0,0 +0,0 @@ public class CraftWorld implements World {
@ -21,6 +21,6 @@ index cfa35740b4..609b911265 100644
+ // Paper end + // Paper end
+ +
public void save() { public void save() {
// Spigot start this.server.checkSaveState();
save(true); try {
-- --

View File

@ -6,34 +6,12 @@ Subject: [PATCH] InventoryCloseEvent Reason API
Allows you to determine why an inventory was closed, enabling plugin developers Allows you to determine why an inventory was closed, enabling plugin developers
to "confirm" things based on if it was player triggered close or not. to "confirm" things based on if it was player triggered close or not.
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index a6cacd7da9..c2f12f92b0 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
{
if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
{
- ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
}
}
}
@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess {
{
if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
{
- ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
}
}
}
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index d4618d644a..cc1bc01b16 100644 index 3031d73f5..f665dc0eb 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java --- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving { @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
this.dg(); this.dA();
super.tick(); super.tick();
if (!this.world.isClientSide && this.activeContainer != null && !this.activeContainer.canUse(this)) { if (!this.world.isClientSide && this.activeContainer != null && !this.activeContainer.canUse(this)) {
- this.closeInventory(); - this.closeInventory();
@ -42,7 +20,7 @@ index d4618d644a..cc1bc01b16 100644
} }
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving { @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
return this.getHealth() <= 0.0F || this.isSleeping(); return 20;
} }
+ // Paper start - unused code, but to keep signatures aligned + // Paper start - unused code, but to keep signatures aligned
@ -56,7 +34,7 @@ index d4618d644a..cc1bc01b16 100644
this.activeContainer = this.defaultContainer; this.activeContainer = this.defaultContainer;
} }
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
index e4e1d999e9..dc72538de6 100644 index 27ade8d7d..634c30d93 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java --- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
@ -69,26 +47,17 @@ index e4e1d999e9..dc72538de6 100644
} }
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
if (!event.getKeepInventory()) {
this.inventory.clear();
}
-
+ this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DEATH); // Paper
this.setSpectatorTarget(this); // Remove spectated target
// CraftBukkit end
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { // SPIGOT-943 - only call if they have an inventory open
this.a((new ChatMessage("container.spectatorCantOpen", new Object[0])).a(EnumChatFormat.RED), true);
} else {
if (this.activeContainer != this.defaultContainer) { if (this.activeContainer != this.defaultContainer) {
- this.closeInventory(); - this.closeInventory();
+ this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.OPEN_NEW); // Paper + this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.DEATH); // Paper
} }
if (iinventory instanceof ITileInventory) { String deathMessage = event.getDeathMessage();
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
} return OptionalInt.empty();
// CraftBukkit end } else {
if (this.activeContainer != this.defaultContainer) { if (this.activeContainer != this.defaultContainer) {
- this.closeInventory(); - this.closeInventory();
+ this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.OPEN_NEW); // Paper + this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.OPEN_NEW); // Paper
@ -97,7 +66,16 @@ index e4e1d999e9..dc72538de6 100644
this.nextContainerCounter(); this.nextContainerCounter();
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
} }
// CraftBukkit end
if (this.activeContainer != this.defaultContainer) {
- this.closeInventory();
+ this.closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.OPEN_NEW); // Paper
}
// this.nextContainerCounter(); // CraftBukkit - moved up
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
@Override
public void closeInventory() { public void closeInventory() {
- CraftEventFactory.handleInventoryCloseEvent(this); // CraftBukkit - CraftEventFactory.handleInventoryCloseEvent(this); // CraftBukkit
+ // Paper start + // Paper start
@ -110,10 +88,10 @@ index e4e1d999e9..dc72538de6 100644
this.m(); this.m();
} }
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 6dea9456a4..0b5dc66897 100644 index c9caf4423..fbdc755e8 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java --- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn {
PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.getWorldServer()); PlayerConnectionUtils.ensureMainThread(packetplayinclosewindow, this, this.player.getWorldServer());
if (this.player.isFrozen()) return; // CraftBukkit if (this.player.isFrozen()) return; // CraftBukkit
@ -123,7 +101,7 @@ index 6dea9456a4..0b5dc66897 100644
this.player.m(); this.player.m();
} }
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 96eff10ffa..ddaa73e83d 100644 index b855e7968..6d464a3dc 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java --- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -0,0 +0,0 @@ public abstract class PlayerList { @@ -0,0 +0,0 @@ public abstract class PlayerList {
@ -135,8 +113,30 @@ index 96eff10ffa..ddaa73e83d 100644
PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game"); PlayerQuitEvent playerQuitEvent = new PlayerQuitEvent(cserver.getPlayer(entityplayer), "\u00A7e" + entityplayer.getName() + " left the game");
cserver.getPluginManager().callEvent(playerQuitEvent); cserver.getPluginManager().callEvent(playerQuitEvent);
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index e400cc05d..79be8cfa3 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World {
{
if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
{
- ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
}
}
}
@@ -0,0 +0,0 @@ public class WorldServer extends World {
{
if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
{
- ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); // Paper
}
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index 9b19dce9bd..cb7697f80b 100644 index 6478d6126..356c503dd 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -0,0 +0,0 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@ -155,7 +155,7 @@ index 9b19dce9bd..cb7697f80b 100644
public boolean isBlocking() { public boolean isBlocking() {
return getHandle().isBlocking(); return getHandle().isBlocking();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 62235efde9..47426d8fda 100644 index 01e260024..6ceb02200 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@ -168,7 +168,7 @@ index 62235efde9..47426d8fda 100644
// Check if the fromWorld and toWorld are the same. // Check if the fromWorld and toWorld are the same.
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index acc80d0684..2cfe8afe13 100644 index 4a16f2f53..de081ca1c 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -0,0 +0,0 @@ public class CraftEventFactory { @@ -0,0 +0,0 @@ public class CraftEventFactory {

View File

@ -6,33 +6,33 @@ Subject: [PATCH] LivingEntity Hand Raised/Item Use API
How long an entity has raised hands to charge an attack or use an item How long an entity has raised hands to charge an attack or use an item
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 164e4b412a..bc1ab273bd 100644 index d65933e9e..58bfe8c1c 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java --- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
private float bI; private float bD;
private int bJ; private int jumpTicks;
private float bK; private float bF;
- protected ItemStack activeItem; - protected ItemStack activeItem;
+ public ItemStack activeItem; // Paper - public + public ItemStack activeItem; // Paper - public
protected int bu; protected int bo;
protected int bv; protected int bp;
private BlockPosition bL; private BlockPosition bG;
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
return this.activeItem; return this.activeItem;
} }
+ public int getItemUseRemainingTime() { return cX(); } // Paper - OBFHELPER + public int getItemUseRemainingTime() { return dm(); } // Paper - OBFHELPER
public int cX() { public int dm() {
return this.bu; return this.bo;
} }
+ public int getHandRaisedTime() { return cY(); } // Paper - OBFHELPER + public int getHandRaisedTime() { return dn(); } // Paper - OBFHELPER
public int cY() { public int dn() {
return this.isHandRaised() ? this.activeItem.k() - this.cX() : 0; return this.isHandRaised() ? this.activeItem.k() - this.dm() : 0;
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 8e65bfc78e..52834b6da3 100644 index 182145ccf..29b23e30f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {

View File

@ -5,12 +5,12 @@ Subject: [PATCH] Make shield blocking delay configurable
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 4727ac6eb5..47f8dfcc41 100644 index fe9415b1d..ce17447fa 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -0,0 +0,0 @@ public class PaperWorldConfig { @@ -0,0 +0,0 @@ public class PaperWorldConfig {
log("Villages can load chunks - Warning this can cause intense TPS loss. Strongly consider disabling this."); disableEnderpearlExploit = getBoolean("game-mechanics.disable-unloaded-chunk-enderpearl-exploit", disableEnderpearlExploit);
} log("Disable Unloaded Chunk Enderpearl Exploit: " + (disableEnderpearlExploit ? "enabled" : "disabled"));
} }
+ +
+ public int shieldBlockingDelay = 5; + public int shieldBlockingDelay = 5;
@ -19,23 +19,22 @@ index 4727ac6eb5..47f8dfcc41 100644
+ } + }
} }
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 02fcfc449c..deb50b84f7 100644 index 9ef605ba3..8c6d53f44 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java --- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
if (this.isHandRaised() && !this.activeItem.isEmpty()) { if (this.isHandRaised() && !this.activeItem.isEmpty()) {
Item item = this.activeItem.getItem(); Item item = this.activeItem.getItem();
- return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= 5; - return item.e_(this.activeItem) != EnumAnimation.BLOCK ? false : item.f_(this.activeItem) - this.bo >= 5;
+ return item.d(this.activeItem) != EnumAnimation.BLOCK ? false : item.c(this.activeItem) - this.bu >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay + return item.e_(this.activeItem) != EnumAnimation.BLOCK ? false : item.f_(this.activeItem) - this.bo >= getShieldBlockingDelay(); // Paper - shieldBlockingDelay
} else { } else {
return false; return false;
} }
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity { @@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
public boolean df() { public void d(EnumHand enumhand) {
return true; this.c(enumhand == EnumHand.MAIN_HAND ? EnumItemSlot.MAINHAND : EnumItemSlot.OFFHAND);
} }
+
+ // Paper start + // Paper start
+ public int shieldBlockingDelay = world.paperConfig.shieldBlockingDelay; + public int shieldBlockingDelay = world.paperConfig.shieldBlockingDelay;
+ +
@ -49,7 +48,7 @@ index 02fcfc449c..deb50b84f7 100644
+ // Paper end + // Paper end
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 2f96842bb9..8e65bfc78e 100644 index f95347df0..182145ccf 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -0,0 +0,0 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {

View File

@ -6,7 +6,7 @@ Subject: [PATCH] Optimize RegistryID.c()
This is a frequent hotspot for world loading/saving. This is a frequent hotspot for world loading/saving.
diff --git a/src/main/java/net/minecraft/server/RegistryID.java b/src/main/java/net/minecraft/server/RegistryID.java diff --git a/src/main/java/net/minecraft/server/RegistryID.java b/src/main/java/net/minecraft/server/RegistryID.java
index 5a5c464ea1..37641fa865 100644 index e15d28671..e8a48b9a4 100644
--- a/src/main/java/net/minecraft/server/RegistryID.java --- a/src/main/java/net/minecraft/server/RegistryID.java
+++ b/src/main/java/net/minecraft/server/RegistryID.java +++ b/src/main/java/net/minecraft/server/RegistryID.java
@@ -0,0 +0,0 @@ public class RegistryID<K> implements Registry<K> { @@ -0,0 +0,0 @@ public class RegistryID<K> implements Registry<K> {

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Option to prevent armor stands from doing entity lookups
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 8c4ff18868..6c4cb61dc5 100644 index 83e54cb90..f06bb3ae1 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -0,0 +0,0 @@ public class PaperWorldConfig { @@ -0,0 +0,0 @@ public class PaperWorldConfig {
@ -21,11 +21,11 @@ index 8c4ff18868..6c4cb61dc5 100644
private void maxEntityCollision() { private void maxEntityCollision() {
maxCollisionsPerEntity = getInt( "max-entity-collisions", this.spigotConfig.getInt("max-entity-collisions", 8) ); maxCollisionsPerEntity = getInt( "max-entity-collisions", this.spigotConfig.getInt("max-entity-collisions", 8) );
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index a5f4b9ad94..28fca165cd 100644 index f9f0a94e9..79ded224c 100644
--- a/src/main/java/net/minecraft/server/World.java --- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java
@@ -0,0 +0,0 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc @@ -0,0 +0,0 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
} // Spigot end
} }
+ // Paper start - Prevent armor stands from doing entity lookups + // Paper start - Prevent armor stands from doing entity lookups

View File

@ -5,14 +5,15 @@ Subject: [PATCH] PlayerElytraBoostEvent
diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java
index dbb422e9da..13938775ba 100644 index aea46ffae..9e86ef4ce 100644
--- a/src/main/java/net/minecraft/server/ItemFireworks.java --- a/src/main/java/net/minecraft/server/ItemFireworks.java
+++ b/src/main/java/net/minecraft/server/ItemFireworks.java +++ b/src/main/java/net/minecraft/server/ItemFireworks.java
@@ -0,0 +0,0 @@ public class ItemFireworks extends Item { @@ -0,0 +0,0 @@ public class ItemFireworks extends Item {
EntityFireworks entityfireworks = new EntityFireworks(world, itemstack, entityhuman); // Paper start
entityfireworks.spawningEntity = entityhuman.getUniqueID(); // Paper final EntityFireworks entityfireworks = new EntityFireworks(world, itemstack, entityhuman);
entityfireworks.spawningEntity = entityhuman.getUniqueID();
- world.addEntity(entityfireworks); - world.addEntity(entityfireworks);
- // Paper end
- if (!entityhuman.abilities.canInstantlyBuild) { - if (!entityhuman.abilities.canInstantlyBuild) {
- itemstack.subtract(1); - itemstack.subtract(1);
+ // Paper start + // Paper start
@ -23,8 +24,9 @@ index dbb422e9da..13938775ba 100644
+ } else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); + } else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
+ } else if (entityhuman instanceof EntityPlayer) { + } else if (entityhuman instanceof EntityPlayer) {
+ ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); + ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
}
+ // Paper end + // Paper end
} }
}
return new InteractionResultWrapper<>(EnumInteractionResult.SUCCESS, entityhuman.b(enumhand));
-- --

View File

@ -5,7 +5,7 @@ Subject: [PATCH] PlayerLaunchProjectileEvent
diff --git a/src/main/java/net/minecraft/server/ItemEgg.java b/src/main/java/net/minecraft/server/ItemEgg.java diff --git a/src/main/java/net/minecraft/server/ItemEgg.java b/src/main/java/net/minecraft/server/ItemEgg.java
index 18e8825c48..5f3926d830 100644 index 2bdb65bf8..f526af45f 100644
--- a/src/main/java/net/minecraft/server/ItemEgg.java --- a/src/main/java/net/minecraft/server/ItemEgg.java
+++ b/src/main/java/net/minecraft/server/ItemEgg.java +++ b/src/main/java/net/minecraft/server/ItemEgg.java
@@ -0,0 +0,0 @@ public class ItemEgg extends Item { @@ -0,0 +0,0 @@ public class ItemEgg extends Item {
@ -22,6 +22,7 @@ index 18e8825c48..5f3926d830 100644
if (!world.isClientSide) { if (!world.isClientSide) {
EntityEgg entityegg = new EntityEgg(world, entityhuman); EntityEgg entityegg = new EntityEgg(world, entityhuman);
entityegg.setItem(itemstack);
entityegg.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F); entityegg.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
- world.addEntity(entityegg); - world.addEntity(entityegg);
+ // Paper start + // Paper start
@ -45,12 +46,12 @@ index 18e8825c48..5f3926d830 100644
entityhuman.b(StatisticList.ITEM_USED.b(this)); entityhuman.b(StatisticList.ITEM_USED.b(this));
diff --git a/src/main/java/net/minecraft/server/ItemEnderPearl.java b/src/main/java/net/minecraft/server/ItemEnderPearl.java diff --git a/src/main/java/net/minecraft/server/ItemEnderPearl.java b/src/main/java/net/minecraft/server/ItemEnderPearl.java
index 3672996c2d..719210da15 100644 index eb5f62dec..e8e52d726 100644
--- a/src/main/java/net/minecraft/server/ItemEnderPearl.java --- a/src/main/java/net/minecraft/server/ItemEnderPearl.java
+++ b/src/main/java/net/minecraft/server/ItemEnderPearl.java +++ b/src/main/java/net/minecraft/server/ItemEnderPearl.java
@@ -0,0 +0,0 @@ public class ItemEnderPearl extends Item { @@ -0,0 +0,0 @@ public class ItemEnderPearl extends Item {
EntityEnderPearl entityenderpearl = new EntityEnderPearl(world, entityhuman);
entityenderpearl.setItem(itemstack);
entityenderpearl.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F); entityenderpearl.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
- if (!world.addEntity(entityenderpearl)) { - if (!world.addEntity(entityenderpearl)) {
+ // Paper start + // Paper start
@ -93,11 +94,11 @@ index 3672996c2d..719210da15 100644
entityhuman.b(StatisticList.ITEM_USED.b(this)); entityhuman.b(StatisticList.ITEM_USED.b(this));
return new InteractionResultWrapper<>(EnumInteractionResult.SUCCESS, itemstack); return new InteractionResultWrapper<>(EnumInteractionResult.SUCCESS, itemstack);
diff --git a/src/main/java/net/minecraft/server/ItemExpBottle.java b/src/main/java/net/minecraft/server/ItemExpBottle.java diff --git a/src/main/java/net/minecraft/server/ItemExpBottle.java b/src/main/java/net/minecraft/server/ItemExpBottle.java
index d26b42f710..23b06169e2 100644 index 35f842ede..eb626a6f0 100644
--- a/src/main/java/net/minecraft/server/ItemExpBottle.java --- a/src/main/java/net/minecraft/server/ItemExpBottle.java
+++ b/src/main/java/net/minecraft/server/ItemExpBottle.java +++ b/src/main/java/net/minecraft/server/ItemExpBottle.java
@@ -0,0 +0,0 @@ public class ItemExpBottle extends Item { @@ -0,0 +0,0 @@ public class ItemExpBottle extends Item {
@Override
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) { public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.b(enumhand); ItemStack itemstack = entityhuman.b(enumhand);
- -
@ -111,6 +112,7 @@ index d26b42f710..23b06169e2 100644
if (!world.isClientSide) { if (!world.isClientSide) {
EntityThrownExpBottle entitythrownexpbottle = new EntityThrownExpBottle(world, entityhuman); EntityThrownExpBottle entitythrownexpbottle = new EntityThrownExpBottle(world, entityhuman);
entitythrownexpbottle.setItem(itemstack);
entitythrownexpbottle.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.7F, 1.0F); entitythrownexpbottle.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.7F, 1.0F);
- world.addEntity(entitythrownexpbottle); - world.addEntity(entitythrownexpbottle);
+ // Paper start + // Paper start
@ -134,11 +136,11 @@ index d26b42f710..23b06169e2 100644
entityhuman.b(StatisticList.ITEM_USED.b(this)); entityhuman.b(StatisticList.ITEM_USED.b(this));
diff --git a/src/main/java/net/minecraft/server/ItemLingeringPotion.java b/src/main/java/net/minecraft/server/ItemLingeringPotion.java diff --git a/src/main/java/net/minecraft/server/ItemLingeringPotion.java b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
index a74c803e72..8d882b81bb 100644 index e3683bdae..f3ad1cd6d 100644
--- a/src/main/java/net/minecraft/server/ItemLingeringPotion.java --- a/src/main/java/net/minecraft/server/ItemLingeringPotion.java
+++ b/src/main/java/net/minecraft/server/ItemLingeringPotion.java +++ b/src/main/java/net/minecraft/server/ItemLingeringPotion.java
@@ -0,0 +0,0 @@ public class ItemLingeringPotion extends ItemPotion { @@ -0,0 +0,0 @@ public class ItemLingeringPotion extends ItemPotion {
@Override
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) { public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.b(enumhand); ItemStack itemstack = entityhuman.b(enumhand);
+ /* // Paper start + /* // Paper start
@ -147,14 +149,16 @@ index a74c803e72..8d882b81bb 100644
world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_LINGERING_POTION_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemLingeringPotion.i.nextFloat() * 0.4F + 0.8F)); world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_LINGERING_POTION_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (ItemLingeringPotion.i.nextFloat() * 0.4F + 0.8F));
+ */ // Paper end + */ // Paper end
if (!world.isClientSide) { if (!world.isClientSide) {
+
+ // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet + // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet
+ ItemStack itemstack1 = itemstack.cloneItemStack(); + ItemStack itemstack1 = itemstack.cloneItemStack();
+ if (!entityhuman.abilities.canInstantlyBuild) { + if (!entityhuman.abilities.canInstantlyBuild) {
+ itemstack1.setCount(1); + itemstack1.setCount(1);
+ } + }
+ // Paper end + // Paper end
EntityPotion entitypotion = new EntityPotion(world, entityhuman, itemstack1); EntityPotion entitypotion = new EntityPotion(world, entityhuman);
entitypotion.setItem(itemstack1);
entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F); entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F);
- world.addEntity(entitypotion); - world.addEntity(entitypotion);
+ // Paper start + // Paper start
@ -178,12 +182,12 @@ index a74c803e72..8d882b81bb 100644
entityhuman.b(StatisticList.ITEM_USED.b(this)); entityhuman.b(StatisticList.ITEM_USED.b(this));
diff --git a/src/main/java/net/minecraft/server/ItemSnowball.java b/src/main/java/net/minecraft/server/ItemSnowball.java diff --git a/src/main/java/net/minecraft/server/ItemSnowball.java b/src/main/java/net/minecraft/server/ItemSnowball.java
index d8879e0847..95194ccdc8 100644 index 624989dd7..c119785b7 100644
--- a/src/main/java/net/minecraft/server/ItemSnowball.java --- a/src/main/java/net/minecraft/server/ItemSnowball.java
+++ b/src/main/java/net/minecraft/server/ItemSnowball.java +++ b/src/main/java/net/minecraft/server/ItemSnowball.java
@@ -0,0 +0,0 @@ public class ItemSnowball extends Item { @@ -0,0 +0,0 @@ public class ItemSnowball extends Item {
EntitySnowball entitysnowball = new EntitySnowball(world, entityhuman);
entitysnowball.setItem(itemstack);
entitysnowball.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F); entitysnowball.a(entityhuman, entityhuman.pitch, entityhuman.yaw, 0.0F, 1.5F, 1.0F);
- if (world.addEntity(entitysnowball)) { - if (world.addEntity(entitysnowball)) {
- if (!entityhuman.abilities.canInstantlyBuild) { - if (!entityhuman.abilities.canInstantlyBuild) {
@ -211,11 +215,11 @@ index d8879e0847..95194ccdc8 100644
// CraftBukkit end // CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/ItemSplashPotion.java b/src/main/java/net/minecraft/server/ItemSplashPotion.java diff --git a/src/main/java/net/minecraft/server/ItemSplashPotion.java b/src/main/java/net/minecraft/server/ItemSplashPotion.java
index 87e2825a84..2bddefb802 100644 index e267e43fe..fa6d627db 100644
--- a/src/main/java/net/minecraft/server/ItemSplashPotion.java --- a/src/main/java/net/minecraft/server/ItemSplashPotion.java
+++ b/src/main/java/net/minecraft/server/ItemSplashPotion.java +++ b/src/main/java/net/minecraft/server/ItemSplashPotion.java
@@ -0,0 +0,0 @@ public class ItemSplashPotion extends ItemPotion { @@ -0,0 +0,0 @@ public class ItemSplashPotion extends ItemPotion {
@Override
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) { public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.b(enumhand); ItemStack itemstack = entityhuman.b(enumhand);
+ /* // Paper start + /* // Paper start
@ -224,14 +228,15 @@ index 87e2825a84..2bddefb802 100644
world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SPLASH_POTION_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (ItemSplashPotion.i.nextFloat() * 0.4F + 0.8F)); world.a((EntityHuman) null, entityhuman.locX, entityhuman.locY, entityhuman.locZ, SoundEffects.ENTITY_SPLASH_POTION_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (ItemSplashPotion.i.nextFloat() * 0.4F + 0.8F));
+ */ // Paper end + */ // Paper end
if (!world.isClientSide) { if (!world.isClientSide) {
EntityPotion entitypotion = new EntityPotion(world, entityhuman);
+ // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet + // Paper start - ensure stack count matches vanilla behavior without modifying original stack yet
+ ItemStack itemstack1 = itemstack.cloneItemStack(); + ItemStack itemstack1 = itemstack.cloneItemStack();
+ if (!entityhuman.abilities.canInstantlyBuild) { + if (!entityhuman.abilities.canInstantlyBuild) {
+ itemstack1.setCount(1); + itemstack1.setCount(1);
+ } + }
+ // Paper end + // Paper end
EntityPotion entitypotion = new EntityPotion(world, entityhuman, itemstack1);
entitypotion.setItem(itemstack1);
entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F); entitypotion.a(entityhuman, entityhuman.pitch, entityhuman.yaw, -20.0F, 0.5F, 1.0F);
- world.addEntity(entitypotion); - world.addEntity(entitypotion);
+ // Paper start + // Paper start

View File

@ -6,73 +6,35 @@ Subject: [PATCH] PlayerReadyArrowEvent
Called when a player is firing a bow and the server is choosing an arrow to use. Called when a player is firing a bow and the server is choosing an arrow to use.
Plugins can skip selection of certain arrows and control which is used. Plugins can skip selection of certain arrows and control which is used.
diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 52bc68e6a6..f8dbc3c400 100644 index 27bf83f37..3031d73f5 100644
--- a/src/main/java/net/minecraft/server/ItemBow.java --- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/ItemBow.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
package net.minecraft.server; return (EntitySize) EntityHuman.b.getOrDefault(entitypose, EntityHuman.bs);
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
+
public class ItemBow extends Item {
public ItemBow(Item.Info item_info) {
@@ -0,0 +0,0 @@ public class ItemBow extends Item {
// CraftBukkit end
} }
- private ItemStack a(EntityHuman entityhuman) {
- if (this.e_(entityhuman.b(EnumHand.OFF_HAND))) {
+ private ItemStack a(EntityHuman entityhuman, ItemStack bow) { // Paper
+ if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper
return entityhuman.b(EnumHand.OFF_HAND);
- } else if (this.e_(entityhuman.b(EnumHand.MAIN_HAND))) {
+ } else if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) {
return entityhuman.b(EnumHand.MAIN_HAND);
} else {
for (int i = 0; i < entityhuman.inventory.getSize(); ++i) {
ItemStack itemstack = entityhuman.inventory.getItem(i);
- if (this.e_(itemstack)) {
+ if (this.e_(entityhuman, bow, itemstack)) {
return itemstack;
}
}
@@ -0,0 +0,0 @@ public class ItemBow extends Item {
}
}
- protected boolean e_(ItemStack itemstack) {
- return itemstack.getItem() instanceof ItemArrow;
+ // Paper start + // Paper start
+ protected boolean e_(EntityHuman player, ItemStack bow, ItemStack itemstack) { + protected boolean tryReadyArrow(ItemStack bow, ItemStack itemstack) {
+ return itemstack.getItem() instanceof ItemArrow && ( + return !(this instanceof EntityPlayer) ||
+ !(player instanceof EntityPlayer) ||
+ new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent( + new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent(
+ ((EntityPlayer) player).getBukkitEntity(), + ((EntityPlayer) this).getBukkitEntity(),
+ CraftItemStack.asCraftMirror(bow), + org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(bow),
+ CraftItemStack.asCraftMirror(itemstack) + org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack)
+ ).callEvent()); + ).callEvent();
+ // Paper end + // Paper end
+ }
+
@Override
public ItemStack f(ItemStack itemstack) {
if (!(itemstack.getItem() instanceof ItemProjectileWeapon)) {
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
for (int i = 0; i < this.inventory.getSize(); ++i) {
ItemStack itemstack2 = this.inventory.getItem(i);
- if (predicate.test(itemstack2)) {
+ if (predicate.test(itemstack2) && tryReadyArrow(itemstack, itemstack2)) { // Paper
return itemstack2;
}
} }
public void a(ItemStack itemstack, World world, EntityLiving entityliving, int i) {
if (entityliving instanceof EntityHuman) {
EntityHuman entityhuman = (EntityHuman) entityliving;
boolean flag = entityhuman.abilities.canInstantlyBuild || EnchantmentManager.getEnchantmentLevel(Enchantments.ARROW_INFINITE, itemstack) > 0;
- ItemStack itemstack1 = this.a(entityhuman);
+ ItemStack itemstack1 = this.a(entityhuman, itemstack); // Paper
if (!itemstack1.isEmpty() || flag) {
if (itemstack1.isEmpty()) {
@@ -0,0 +0,0 @@ public class ItemBow extends Item {
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.b(enumhand);
- boolean flag = !this.a(entityhuman).isEmpty();
+ boolean flag = !this.a(entityhuman, itemstack).isEmpty(); // Paper
if (!entityhuman.abilities.canInstantlyBuild && !flag) {
return flag ? new InteractionResultWrapper<>(EnumInteractionResult.PASS, itemstack) : new InteractionResultWrapper<>(EnumInteractionResult.FAIL, itemstack);
-- --

View File

@ -5,15 +5,15 @@ Subject: [PATCH] Print Error details when failing to save player data
diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java
index d5e21cc33c..577ba1b5f9 100644 index e60e10c57..350ac42d6 100644
--- a/src/main/java/net/minecraft/server/WorldNBTStorage.java --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java
+++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java
@@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData { @@ -0,0 +0,0 @@ public class WorldNBTStorage implements IPlayerFileData {
file.renameTo(file1); file.renameTo(file1);
} catch (Exception exception) { } catch (Exception exception) {
- WorldNBTStorage.b.warn("Failed to save player data for {}", entityhuman.getDisplayName().getString()); - WorldNBTStorage.LOGGER.warn("Failed to save player data for {}", entityhuman.getDisplayName().getString());
+ WorldNBTStorage.b.error("Failed to save player data for {}", entityhuman.getName(), exception); // Paper + WorldNBTStorage.LOGGER.error("Failed to save player data for {}", entityhuman.getName(), exception); // Paper
} }
} }

View File

@ -1,49 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 10 Jun 2018 20:04:42 -0400
Subject: [PATCH] Properly remove entities on dimension teleport
To teleport an entity between dimensions, the server makes a copy
and puts the copy in the new location, and marks the old one dead.
If this method got called for the same world in the same tick,
the entity would not have been removed from the UUID map, and the
world readd would fail.
This can be triggered even with a plugin if the entity is teleported
twice in the same tick, from world A to B, then back from B to A.
The re-add to A will fail to add the entity to the world. It will
actually be there, but it will not be visible on the client until
the server is restarted to re-try the add to world process again.
This bug was unlikely to be seen by many due to the double teleport
requirement, but plugins (such as my own) use this method to
trigger a "reload" of the entity on the client.
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 92a15ba947..debab1a715 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
}
// CraftBukkit end */
- this.world.kill(this);
+ this.world.removeEntity(this); // Paper - Fully remove entity, can't have dupes in the UUID map
this.dead = false;
this.world.methodProfiler.enter("reposition");
/* CraftBukkit start - Handled in calculateTarget
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index e4730352d3..c08ee62e84 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
}
protected void c(Entity entity) {
+ if (!this.entitiesByUUID.containsKey(entity.getUniqueID()) && !entity.valid) return; // Paper - Already removed, dont fire twice - this looks like it can happen even without our changes
super.c(entity);
this.entitiesById.d(entity.getId());
this.entitiesByUUID.remove(entity.getUniqueID());
--

View File

@ -8,7 +8,7 @@ and to perform an attack.
diff --git a/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java diff --git a/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java
new file mode 100644 new file mode 100644
index 0000000000..696660b089 index 000000000..696660b08
--- /dev/null --- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java +++ b/src/main/java/com/destroystokyo/paper/entity/CraftRangedEntity.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -32,7 +32,7 @@ index 0000000000..696660b089
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/IRangedEntity.java b/src/main/java/net/minecraft/server/IRangedEntity.java diff --git a/src/main/java/net/minecraft/server/IRangedEntity.java b/src/main/java/net/minecraft/server/IRangedEntity.java
index 4fd69850fd..b763bd11dd 100644 index b4178ce1e..9b79ac77d 100644
--- a/src/main/java/net/minecraft/server/IRangedEntity.java --- a/src/main/java/net/minecraft/server/IRangedEntity.java
+++ b/src/main/java/net/minecraft/server/IRangedEntity.java +++ b/src/main/java/net/minecraft/server/IRangedEntity.java
@@ -0,0 +0,0 @@ package net.minecraft.server; @@ -0,0 +0,0 @@ package net.minecraft.server;
@ -41,12 +41,12 @@ index 4fd69850fd..b763bd11dd 100644
- void a(EntityLiving entityliving, float f); - void a(EntityLiving entityliving, float f);
+ void a(EntityLiving entityliving, float f); default void rangedAttack(EntityLiving entityliving, float f) { a(entityliving, f); } // Paper - OBFHELPER + void a(EntityLiving entityliving, float f); default void rangedAttack(EntityLiving entityliving, float f) { a(entityliving, f); } // Paper - OBFHELPER
+
- void s(boolean flag); + // - see EntitySkeletonAbstract melee goal
+ void s(boolean flag); default void setChargingAttack(boolean flag) { s(flag); } // Paper - OBFHELPER + void q(boolean flag); default void setChargingAttack(boolean charging) { q(charging); }; // Paper
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
index 2ec1af8be4..f31d3eed3a 100644 index 2ec1af8be..f31d3eed3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -64,7 +64,7 @@ index 2ec1af8be4..f31d3eed3a 100644
public CraftIllusioner(CraftServer server, EntityIllagerIllusioner entity) { public CraftIllusioner(CraftServer server, EntityIllagerIllusioner entity) {
super(server, entity); super(server, entity);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
index 23ab78da15..3f94c5a920 100644 index 23ab78da1..3f94c5a92 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -84,7 +84,7 @@ index 23ab78da15..3f94c5a920 100644
public CraftLlama(CraftServer server, EntityLlama entity) { public CraftLlama(CraftServer server, EntityLlama entity) {
super(server, entity); super(server, entity);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
index 4ed89615fd..4fa5e84ea4 100644 index 9fef81cc2..1dc9b4412 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -92,7 +92,6 @@ index 4ed89615fd..4fa5e84ea4 100644
+import com.destroystokyo.paper.entity.CraftRangedEntity; +import com.destroystokyo.paper.entity.CraftRangedEntity;
import net.minecraft.server.EntitySkeletonAbstract; import net.minecraft.server.EntitySkeletonAbstract;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Skeleton; import org.bukkit.entity.Skeleton;
@ -103,7 +102,7 @@ index 4ed89615fd..4fa5e84ea4 100644
public CraftSkeleton(CraftServer server, EntitySkeletonAbstract entity) { public CraftSkeleton(CraftServer server, EntitySkeletonAbstract entity) {
super(server, entity); super(server, entity);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
index 0349f0a574..2e3d8fcdfa 100644 index 0349f0a57..2e3d8fcdf 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -121,25 +120,25 @@ index 0349f0a574..2e3d8fcdfa 100644
super(server, entity); super(server, entity);
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
index c08833cb7a..f25998eb6d 100644 index fb14179c3..49e0f2206 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
package org.bukkit.craftbukkit.entity; package org.bukkit.craftbukkit.entity;
+import com.destroystokyo.paper.entity.CraftRangedEntity; +import com.destroystokyo.paper.entity.CraftRangedEntity; // Paper
import net.minecraft.server.EntityWitch; import net.minecraft.server.EntityWitch;
import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.entity.Witch;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Witch;
-public class CraftWitch extends CraftMonster implements Witch { -public class CraftWitch extends CraftRaider implements Witch {
+public class CraftWitch extends CraftMonster implements Witch, CraftRangedEntity<EntityWitch> { // Paper +public class CraftWitch extends CraftRaider implements Witch, CraftRangedEntity<EntityWitch> { // Paper
public CraftWitch(CraftServer server, EntityWitch entity) { public CraftWitch(CraftServer server, EntityWitch entity) {
super(server, entity); super(server, entity);
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
index 3df0fcb9b6..a1d04ff284 100644 index 3df0fcb9b..a1d04ff28 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@

View File

@ -8,17 +8,17 @@ These are a critical sign that somethin went wrong, and you've lost some data...
We should kind of know about these things you know. We should kind of know about these things you know.
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index c08ee62e84..85a30652c4 100644 index af62ab182..0b4990a00 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java --- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler { @@ -0,0 +0,0 @@ public class WorldServer extends World {
this.g.remove(entity1); if (entity1 == null) {
} else {
if (!(entity instanceof EntityHuman)) {
- // WorldServer.a.warn("Keeping entity {} that already exists with UUID {}", EntityTypes.getName(entity1.P()), uuid.toString()); // CraftBukkit
+ WorldServer.a.error("Keeping entity {} that already exists with UUID {} - " + entity1, EntityTypes.getName(entity1.P()), uuid.toString()); // CraftBukkit // Paper
+ WorldServer.a.error("Deleting duplicate entity {}", entity); // Paper
return false; return false;
} else {
- // WorldServer.LOGGER.warn("Keeping entity {} that already exists with UUID {}", EntityTypes.getName(entity1.getEntityType()), entity.getUniqueID().toString()); // CraftBukkit
+ WorldServer.LOGGER.error("Keeping entity {} that already exists with UUID {}", EntityTypes.getName(entity1.getEntityType()), entity.getUniqueID().toString()); // CraftBukkit // paper
+ WorldServer.LOGGER.error("Deleting duplicate entity {}", entity); // CraftBukkit // paper
return true;
}
} }
-- --

View File

@ -16,10 +16,10 @@ Refresh the player inventory when PlayerInteractEntityEvent is
cancelled to avoid this problem. cancelled to avoid this problem.
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 0b5dc66897..6d04c5733c 100644 index fbdc755e8..a0f6addef 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java --- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable { @@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn {
} }
if (event.isCancelled()) { if (event.isCancelled()) {

View File

@ -21,7 +21,7 @@ This is based upon conclusions drawn from inspecting the assenmbly generated byt
They had 'callq' (invoke) instead of 'mov' (get from memory) instructions. They had 'callq' (invoke) instead of 'mov' (get from memory) instructions.
diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java
index 4c7793f86d..cc17a414f5 100644 index 7cb46d7a9..e96428bb2 100644
--- a/src/main/java/net/minecraft/server/BaseBlockPosition.java --- a/src/main/java/net/minecraft/server/BaseBlockPosition.java
+++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java +++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java
@@ -0,0 +0,0 @@ import javax.annotation.concurrent.Immutable; @@ -0,0 +0,0 @@ import javax.annotation.concurrent.Immutable;
@ -79,40 +79,32 @@ index 4c7793f86d..cc17a414f5 100644
public BaseBlockPosition d(BaseBlockPosition baseblockposition) { public BaseBlockPosition d(BaseBlockPosition baseblockposition) {
return new BaseBlockPosition(this.getY() * baseblockposition.getZ() - this.getZ() * baseblockposition.getY(), this.getZ() * baseblockposition.getX() - this.getX() * baseblockposition.getZ(), this.getX() * baseblockposition.getY() - this.getY() * baseblockposition.getX()); return new BaseBlockPosition(this.getY() * baseblockposition.getZ() - this.getZ() * baseblockposition.getY(), this.getZ() * baseblockposition.getX() - this.getX() * baseblockposition.getZ(), this.getX() * baseblockposition.getY() - this.getY() * baseblockposition.getX());
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
index 80e13dfb2e..20cf9255ba 100644
--- a/src/main/java/net/minecraft/server/BlockPosition.java
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition {
if (this.g == null) {
this.g = new BlockPosition.MutableBlockPosition(i, j, k);
return this.g;
- } else if (this.g.b == l && this.g.c == i1 && this.g.d == j1) {
+ } else if (this.g.x == l && this.g.y == i1 && this.g.z == j1) {
return (BlockPosition.MutableBlockPosition) this.endOfData();
} else {
- if (this.g.b < l) {
- ++this.g.b;
- } else if (this.g.c < i1) {
- this.g.b = i; // Paper - decompile fix Readd line removed by the decompiler
- ++this.g.c;
- } else if (this.g.d < j1) {
- this.g.b = i; // Paper - decompile fix Readd line removed by the decompiler
- this.g.c = j; // Paper - decompile fix Readd line removed by the decompiler
- ++this.g.d;
+ if (this.g.x < l) {
+ ++this.g.x;
+ } else if (this.g.y < i1) {
+ this.g.x = i; // Paper - decompile fix Readd line removed by the decompiler
+ ++this.g.y;
+ } else if (this.g.z < j1) {
+ this.g.x = i; // Paper - decompile fix Readd line removed by the decompiler
+ this.g.y = j; // Paper - decompile fix Readd line removed by the decompiler
+ ++this.g.z;
} }
return this.g; public boolean a(BaseBlockPosition baseblockposition, double d0) {
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { - return this.distanceSquared((double) baseblockposition.a, (double) baseblockposition.b, (double) baseblockposition.c, false) < d0 * d0;
+ return this.distanceSquared((double) baseblockposition.x, (double) baseblockposition.y, (double) baseblockposition.z, false) < d0 * d0; // Paper
}
public boolean a(IPosition iposition, double d0) {
@@ -0,0 +0,0 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
}
public int n(BaseBlockPosition baseblockposition) {
- float f = (float) Math.abs(baseblockposition.getX() - this.a);
- float f1 = (float) Math.abs(baseblockposition.getY() - this.b);
- float f2 = (float) Math.abs(baseblockposition.getZ() - this.c);
+ float f = (float) Math.abs(baseblockposition.getX() - this.x); // Paper
+ float f1 = (float) Math.abs(baseblockposition.getY() - this.y); // Paper
+ float f2 = (float) Math.abs(baseblockposition.getZ() - this.z); // Paper
return (int) (f + f1 + f2);
}
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
index 64700b97c..a5e5a4eba 100644
--- a/src/main/java/net/minecraft/server/BlockPosition.java
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
} }
public static class MutableBlockPosition extends BlockPosition { public static class MutableBlockPosition extends BlockPosition {
@ -127,7 +119,7 @@ index 80e13dfb2e..20cf9255ba 100644
@Override @Override
public boolean isValidLocation() { public boolean isValidLocation() {
return b >= -30000000 && d >= -30000000 && b < 30000000 && d < 30000000 && c >= 0 && c < 256; return b >= -30000000 && d >= -30000000 && b < 30000000 && d < 30000000 && c >= 0 && c < 256;
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { @@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
public boolean isInvalidYLocation() { public boolean isInvalidYLocation() {
return c < 0 || c >= 256; return c < 0 || c >= 256;
} }
@ -135,7 +127,7 @@ index 80e13dfb2e..20cf9255ba 100644
// Paper end // Paper end
public MutableBlockPosition() { public MutableBlockPosition() {
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { @@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
} }
public MutableBlockPosition(int i, int j, int k) { public MutableBlockPosition(int i, int j, int k) {
@ -150,26 +142,27 @@ index 80e13dfb2e..20cf9255ba 100644
+ // Paper end + // Paper end
} }
public BlockPosition a(double d0, double d1, double d2) { public MutableBlockPosition(double d0, double d1, double d2) {
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { @@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
return super.a(enumblockrotation).h(); return super.a(enumblockrotation).immutableCopy();
} }
+
+ /* + /*
+ // Paper start - use parent getters + // Paper start - use parent getters
@Override
public int getX() { public int getX() {
return this.b; return this.b;
} @@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { @Override
public int getZ() { public int getZ() {
return this.d; return this.d;
- } - }
+ }*/ + }*/
+ // Paper end + // Paper end
public BlockPosition.MutableBlockPosition setValues(int i, int j, int k) { return c(i, j, k);} // Paper - OBFHELPER public BlockPosition.MutableBlockPosition setValues(int i, int j, int k) { return d(i, j, k);} // Paper - OBFHELPER
public BlockPosition.MutableBlockPosition c(int i, int j, int k) { public BlockPosition.MutableBlockPosition d(int i, int j, int k) {
- this.b = i; - this.b = i;
- this.c = j; - this.c = j;
- this.d = k; - this.d = k;
@ -181,17 +174,17 @@ index 80e13dfb2e..20cf9255ba 100644
return this; return this;
} }
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition { @@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition implements MinecraftSeriali
} }
public BlockPosition.MutableBlockPosition c(EnumDirection enumdirection, int i) { public BlockPosition.MutableBlockPosition c(EnumDirection enumdirection, int i) {
- return this.c(this.b + enumdirection.getAdjacentX() * i, this.c + enumdirection.getAdjacentY() * i, this.d + enumdirection.getAdjacentZ() * i); - return this.d(this.b + enumdirection.getAdjacentX() * i, this.c + enumdirection.getAdjacentY() * i, this.d + enumdirection.getAdjacentZ() * i);
+ return this.c(x + enumdirection.getAdjacentX() * i, y + enumdirection.getAdjacentY() * i, z + enumdirection.getAdjacentZ() * i); // Paper - use xyz + return this.d(this.x + enumdirection.getAdjacentX() * i, this.y + enumdirection.getAdjacentY() * i, this.z + enumdirection.getAdjacentZ() * i);
} }
public BlockPosition.MutableBlockPosition d(int i, int j, int k) { public BlockPosition.MutableBlockPosition e(int i, int j, int k) {
- return this.c(this.b + i, this.c + j, this.d + k); - return this.d(this.b + i, this.c + j, this.d + k);
+ return this.c(x + i, y + j, z + k); // Paper - use xyz + return this.d(this.x + i, this.y + j, this.z + k);
} }
public void p(int i) { public void p(int i) {
@ -199,5 +192,5 @@ index 80e13dfb2e..20cf9255ba 100644
+ this.y = i; // Paper change to y + this.y = i; // Paper change to y
} }
public BlockPosition toBlockPosition() { return h(); } // Paper - OBFHELPER @Override
-- --

View File

@ -5,7 +5,7 @@ Subject: [PATCH] Use asynchronous Log4j 2 loggers
diff --git a/pom.xml b/pom.xml diff --git a/pom.xml b/pom.xml
index 3ad5af3463..9cbd4880f7 100644 index 16799b4cd..8c18a0c09 100644
--- a/pom.xml --- a/pom.xml
+++ b/pom.xml +++ b/pom.xml
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@
@ -24,7 +24,7 @@ index 3ad5af3463..9cbd4880f7 100644
<artifactId>asm</artifactId> <artifactId>asm</artifactId>
diff --git a/src/main/resources/log4j2.component.properties b/src/main/resources/log4j2.component.properties diff --git a/src/main/resources/log4j2.component.properties b/src/main/resources/log4j2.component.properties
new file mode 100644 new file mode 100644
index 0000000000..ee7c90784c index 000000000..ee7c90784
--- /dev/null --- /dev/null
+++ b/src/main/resources/log4j2.component.properties +++ b/src/main/resources/log4j2.component.properties
@@ -0,0 +1 @@ @@ -0,0 +1 @@

View File

@ -6,7 +6,7 @@ Subject: [PATCH] Vex#getSummoner API
Get's the NPC that summoned this Vex Get's the NPC that summoned this Vex
diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java
index 388d341262..c3864b869e 100644 index ecfc057a1..83e022c91 100644
--- a/src/main/java/net/minecraft/server/EntityVex.java --- a/src/main/java/net/minecraft/server/EntityVex.java
+++ b/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java
@@ -0,0 +0,0 @@ public class EntityVex extends EntityMonster { @@ -0,0 +0,0 @@ public class EntityVex extends EntityMonster {
@ -15,10 +15,10 @@ index 388d341262..c3864b869e 100644
+ public EntityInsentient getOwner() { return l(); } // Paper - OBFHELPER + public EntityInsentient getOwner() { return l(); } // Paper - OBFHELPER
public EntityInsentient l() { public EntityInsentient l() {
return this.b; return this.c;
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
index 0f01fc591d..c96a5df80a 100644 index 737a37b6f..169c951ec 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
@@ -0,0 +0,0 @@ @@ -0,0 +0,0 @@

View File

@ -6,7 +6,7 @@ Subject: [PATCH] add more information to Entity.toString()
UUID, ticks lived, valid, dead UUID, ticks lived, valid, dead
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index debab1a715..69a058d830 100644 index c28b498a2..c7d19d957 100644
--- a/src/main/java/net/minecraft/server/Entity.java --- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java
@@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -0,0 +0,0 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke