SPIGOT-5730: Modernise inventory patch

This commit is contained in:
md_5 2020-05-09 19:41:03 +10:00
parent a2bdb11986
commit 2f5d615f15
3 changed files with 29 additions and 41 deletions

View file

@ -1,4 +1,4 @@
From f35bfe34666037b7b0ad8abc54bcf1eb0bc237b3 Mon Sep 17 00:00:00 2001
From 4da48f3cafb99cd8b4a36d3c5823cf64e6546e97 Mon Sep 17 00:00:00 2001
From: md_5 <md_5@live.com.au>
Date: Thu, 27 Jun 2013 17:26:09 +1000
Subject: [PATCH] Properly Close Inventories
@ -6,24 +6,18 @@ Subject: [PATCH] Properly Close Inventories
Properly close inventories when unloading and switching worlds.
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index c3a6848ef..568f879a6 100644
index c3a6848ef..cbbef96e5 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -1021,6 +1021,21 @@ public class WorldServer extends World {
@@ -1021,6 +1021,15 @@ public class WorldServer extends World {
}
public void unloadChunk(Chunk chunk) {
+ // Spigot Start
+ for (TileEntity tileentity : chunk.getTileEntities().values())
+ {
+ if ( tileentity instanceof IInventory )
+ {
+ for ( org.bukkit.entity.HumanEntity h : Lists.<org.bukkit.entity.HumanEntity>newArrayList((List<org.bukkit.entity.HumanEntity>) ( (IInventory) tileentity ).getViewers() ) )
+ {
+ if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
+ {
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ }
+ for (TileEntity tileentity : chunk.getTileEntities().values()) {
+ if (tileentity instanceof IInventory) {
+ for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((IInventory) tileentity).getViewers())) {
+ h.closeInventory();
+ }
+ }
+ }
@ -31,25 +25,20 @@ index c3a6848ef..568f879a6 100644
this.tileEntityListUnload.addAll(chunk.getTileEntities().values());
EntitySlice[] aentityslice = chunk.getEntitySlices();
int i = aentityslice.length;
@@ -1031,6 +1046,18 @@ public class WorldServer extends World {
@@ -1047,6 +1056,13 @@ public class WorldServer extends World {
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
+ // Spigot Start
+ if ( entity instanceof IInventory )
+ {
+ for ( org.bukkit.entity.HumanEntity h : Lists.<org.bukkit.entity.HumanEntity>newArrayList( (List<org.bukkit.entity.HumanEntity>) ( (IInventory) entity ).getViewers() ) )
+ {
+ if ( h instanceof org.bukkit.craftbukkit.entity.CraftHumanEntity )
+ {
+ ( (org.bukkit.craftbukkit.entity.CraftHumanEntity) h).getHandle().closeInventory();
+ }
+ }
+ }
+ // Spigot End
if (!(entity instanceof EntityPlayer)) {
if (this.tickingEntities) {
public void unregisterEntity(Entity entity) {
org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot
+ // Spigot Start
+ if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder) {
+ for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((org.bukkit.inventory.InventoryHolder) entity.getBukkitEntity()).getInventory().getViewers())) {
+ h.closeInventory();
+ }
+ }
+ // Spigot End
if (entity instanceof EntityEnderDragon) {
EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eo();
int i = aentitycomplexpart.length;
--
2.25.1

View file

@ -1,14 +1,14 @@
From 68ab8cb1f8886170ad95e4c60cca35b5f27a4c4b Mon Sep 17 00:00:00 2001
From 66ddf582423c2bbec53c1bb2539848dadb84b544 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Fri, 8 Aug 2014 19:57:03 +1000
Subject: [PATCH] Plug WorldMap Memory Leak
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 568f879a6..1c72b5423 100644
index cbbef96e5..47888e1ee 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -1074,6 +1074,30 @@ public class WorldServer extends World {
@@ -1056,6 +1056,29 @@ public class WorldServer extends World {
public void unregisterEntity(Entity entity) {
org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot
@ -35,10 +35,9 @@ index 568f879a6..1c72b5423 100644
+ } );
+ }
+ // Spigot end
+
if (entity instanceof EntityEnderDragon) {
EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eo();
int i = aentitycomplexpart.length;
// Spigot Start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder) {
for (org.bukkit.entity.HumanEntity h : Lists.newArrayList(((org.bukkit.inventory.InventoryHolder) entity.getBukkitEntity()).getInventory().getViewers())) {
--
2.25.1

View file

@ -1,4 +1,4 @@
From 4c23ca5d6c1a3118beb5d3ea6e9d856396dde214 Mon Sep 17 00:00:00 2001
From 2e965163ce26df9168c222e10f878c5ef62c9b0d Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Fri, 20 Feb 2015 21:33:36 +1100
Subject: [PATCH] Use Standard List for EntitySlices.
@ -96,10 +96,10 @@ index 8a8abe1bb..5feb9e517 100644
return chunk.getTileEntities().size();
}).orElse(0));
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 1c72b5423..d5014abc9 100644
index 47888e1ee..545ec5a2d 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -1037,11 +1037,11 @@ public class WorldServer extends World {
@@ -1031,11 +1031,11 @@ public class WorldServer extends World {
}
// Spigot End
this.tileEntityListUnload.addAll(chunk.getTileEntities().values());