Skip to content

Commit

Permalink
FastUtil Chunk handling
Browse files Browse the repository at this point in the history
    This required updating the Java base Compatibility to 8 - due to the use of a diamond operator.
    New branch as this is known to cause issues with mods compiled to run on Java 7 and lower.
  • Loading branch information
Terminal-Access committed May 9, 2020
1 parent 723ca5e commit 20c9793
Show file tree
Hide file tree
Showing 8 changed files with 312 additions and 334 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ else {
version = "${mcVersion}-${forgeVersion}-${nextRevisionNumber}-${nextBuildNumber}"

launch4j {
jreMinVersion = '1.6.0'
jreMinVersion = '1.8.0'
}

configurations {
Expand Down Expand Up @@ -213,6 +213,7 @@ dependencies {
libraries 'co.aikar:minecraft-timings:1.0.4'
libraries 'net.openhft:affinity:3.0.1'
libraries 'com.koloboke:koloboke-impl-jdk8:1.0.0'
libraries 'it.unimi.dsi:fastutil:8.2.2'
compile 'org.projectlombok:lombok:1.16.18'
}

Expand Down
68 changes: 34 additions & 34 deletions patches/net/minecraft/network/NetHandlerPlayServer.java.patch
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,8 @@
+
+ trigger = !trigger;
+ if(trigger)
+ this.server.getPluginManager().callEvent(event);
+
+ this.server.getPluginManager().callEvent(event);
+
+ // If the event is cancelled we move the player back to their old location.
+ if (event.isCancelled())
+ {
Expand Down Expand Up @@ -724,35 +724,35 @@
+ }
+ else if (true)
+ {
+ String[] bits = s.split(" ");
+
+ HashSet<String> possibilities = new HashSet<String>(); // No duplicates allowed
+ for (String str: bits)
+ {
+ if (str.length() <= 17 && str.length() >= 4)
+ {
+ if(str.charAt(0) != '@')
+ continue;
+ possibilities.add(str.substring(1));
+ String[] bits = s.split(" ");
+
+ HashSet<String> possibilities = new HashSet<String>(); // No duplicates allowed
+ for (String str: bits)
+ {
+ if (str.length() <= 17 && str.length() >= 4)
+ {
+ if(str.charAt(0) != '@')
+ continue;
+ possibilities.add(str.substring(1));

- this.chatSpamThresholdCount += 20;
+ }
+ }
+
+ for (Object o : MinecraftServer.getServer().getConfigurationManager().playerEntityList)
+ {
+ if (! (o instanceof EntityPlayerMP))
+ {
+ continue;
+ }
+ EntityPlayerMP ep = (EntityPlayerMP)o;
+ if (possibilities.contains(ep.getCommandSenderName()))
+ {
+ ep.worldObj.playSoundAtEntity(ep, "random.orb", 4.0F, 4.0F);
+ }
+
+ }
+
+ }
+ }
+
+ for (Object o : MinecraftServer.getServer().getConfigurationManager().playerEntityList)
+ {
+ if (! (o instanceof EntityPlayerMP))
+ {
+ continue;
+ }
+ EntityPlayerMP ep = (EntityPlayerMP)o;
+ if (possibilities.contains(ep.getCommandSenderName()))
+ {
+ ep.worldObj.playSoundAtEntity(ep, "random.orb", 4.0F, 4.0F);
+ }
+
+ }
+
+ this.chat(s, true);
+ // CraftBukkit end - the below is for reference. :)
+ }
Expand Down Expand Up @@ -939,10 +939,10 @@
+
+ if (net.minecraftforge.cauldron.configuration.CauldronConfig.instance.noFallbackAlias.getValue())
+ {
+ int ind = p_147361_1_.indexOf(':');
+ int spc = p_147361_1_.indexOf(' ');
+ if (ind != -1 && ( ind < spc || spc == -1))
+ p_147361_1_ = "/" + p_147361_1_.substring(ind);
+ int ind = p_147361_1_.indexOf(':');
+ int spc = p_147361_1_.indexOf(' ');
+ if (ind != -1 && ( ind < spc || spc == -1))
+ p_147361_1_ = "/" + p_147361_1_.substring(ind);
+ }
+
+ PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(player, p_147361_1_, new LazyPlayerSet());
Expand Down Expand Up @@ -1212,7 +1212,7 @@
+ else
+ // not coming from end
+ {
+ this.playerEntity = this.serverController.getConfigurationManager().respawnPlayer(this.playerEntity, 0, false, null, isDead);
+ this.playerEntity = this.serverController.getConfigurationManager().respawnPlayer(this.playerEntity, 0, false, null, isDead);
+ }
+ // Cauldron end
+ }
Expand Down
2 changes: 1 addition & 1 deletion patches/net/minecraft/world/World.java.patch
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,7 @@
+ }
+ }
+ ChunkProviderServer cps = (ChunkProviderServer) this.chunkProvider;
+ return cps.loadedChunkHashMap_KC.rawThermos().bulkCheck(st);
+ return cps.loadedChunkHashMap_KC.rawThermosMap().bulkCheck(st);
+ }
+ }
+ else
Expand Down
24 changes: 12 additions & 12 deletions patches/net/minecraft/world/gen/ChunkProviderServer.java.patch
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
public boolean chunkExists(int p_73149_1_, int p_73149_2_)
{
- return this.loadedChunkHashMap.containsItem(ChunkCoordIntPair.chunkXZ2Int(p_73149_1_, p_73149_2_));
+ return this.loadedChunkHashMap_KC.rawThermos().get(p_73149_1_, p_73149_2_) != null; //Thermos Replacement
+ return this.loadedChunkHashMap_KC.rawThermosMap().get(p_73149_1_, p_73149_2_) != null; //Thermos Replacement
}

- public List func_152380_a()
Expand All @@ -112,7 +112,7 @@
public void unloadChunksIfNotNearSpawn(int p_73241_1_, int p_73241_2_)
{
+ // PaperSpigot start - Asynchronous lighting updates
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermos().get(p_73241_1_, p_73241_2_); //Thermos replacement
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermosMap().get(p_73241_1_, p_73241_2_); //Thermos replacement
+ // Thermos don't light modded chunks
+ boolean modFlag = false;
+ try { if (chunk.worldObj.isModded == null) chunk.worldObj.isModded = false; modFlag = chunk.worldObj.isModded;} catch(Exception e){}
Expand All @@ -133,7 +133,7 @@
{
- this.chunksToUnload.add(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(p_73241_1_, p_73241_2_)));
+ this.chunksToUnload.add(p_73241_1_, p_73241_2_);
+ Chunk c = (this.loadedChunkHashMap_KC.rawThermos().get(p_73241_1_, p_73241_2_)); //Thermos replacement
+ Chunk c = (this.loadedChunkHashMap_KC.rawThermosMap().get(p_73241_1_, p_73241_2_)); //Thermos replacement
+
+ if (c != null)
+ {
Expand All @@ -149,7 +149,7 @@
- this.chunksToUnload.add(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(p_73241_1_, p_73241_2_)));
+ // CraftBukkit start
+ this.chunksToUnload.add(p_73241_1_, p_73241_2_);
+ Chunk c = (this.loadedChunkHashMap_KC.rawThermos().get(p_73241_1_, p_73241_2_)); //KCauldron replacement
+ Chunk c = (this.loadedChunkHashMap_KC.rawThermosMap().get(p_73241_1_, p_73241_2_)); //KCauldron replacement
+
+ if (c != null)
+ {
Expand All @@ -175,7 +175,7 @@
- this.unloadChunksIfNotNearSpawn(chunk.xPosition, chunk.zPosition);
- }
+ public Chunk getChunkIfLoaded(int x, int z) {
+ return this.loadedChunkHashMap_KC.rawThermos().get(x,z); //Thermos replacement
+ return this.loadedChunkHashMap_KC.rawThermosMap().get(x,z); //Thermos replacement
}

public Chunk loadChunk(int p_73158_1_, int p_73158_2_)
Expand All @@ -187,7 +187,7 @@
- this.chunksToUnload.remove(Long.valueOf(k));
- Chunk chunk = (Chunk)this.loadedChunkHashMap.getValueByKey(k);
+ this.chunksToUnload.remove(par1, par2);
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermos().get(par1,par2); //Thermos replacement
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermosMap().get(par1,par2); //Thermos replacement
+ boolean newChunk = false;
AnvilChunkLoader loader = null;

Expand All @@ -209,7 +209,7 @@
- this.chunksToUnload.remove(Long.valueOf(k));
- Chunk chunk = (Chunk)this.loadedChunkHashMap.getValueByKey(k);
+ this.chunksToUnload.remove(p_73158_1_, p_73158_2_);
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermos().get(p_73158_1_, p_73158_2_); //Thermos replacement
+ Chunk chunk = this.loadedChunkHashMap_KC.rawThermosMap().get(p_73158_1_, p_73158_2_); //Thermos replacement
+ boolean newChunk = false; // CraftBukkit

if (chunk == null)
Expand Down Expand Up @@ -293,7 +293,7 @@
- return chunk == null ? (!this.worldObj.findingSpawnPoint && !this.loadChunkOnProvideRequest ? this.defaultEmptyChunk : this.loadChunk(p_73154_1_, p_73154_2_)) : chunk;
+
+ // CraftBukkit start
+ Chunk chunk = (Chunk) this.loadedChunkHashMap_KC.rawThermos().get(p_73154_1_, p_73154_2_);
+ Chunk chunk = (Chunk) this.loadedChunkHashMap_KC.rawThermosMap().get(p_73154_1_, p_73154_2_);
+ chunk = chunk == null ? (shouldLoadChunk() ? this.loadChunk(p_73154_1_, p_73154_2_) : this.defaultEmptyChunk) : chunk; // Cauldron handle forge server tick events and load the chunk within 5 seconds of the world being loaded (for chunk loaders)
+
+ if (chunk == this.defaultEmptyChunk)
Expand Down Expand Up @@ -527,7 +527,7 @@
- this.chunksToUnload.remove(olong);
- this.loadedChunkHashMap.remove(olong.longValue());
+ ForgeChunkManager.putDormantChunk(chunkcoordinates, chunk);
+ if(this.loadedChunkHashMap_KC.rawThermos().size() == 0 && ForgeChunkManager.getPersistentChunksFor(this.worldObj).size() == 0 && !DimensionManager.shouldLoadSpawn(this.worldObj.provider.dimensionId)){
+ if(this.loadedChunkHashMap_KC.rawThermosMap().size() == 0 && ForgeChunkManager.getPersistentChunksFor(this.worldObj).size() == 0 && !DimensionManager.shouldLoadSpawn(this.worldObj.provider.dimensionId)){
+ DimensionManager.unloadWorld(this.worldObj.provider.dimensionId);
+ return currentChunkProvider.unloadQueuedChunks();
+ }
Expand All @@ -544,7 +544,7 @@
public String makeString()
{
- return "ServerChunkCache: " + this.loadedChunkHashMap.getNumHashElements() + " Drop: " + this.chunksToUnload.size();
+ return "ServerChunkCache: " + this.loadedChunkHashMap_KC.rawThermos().size() + " Drop: " + this.chunksToUnload.size(); // Cauldron
+ return "ServerChunkCache: " + this.loadedChunkHashMap_KC.rawThermosMap().size() + " Drop: " + this.chunksToUnload.size(); // Cauldron
}

public List getPossibleCreatures(EnumCreatureType p_73155_1_, int p_73155_2_, int p_73155_3_, int p_73155_4_)
Expand All @@ -553,7 +553,7 @@
public int getLoadedChunkCount()
{
- return this.loadedChunkHashMap.getNumHashElements();
+ return this.loadedChunkHashMap_KC.rawThermos().size(); // Cauldron
+ return this.loadedChunkHashMap_KC.rawThermosMap().size(); // Cauldron
}

public void recreateStructures(int p_82695_1_, int p_82695_2_) {}
Expand All @@ -569,7 +569,7 @@
+
+ public long lastAccessed(int x, int z)
+ {
+ Chunk c = this.loadedChunkHashMap_KC.rawThermos().get(x,z);
+ Chunk c = this.loadedChunkHashMap_KC.rawThermosMap().get(x,z);
+ if(c == null)return 0;
+ else return c.lastAccessedTick;
+ }
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/org/bukkit/craftbukkit/CraftWorld.java
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,8 @@ public boolean loadChunk(int x, int z, boolean generate) {

world.theChunkProviderServer.chunksToUnload.remove(x, z);
//net.minecraft.world.chunk.Chunk chunk = world.theChunkProviderServer.loadedChunkHashMap_TH.get(LongHash.toLong(x, z));
net.minecraft.world.chunk.Chunk chunk = world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermos().get(x,z); //Thermos replacement for line above
//net.minecraft.world.chunk.Chunk chunk = world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermos().get(x,z); //Thermos replacement for line above
net.minecraft.world.chunk.Chunk chunk = world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermosMap().get(x,z); //Thermos Updated replacement for line above

if (chunk == null) {
world.timings.syncChunkLoadTimer.startTiming(); // Spigot
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/spigotmc/WatchdogThread.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void run()
{
log.log(Level.SEVERE, " Dimension:" + world.provider.dimensionId);
log.log(Level.SEVERE,
" Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermos().size() + " Active Chunks: " + world.activeChunkSet.size()
" Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermosMap().size() + " Active Chunks: " + world.activeChunkSet.size()
+ " Entities: " + world.loadedEntityList.size() + " Tile Entities: " + world.loadedTileEntityList.size());
log.log(Level.SEVERE, " Entities Last Tick: " + world.entitiesTicked);
log.log(Level.SEVERE, " Tiles Last Tick: " + world.tilesTicked);
Expand Down Expand Up @@ -153,7 +153,7 @@ else if (lastTick != 0 && System.currentTimeMillis() > lastTick + warningTime)
for (net.minecraft.world.WorldServer world : MinecraftServer.getServer().worlds)
{
log.log(Level.WARNING, " Dimension:" + world.provider.dimensionId);
log.log(Level.WARNING, " Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermos().size() +
log.log(Level.WARNING, " Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.rawThermosMap().size() +
" Active Chunks: " + world.activeChunkSet.size() +
" Entities: " + world.loadedEntityList.size() +
" Tile Entities: " + world.loadedTileEntityList.size());
Expand Down
Loading

0 comments on commit 20c9793

Please sign in to comment.