diff --git a/build.gradle b/build.gradle index bd90706..83af930 100644 --- a/build.gradle +++ b/build.gradle @@ -126,7 +126,9 @@ compile 'org.yaml:snakeyaml:1.16' compile 'com.lmax:disruptor:3.2.1' compile 'org.apache.commons:commons-dbcp2:2.1.1' + compile 'net.openhft:koloboke-api-jdk8:0.6.8' + runtime 'net.openhft:koloboke-impl-jdk8:0.6.8' runtime 'mysql:mysql-connector-java:5.1.31' testCompile "org.codehaus.groovy:groovy-all:2.3.0" diff --git a/src/main/java/net/minecraft/client/multiplayer/WorldClient.java b/src/main/java/net/minecraft/client/multiplayer/WorldClient.java index 8fc5a5d..f82c6ad 100644 --- a/src/main/java/net/minecraft/client/multiplayer/WorldClient.java +++ b/src/main/java/net/minecraft/client/multiplayer/WorldClient.java @@ -2,8 +2,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.iterator.TIntIterator; -import gnu.trove.set.hash.TIntHashSet; import java.util.HashSet; import java.util.Iterator; @@ -41,6 +39,9 @@ import net.minecraft.world.storage.SaveHandlerMP; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.WorldEvent; +import net.openhft.koloboke.collect.IntCursor; +import net.openhft.koloboke.collect.set.hash.HashIntSet; +import net.openhft.koloboke.collect.set.hash.HashIntSets; @SideOnly(Side.CLIENT) public class WorldClient extends World @@ -51,7 +52,7 @@ private Set entityList = new HashSet(); private Set entitySpawnQueue = new HashSet(); private final Minecraft mc = Minecraft.getMinecraft(); - private final TIntHashSet previousActiveChunkSet = new TIntHashSet(512); + private final HashIntSet previousActiveChunkSet = HashIntSets.newMutableSet(); private static final String __OBFID = "CL_00000882"; public WorldClient(NetHandlerPlayClient p_i45063_1_, WorldSettings p_i45063_2_, int p_i45063_3_, EnumDifficulty p_i45063_4_, Profiler p_i45063_5_) @@ -117,9 +118,9 @@ } int i = 0; - for (TIntIterator iter = activeChunkSet.keySet().iterator(); iter.hasNext();) + for (IntCursor iter = activeChunkSet.keySet().cursor(); iter.moveNext();) { - int chunkCoord = iter.next(); + int chunkCoord = iter.elem(); if (!this.previousActiveChunkSet.contains(chunkCoord)) { diff --git a/src/main/java/net/minecraft/world/World.java b/src/main/java/net/minecraft/world/World.java index 12be97f..c0dc9e0 100644 --- a/src/main/java/net/minecraft/world/World.java +++ b/src/main/java/net/minecraft/world/World.java @@ -2,8 +2,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.map.TIntByteMap; -import gnu.trove.map.hash.TIntByteHashMap; import java.util.ArrayList; import java.util.Calendar; @@ -88,6 +86,8 @@ import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.world.WorldEvent; +import net.openhft.koloboke.collect.map.IntByteMap; +import net.openhft.koloboke.collect.map.hash.HashIntByteMaps; import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; import net.minecraft.entity.EnumCreatureType; @@ -134,7 +134,7 @@ private final Calendar theCalendar = Calendar.getInstance(); protected Scoreboard worldScoreboard = new Scoreboard(); public boolean isRemote; - protected TIntByteMap activeChunkSet = new TIntByteHashMap(512, 0.5F, 0, Byte.MAX_VALUE);//XXX + protected IntByteMap activeChunkSet = HashIntByteMaps.getDefaultFactory().withDefaultValue(Byte.MAX_VALUE).withDefaultExpectedSize(1024).newUpdatableMap(); private int ambientTickCountdown; protected boolean spawnHostileMobs; protected boolean spawnPeacefulMobs; @@ -4209,11 +4209,16 @@ return activeChunkSet.size(); } - public TIntByteMap getActiveChunkSet() + public IntByteMap getActiveChunkSet() { return activeChunkSet; } + public boolean isChunkActive(int cx, int cz) + { + return activeChunkSet.containsKey(ChunkHash.chunkToKey(cx, cz)); + } + protected boolean isChunkLoaderEnabled() { return false; diff --git a/src/main/java/net/minecraft/world/WorldServer.java b/src/main/java/net/minecraft/world/WorldServer.java index 3c3d272..7faee61 100644 --- a/src/main/java/net/minecraft/world/WorldServer.java +++ b/src/main/java/net/minecraft/world/WorldServer.java @@ -5,9 +5,6 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.iterator.TIntByteIterator; -import gnu.trove.set.TIntSet; -import gnu.trove.set.hash.TIntHashSet; import java.io.File; import java.util.ArrayList; @@ -70,6 +67,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.world.WorldEvent; +import net.openhft.koloboke.collect.map.IntByteCursor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -325,9 +323,8 @@ int i = 0; int j = 0; - for (TIntByteIterator iter = activeChunkSet.iterator(); iter.hasNext();) + for (IntByteCursor iter = activeChunkSet.cursor(); iter.moveNext();) { - iter.advance(); int chunkCoord = iter.key(); int chunkX = ChunkHash.keyToX(chunkCoord); int chunkZ = ChunkHash.keyToZ(chunkCoord); diff --git a/src/main/java/net/minecraft/world/chunk/Chunk.java b/src/main/java/net/minecraft/world/chunk/Chunk.java index 23043ce..aebdd8c 100644 --- a/src/main/java/net/minecraft/world/chunk/Chunk.java +++ b/src/main/java/net/minecraft/world/chunk/Chunk.java @@ -2,11 +2,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.iterator.TByteIterator; -import gnu.trove.map.TShortObjectMap; -import gnu.trove.map.hash.TShortObjectHashMap; -import gnu.trove.set.TByteSet; -import gnu.trove.set.hash.TByteHashSet; import java.util.ArrayList; import java.util.Arrays; @@ -46,6 +41,11 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityEvent; import net.minecraftforge.event.world.ChunkEvent; +import net.openhft.koloboke.collect.ByteCursor; +import net.openhft.koloboke.collect.map.ShortObjMap; +import net.openhft.koloboke.collect.map.hash.HashShortObjMaps; +import net.openhft.koloboke.collect.set.ByteSet; +import net.openhft.koloboke.collect.set.hash.HashByteSets; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -328,9 +328,9 @@ // for (int i = 0; i < 16; ++i) { // for (int j = 0; j < 16; ++j) - for(TByteIterator it = updateLightCoords.iterator(); it.hasNext();) + for(ByteCursor it = updateLightCoords.cursor(); it.moveNext();) { - int coord = it.next() & 0xFF; + int coord = it.elem() & 0xFF; int i = coord & 0xF; int j = coord >> 4; // if (this.updateSkylightColumns[i + j * 16]) @@ -1542,8 +1542,8 @@ /* ======================================== ULTRAMINE START =====================================*/ - private final TShortObjectMap fastTileEntityMap = new TShortObjectHashMap(); - private final TByteSet updateLightCoords = new TByteHashSet(); + private final ShortObjMap fastTileEntityMap = HashShortObjMaps.newMutableMap(); + private final ByteSet updateLightCoords = HashByteSets.newMutableSet(); private Set pendingUpdatesSet; private TreeSet pendingUpdatesQueue; diff --git a/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java b/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java index c3000f9..e0fd6a0 100644 --- a/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/world/gen/ChunkProviderServer.java @@ -1,12 +1,5 @@ package net.minecraft.world.gen; -import gnu.trove.iterator.TIntIterator; -import gnu.trove.iterator.TIntObjectIterator; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gnu.trove.set.TIntSet; -import gnu.trove.set.hash.TIntHashSet; - import java.io.IOException; import java.util.AbstractList; import java.util.ArrayList; @@ -42,6 +35,10 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.chunkio.ChunkIOExecutor; import net.minecraftforge.event.world.ChunkDataEvent; +import net.openhft.koloboke.collect.IntCursor; +import net.openhft.koloboke.collect.map.IntObjCursor; +import net.openhft.koloboke.collect.set.IntSet; +import net.openhft.koloboke.collect.set.hash.HashIntSets; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -55,7 +52,7 @@ public class ChunkProviderServer implements IChunkProvider { private static final Logger logger = LogManager.getLogger(); - public TIntSet chunksToUnload = new TIntHashSet(); + public IntSet chunksToUnload = HashIntSets.newMutableSet(); private Chunk defaultEmptyChunk; public IChunkProvider currentChunkProvider; public IChunkLoader currentChunkLoader; @@ -390,9 +387,9 @@ Set persistentChunks = worldObj.getPersistentChunks().keySet(); int savequeueSize = ((AnvilChunkLoader)currentChunkLoader).getSaveQueueSize(); - for(TIntIterator it = chunksToUnload.iterator(); it.hasNext() && savequeueSize < MAX_SAVE_QUEUE_SIZE;) + for(IntCursor it = chunksToUnload.cursor(); it.moveNext() && savequeueSize < MAX_SAVE_QUEUE_SIZE;) { - int hash = it.next(); + int hash = it.elem(); Chunk chunk = loadedChunkHashMap.get(hash); if(chunk != null) { @@ -461,7 +458,7 @@ private static final boolean isServer = FMLCommonHandler.instance().getSide().isServer(); private static final boolean debugSyncLoad = Boolean.parseBoolean(System.getProperty("ultramine.debug.chunksyncload")); - private final TIntSet possibleSaves = new TIntHashSet(); + private final IntSet possibleSaves = HashIntSets.newMutableSet(); private int lastFullSaveTick; private boolean preventSaving; private boolean isWorldUnloaded; @@ -569,9 +566,8 @@ if(tick - lastFullSaveTick >= FULL_SAVE_INTERVAL) { - for(TIntObjectIterator it = loadedChunkHashMap.iterator(); it.hasNext();) + for(IntObjCursor it = loadedChunkHashMap.iterator(); it.moveNext();) { - it.advance(); int key = it.key(); if(it.value().needsSaving(false) && !chunksToUnload.contains(key)) possibleSaves.add(key); @@ -584,9 +580,9 @@ { int count = Math.min(10, Math.max(1, possibleSaves.size()/(FULL_SAVE_INTERVAL - tick + lastFullSaveTick))); - for(TIntIterator it = possibleSaves.iterator(); it.hasNext();) + for(IntCursor it = possibleSaves.cursor(); it.moveNext();) { - int key = it.next(); + int key = it.elem(); it.remove(); Chunk chunk = loadedChunkHashMap.get(key); if(chunk != null && chunk.needsSaving(false) && !chunksToUnload.contains(key)) diff --git a/src/main/java/org/ultramine/server/ServerLoadBalancer.java b/src/main/java/org/ultramine/server/ServerLoadBalancer.java index 2e6fc13..af777f3 100644 --- a/src/main/java/org/ultramine/server/ServerLoadBalancer.java +++ b/src/main/java/org/ultramine/server/ServerLoadBalancer.java @@ -7,12 +7,12 @@ import org.ultramine.server.chunk.ChunkHash; import cpw.mods.fml.common.FMLCommonHandler; -import gnu.trove.map.TIntByteMap; import net.minecraft.entity.Entity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.Chunk; +import net.openhft.koloboke.collect.map.IntByteMap; public class ServerLoadBalancer { @@ -20,7 +20,7 @@ private static final PerChunkEntityLimits clientLimits = new PerChunkEntityLimits(); private static final PerChunkEntityLimits infinityLimits = new PerChunkEntityLimits(); private final World world; - private final TIntByteMap activeChunkSet; + private final IntByteMap activeChunkSet; static { diff --git a/src/main/java/org/ultramine/server/chunk/ChunkMap.java b/src/main/java/org/ultramine/server/chunk/ChunkMap.java index f718ec5..c361e91 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkMap.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkMap.java @@ -3,13 +3,12 @@ import java.util.Collection; import net.minecraft.world.chunk.Chunk; +import net.openhft.koloboke.collect.map.IntObjCursor; +import net.openhft.koloboke.collect.map.IntObjMap; +import net.openhft.koloboke.collect.map.hash.HashIntObjMaps; import org.ultramine.server.chunk.ChunkHash; -import gnu.trove.iterator.TIntObjectIterator; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; - public class ChunkMap { private static final int FLAT_LOOKUP_SIZE = 512; @@ -17,7 +16,7 @@ private final Chunk[] flatMap = new Chunk[FLAT_MAP_SIZE*FLAT_MAP_SIZE]; - private final TIntObjectMap map = new TIntObjectHashMap(); + private final IntObjMap map = HashIntObjMaps.newMutableMap(); public void put(int x, int z, Chunk chunk) { @@ -90,14 +89,14 @@ return map.containsKey(hash); } - public TIntObjectIterator iterator() + public IntObjCursor iterator() { - return map.iterator(); + return map.cursor(); } public Collection valueCollection() { - return map.valueCollection(); + return map.values(); } public int size() diff --git a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java index 201cf13..11a7fef 100644 --- a/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java +++ b/src/main/java/org/ultramine/server/chunk/ChunkSendManager.java @@ -35,6 +35,9 @@ import net.minecraft.world.chunk.Chunk; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.world.ChunkWatchEvent; +import net.openhft.koloboke.collect.IntCursor; +import net.openhft.koloboke.collect.set.IntSet; +import net.openhft.koloboke.collect.set.hash.HashIntSets; public class ChunkSendManager { @@ -50,7 +53,7 @@ private final TIntArrayListImpl toSend = new TIntArrayListImpl(441); private final TIntIntMap sending = TCollections.synchronizedMap(new TIntIntHashMap()); private final TIntSet sendingSage2 = TCollections.synchronizedSet(new TIntHashSet()); - private final TIntSet sended = new TIntHashSet(); + private final IntSet sended = HashIntSets.newMutableSet(); private final Queue toUpdate = Queues.newConcurrentLinkedQueue(); private final List loadedChunksBuffer = new ArrayList(); private final AtomicInteger sendingQueueSize = new AtomicInteger(); @@ -104,9 +107,9 @@ } } - for(TIntIterator it = sended.iterator(); it.hasNext();) + for(IntCursor it = sended.cursor(); it.moveNext();) { - int key = it.next(); + int key = it.elem(); if(!overlaps(cx, cz, ChunkHash.keyToX(key), ChunkHash.keyToZ(key), curView)) { PlayerManager.PlayerInstance pi = manager.getOrCreateChunkWatcher(ChunkHash.keyToX(key), ChunkHash.keyToZ(key), false); @@ -174,9 +177,9 @@ cancelSending(key); } - for(TIntIterator it = sended.iterator(); it.hasNext();) + for(IntCursor it = sended.cursor(); it.moveNext();) { - int key = it.next(); + int key = it.elem(); PlayerManager.PlayerInstance pi = manager.getOrCreateChunkWatcher(ChunkHash.keyToX(key), ChunkHash.keyToZ(key), false); if (pi != null) pi.removePlayer(player); } @@ -355,7 +358,7 @@ { PlayerManager.PlayerInstance pi = manager.getOrCreateChunkWatcher(x - movX, z - movZ, false); if(pi != null) pi.removePlayer(player); - sended.remove(key); + sended.removeInt(key); } else { diff --git a/src/main/java/org/ultramine/server/mobspawn/MobSpawner.java b/src/main/java/org/ultramine/server/mobspawn/MobSpawner.java index 48df972..3663a67 100644 --- a/src/main/java/org/ultramine/server/mobspawn/MobSpawner.java +++ b/src/main/java/org/ultramine/server/mobspawn/MobSpawner.java @@ -9,7 +9,6 @@ import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.iterator.TIntByteIterator; import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; import net.minecraft.block.Block; @@ -23,6 +22,7 @@ import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; import net.minecraft.world.chunk.Chunk; import net.minecraftforge.event.ForgeEventFactory; +import net.openhft.koloboke.collect.map.IntByteCursor; @SideOnly(Side.SERVER) public abstract class MobSpawner @@ -59,9 +59,8 @@ { listIndex = 0; chunks.clear(); - for(TIntByteIterator it = world.getActiveChunkSet().iterator(); it.hasNext();) + for(IntByteCursor it = world.getActiveChunkSet().cursor(); it.moveNext();) { - it.advance(); int prior = it.value(); if(prior >= set.minRadius && prior <= set.maxRadius) chunks.add(it.key()); diff --git a/src/main/java/org/ultramine/server/util/ItemStackHashMap.java b/src/main/java/org/ultramine/server/util/ItemStackHashMap.java index 0f31993..690fea0 100644 --- a/src/main/java/org/ultramine/server/util/ItemStackHashMap.java +++ b/src/main/java/org/ultramine/server/util/ItemStackHashMap.java @@ -8,17 +8,17 @@ import org.ultramine.server.event.ForgeModIdMappingEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; +import net.openhft.koloboke.collect.map.IntObjMap; +import net.openhft.koloboke.collect.map.hash.HashIntObjMaps; public class ItemStackHashMap implements Map { private final Map map = new TreeMap(ItemStackComparator.INSTANCE); - private final TIntObjectMap fastMap = new TIntObjectHashMap(); + private final IntObjMap fastMap = HashIntObjMaps.newMutableMap(); private boolean hasWildcard = false; public ItemStackHashMap() diff --git a/src/main/java/org/ultramine/server/util/ItemStackHashSet.java b/src/main/java/org/ultramine/server/util/ItemStackHashSet.java index 956e9ab..fb1c649 100644 --- a/src/main/java/org/ultramine/server/util/ItemStackHashSet.java +++ b/src/main/java/org/ultramine/server/util/ItemStackHashSet.java @@ -9,17 +9,17 @@ import org.ultramine.server.event.ForgeModIdMappingEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gnu.trove.set.TIntSet; -import gnu.trove.set.hash.TIntHashSet; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; +import net.openhft.koloboke.collect.set.IntSet; +import net.openhft.koloboke.collect.set.hash.HashIntSets; public class ItemStackHashSet implements Set { private final List list = new ArrayList(); - private final TIntSet fastSet = new TIntHashSet(); + private final IntSet fastSet = HashIntSets.newMutableSet(); private boolean hasWildcard = false; public ItemStackHashSet() @@ -60,7 +60,7 @@ private boolean removeFastMap(ItemStack is) { - return fastSet.remove(Item.getIdFromItem(is.getItem()) | (is.getItemDamage() << 16)); + return fastSet.removeInt(Item.getIdFromItem(is.getItem()) | (is.getItemDamage() << 16)); } public boolean contains(int id, int meta) diff --git a/src/main/java/org/ultramine/server/world/imprt/ImportChunkLoader.java b/src/main/java/org/ultramine/server/world/imprt/ImportChunkLoader.java index 6cbc1d4..01312d0 100644 --- a/src/main/java/org/ultramine/server/world/imprt/ImportChunkLoader.java +++ b/src/main/java/org/ultramine/server/world/imprt/ImportChunkLoader.java @@ -8,19 +8,19 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; import net.minecraft.world.MinecraftException; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.AnvilChunkLoader; import net.minecraft.world.chunk.storage.RegionFile; import net.minecraft.world.storage.ThreadedFileIOBase; +import net.openhft.koloboke.collect.map.IntObjMap; +import net.openhft.koloboke.collect.map.hash.HashIntObjMaps; public abstract class ImportChunkLoader extends AnvilChunkLoader { private static final Logger log = LogManager.getLogger(); - protected final TIntObjectMap regionCache = new TIntObjectHashMap(); + protected final IntObjMap regionCache = HashIntObjMaps.newUpdatableMap(); protected final File tempDir; protected volatile boolean closed; @@ -70,7 +70,7 @@ ThreadedFileIOBase.threadedIOInstance.waitForFinish(); } catch (InterruptedException interruptedexception) {} - for(RegionFile region : regionCache.valueCollection()) + for(RegionFile region : regionCache.values()) try{region.close();}catch(IOException igrored){} regionCache.clear(); }