2020-05-02 06:03:47 +08:00
|
|
|
From d7e09e8c54402420bebf78ed377f8edb9b66c4e3 Mon Sep 17 00:00:00 2001
|
2018-07-04 15:55:24 +08:00
|
|
|
From: Aikar <aikar@aikar.co>
|
|
|
|
Date: Wed, 4 Jul 2018 01:40:13 -0400
|
|
|
|
Subject: [PATCH] Add MinecraftKey Information to Objects
|
|
|
|
|
|
|
|
Stores the reference to the objects respective MinecraftKey
|
|
|
|
|
2018-07-15 09:53:17 +08:00
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
2020-04-03 05:07:06 +08:00
|
|
|
index 41c79650b1..b839769cea 100644
|
2018-07-15 09:53:17 +08:00
|
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
|
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
2019-08-15 10:47:38 +08:00
|
|
|
@@ -178,7 +178,7 @@ public class PaperCommand extends Command {
|
2020-03-18 20:38:24 +08:00
|
|
|
|
|
|
|
Collection<Entity> entities = world.entitiesById.values();
|
|
|
|
entities.forEach(e -> {
|
2018-07-15 09:53:17 +08:00
|
|
|
- MinecraftKey key = new MinecraftKey(""); // TODO: update in next patch
|
|
|
|
+ MinecraftKey key = e.getMinecraftKey();
|
|
|
|
|
|
|
|
MutablePair<Integer, Map<ChunkCoordIntPair, Integer>> info = list.computeIfAbsent(key, k -> MutablePair.of(0, Maps.newHashMap()));
|
|
|
|
ChunkCoordIntPair chunk = new ChunkCoordIntPair(e.getChunkX(), e.getChunkZ());
|
2018-07-04 15:55:24 +08:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
2020-05-02 06:03:47 +08:00
|
|
|
index f4863852b0..38227d85f4 100644
|
2018-07-04 15:55:24 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/Entity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/Entity.java
|
2019-05-06 10:58:04 +08:00
|
|
|
@@ -49,7 +49,7 @@ import org.bukkit.event.player.PlayerTeleportEvent;
|
2018-07-04 15:55:24 +08:00
|
|
|
import org.bukkit.plugin.PluginManager;
|
|
|
|
// CraftBukkit end
|
|
|
|
|
2018-07-15 09:53:17 +08:00
|
|
|
-public abstract class Entity implements INamableTileEntity, ICommandListener {
|
|
|
|
+public abstract class Entity implements INamableTileEntity, ICommandListener, KeyedObject { // Paper
|
2018-07-04 15:55:24 +08:00
|
|
|
|
|
|
|
// CraftBukkit start
|
|
|
|
private static final int CURRENT_LEVEL = 2;
|
2020-02-22 01:52:20 +08:00
|
|
|
@@ -1707,12 +1707,31 @@ public abstract class Entity implements INamableTileEntity, ICommandListener {
|
2018-07-04 15:55:24 +08:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start
|
2018-07-27 12:44:53 +08:00
|
|
|
+ private MinecraftKey entityKey;
|
|
|
|
+ private String entityKeyString;
|
2018-07-04 15:55:24 +08:00
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public MinecraftKey getMinecraftKey() {
|
2018-07-27 12:44:53 +08:00
|
|
|
+ if (entityKey == null) {
|
|
|
|
+ this.entityKey = EntityTypes.getName(this.getEntityType());
|
|
|
|
+ this.entityKeyString = this.entityKey != null ? this.entityKey.toString() : null;
|
|
|
|
+ }
|
2018-07-04 15:55:24 +08:00
|
|
|
+ return entityKey;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getMinecraftKeyString() {
|
2018-07-27 12:44:53 +08:00
|
|
|
+ getMinecraftKey(); // Try to load if it doesn't exists. see: https://github.com/PaperMC/Paper/issues/1280
|
2018-07-04 15:55:24 +08:00
|
|
|
+ return entityKeyString;
|
|
|
|
+ }
|
|
|
|
@Nullable
|
|
|
|
public final String getSaveID() {
|
2019-04-24 09:00:24 +08:00
|
|
|
EntityTypes<?> entitytypes = this.getEntityType();
|
|
|
|
MinecraftKey minecraftkey = EntityTypes.getName(entitytypes);
|
|
|
|
|
2018-07-15 09:53:17 +08:00
|
|
|
- return entitytypes.a() && minecraftkey != null ? minecraftkey.toString() : null;
|
2019-04-24 09:00:24 +08:00
|
|
|
+ return entitytypes != null && entitytypes.isPersistable() ? getMinecraftKeyString() : null;
|
2018-07-04 15:55:24 +08:00
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
|
|
|
|
protected abstract void a(NBTTagCompound nbttagcompound);
|
2018-07-15 09:53:17 +08:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java
|
2020-05-02 06:03:47 +08:00
|
|
|
index 4328273b1f..8427ee2ee8 100644
|
2018-07-15 09:53:17 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityTypes.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityTypes.java
|
2019-12-11 08:56:03 +08:00
|
|
|
@@ -237,6 +237,7 @@ public class EntityTypes<T extends Entity> {
|
2018-07-15 09:53:17 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+ public boolean isPersistable() { return a(); } // Paper - OBFHELPER
|
|
|
|
public boolean a() {
|
2019-12-11 08:56:03 +08:00
|
|
|
return this.bc;
|
2018-07-15 09:53:17 +08:00
|
|
|
}
|
2018-07-04 15:55:24 +08:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/KeyedObject.java b/src/main/java/net/minecraft/server/KeyedObject.java
|
|
|
|
new file mode 100644
|
2020-04-03 05:07:06 +08:00
|
|
|
index 0000000000..743142d030
|
2018-07-04 15:55:24 +08:00
|
|
|
--- /dev/null
|
|
|
|
+++ b/src/main/java/net/minecraft/server/KeyedObject.java
|
2018-07-27 12:44:53 +08:00
|
|
|
@@ -0,0 +1,9 @@
|
2018-07-04 15:55:24 +08:00
|
|
|
+package net.minecraft.server;
|
|
|
|
+
|
|
|
|
+public interface KeyedObject {
|
|
|
|
+ MinecraftKey getMinecraftKey();
|
|
|
|
+ default String getMinecraftKeyString() {
|
2018-07-27 12:44:53 +08:00
|
|
|
+ MinecraftKey key = getMinecraftKey();
|
|
|
|
+ return key != null ? key.toString() : null;
|
2018-07-04 15:55:24 +08:00
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
|
2020-04-03 05:07:06 +08:00
|
|
|
index 40752f7617..9071bb7ece 100644
|
2018-07-04 15:55:24 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
2019-05-14 10:20:58 +08:00
|
|
|
@@ -11,7 +11,7 @@ import org.bukkit.inventory.InventoryHolder;
|
2019-05-06 10:58:04 +08:00
|
|
|
// CraftBukkit end
|
2018-07-04 15:55:24 +08:00
|
|
|
import org.spigotmc.CustomTimingsHandler; // Spigot
|
|
|
|
|
|
|
|
-public abstract class TileEntity {
|
2018-07-27 12:44:53 +08:00
|
|
|
+public abstract class TileEntity implements KeyedObject { // Paper
|
2018-07-04 15:55:24 +08:00
|
|
|
|
|
|
|
public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getTileEntityTimings(this); // Spigot
|
2019-05-06 10:58:04 +08:00
|
|
|
// CraftBukkit start - data containers
|
2019-05-14 10:20:58 +08:00
|
|
|
@@ -19,7 +19,7 @@ public abstract class TileEntity {
|
2019-07-05 10:13:38 +08:00
|
|
|
public CraftPersistentDataContainer persistentDataContainer;
|
2019-05-06 10:58:04 +08:00
|
|
|
// CraftBukkit end
|
2019-04-25 14:53:51 +08:00
|
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
2019-12-11 08:56:03 +08:00
|
|
|
- private final TileEntityTypes<?> tileType;
|
|
|
|
+ private final TileEntityTypes<?> tileType; public TileEntityTypes getTileEntityType() { return tileType; } // Paper - OBFHELPER
|
2019-04-24 09:00:24 +08:00
|
|
|
@Nullable
|
2018-07-15 09:53:17 +08:00
|
|
|
protected World world;
|
|
|
|
protected BlockPosition position;
|
2019-05-14 10:20:58 +08:00
|
|
|
@@ -33,6 +33,26 @@ public abstract class TileEntity {
|
2019-12-11 08:56:03 +08:00
|
|
|
this.tileType = tileentitytypes;
|
2018-07-04 15:55:24 +08:00
|
|
|
}
|
|
|
|
|
2018-07-27 12:44:53 +08:00
|
|
|
+ // Paper start
|
|
|
|
+ private String tileEntityKeyString = null;
|
|
|
|
+ private MinecraftKey tileEntityKey = null;
|
2018-07-04 15:55:24 +08:00
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public MinecraftKey getMinecraftKey() {
|
2018-07-27 12:44:53 +08:00
|
|
|
+ if (tileEntityKey == null) {
|
|
|
|
+ tileEntityKey = TileEntityTypes.a(this.getTileEntityType());
|
|
|
|
+ tileEntityKeyString = tileEntityKey != null ? tileEntityKey.toString() : null;
|
|
|
|
+ }
|
2018-07-04 15:55:24 +08:00
|
|
|
+ return tileEntityKey;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getMinecraftKeyString() {
|
2018-07-27 12:44:53 +08:00
|
|
|
+ getMinecraftKey(); // Try to load if it doesn't exists.
|
2018-07-04 15:55:24 +08:00
|
|
|
+ return tileEntityKeyString;
|
|
|
|
+ }
|
2018-07-15 09:53:17 +08:00
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
@Nullable
|
|
|
|
public World getWorld() {
|
|
|
|
return this.world;
|
2018-07-04 15:55:24 +08:00
|
|
|
--
|
2020-05-02 06:03:47 +08:00
|
|
|
2.26.2
|
2018-07-04 15:55:24 +08:00
|
|
|
|