diff --git a/src/main/java/org/ultramine/mods/privreg/data/DummyDataProvider.java b/src/main/java/org/ultramine/mods/privreg/data/DummyDataProvider.java index 0410c64..05bc2d2 100644 --- a/src/main/java/org/ultramine/mods/privreg/data/DummyDataProvider.java +++ b/src/main/java/org/ultramine/mods/privreg/data/DummyDataProvider.java @@ -23,7 +23,7 @@ } @Override - public void saveAll(Region[] regions) + public void saveAll(Iterable regions) { } diff --git a/src/main/java/org/ultramine/mods/privreg/data/IRegionDataProvider.java b/src/main/java/org/ultramine/mods/privreg/data/IRegionDataProvider.java index e59e42f..c65f8c0 100644 --- a/src/main/java/org/ultramine/mods/privreg/data/IRegionDataProvider.java +++ b/src/main/java/org/ultramine/mods/privreg/data/IRegionDataProvider.java @@ -14,7 +14,7 @@ void createRegion(Region region); - void saveAll(Region[] regions); + void saveAll(Iterable regions); void saveRegion(Region region); diff --git a/src/main/java/org/ultramine/mods/privreg/data/NBTFileRegionDataProvider.java b/src/main/java/org/ultramine/mods/privreg/data/NBTFileRegionDataProvider.java index 9e00b12..b308f4d 100644 --- a/src/main/java/org/ultramine/mods/privreg/data/NBTFileRegionDataProvider.java +++ b/src/main/java/org/ultramine/mods/privreg/data/NBTFileRegionDataProvider.java @@ -48,7 +48,7 @@ } @Override - public void saveAll(Region[] regions) + public void saveAll(Iterable regions) { for(Region region : regions) { diff --git a/src/main/java/org/ultramine/mods/privreg/integration/DynmapIntegration.java b/src/main/java/org/ultramine/mods/privreg/integration/DynmapIntegration.java index 756739d..878aa31 100644 --- a/src/main/java/org/ultramine/mods/privreg/integration/DynmapIntegration.java +++ b/src/main/java/org/ultramine/mods/privreg/integration/DynmapIntegration.java @@ -39,7 +39,7 @@ this.markers = api.createMarkerSet("privreg", "Private Regions", null, false); this.markers.setHideByDefault(true); - for(Region region : PrivateRegions.instance().getServerRegionManager(0).unsafeGetRegions()) + for(Region region : PrivateRegions.instance().getServerRegionManager(0).unsafeGetRegions().values()) { if(region != null) loadRegion(region); diff --git a/src/main/java/org/ultramine/mods/privreg/modules/RegionModule.java b/src/main/java/org/ultramine/mods/privreg/modules/RegionModule.java index e10352c..9269f84 100644 --- a/src/main/java/org/ultramine/mods/privreg/modules/RegionModule.java +++ b/src/main/java/org/ultramine/mods/privreg/modules/RegionModule.java @@ -38,7 +38,7 @@ public List getDisplayDesc() { List desc = new ArrayList(); - Collections.addAll(desc, StringUtils.split(tlt("item.privreg.module."+registryItem.getName()+".desc"), "\\n")); + Collections.addAll(desc, StringUtils.splitByWholeSeparator(tlt("item.privreg.module."+registryItem.getName()+".desc"), "\\n")); addEnergyCostDescLine(desc); return desc; } diff --git a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java index 8d98375..99ca35c 100644 --- a/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java +++ b/src/main/java/org/ultramine/mods/privreg/regions/RegionManager.java @@ -3,11 +3,11 @@ import com.mojang.authlib.GameProfile; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import net.openhft.koloboke.collect.map.IntObjMap; +import net.openhft.koloboke.collect.map.hash.HashIntObjMaps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.ultramine.mods.privreg.InitCommon; @@ -35,8 +35,8 @@ private final MinecraftServer server; private final int dimension; private final IRegionDataProvider dataProvider; - private Region[] regions; - private int lastID; + private final IntObjMap idToRegion = HashIntObjMaps.newMutableMap(); + private int nextRegionId; private final RegionMap regionMap = new RegionMap(); @@ -58,21 +58,17 @@ for(Region reg : list) if(reg.getID() > maxID) maxID = reg.getID(); - lastID = maxID; - int size = 128; - while(size < maxID) - size <<= 1; - regions = new Region[size]; + nextRegionId = maxID + 1; for(Region reg : list) { reg.setWorld(dimension); - regions[reg.getID()] = reg; + idToRegion.put(reg.getID(), reg); regionMap.add(reg); } for(Region reg : list) if(reg.parentWaiting != -1) - reg.setParent(regions[reg.parentWaiting]); + reg.setParent(idToRegion.get(reg.parentWaiting)); for(Region reg : list) { @@ -111,16 +107,9 @@ return true; } - private int getUniqueRegionID() + private int getNextRegionID() { - for(int i = 0; i < regions.length; i++) - if(regions[i] == null) return i; - - int length = regions.length; - Region[] regionsnew = new Region[length * 2]; - System.arraycopy(regions, 0, regionsnew, 0, length); - regions = regionsnew; - return length; + return nextRegionId++; } public Region createRegion(TileBlockRegion te, GameProfile player) @@ -154,7 +143,7 @@ if (parent == null && hasRegionsInRange(shape.expandAll(cd))) return null; - Region region = new Region(this, getUniqueRegionID(), true); + Region region = new Region(this, getNextRegionID(), true); region.setBlock(block); region.setShape(shape); region.setWorld(world); @@ -166,10 +155,8 @@ owner.setRight(RegionRights.CREATOR, true); region.getOwnerStorage().add(owner); - regions[region.getID()] = region; + idToRegion.put(region.getID(), region); dataProvider.createRegion(region); - if (region.getID() > lastID) - lastID = region.getID(); regionMap.add(region); tracker.onRegionCreate(region); @@ -179,7 +166,7 @@ public Region dangerousCreateRegion(Rectangle shape, BlockPos block, int dimension) { - Region region = new Region(this, getUniqueRegionID(), true); + Region region = new Region(this, getNextRegionID(), true); region.setShape(shape); region.setWorld(dimension); @@ -187,10 +174,8 @@ region.onCreate(); - regions[region.getID()] = region; + idToRegion.put(region.getID(), region); dataProvider.createRegion(region); - if (region.getID() > lastID) - lastID = region.getID(); regionMap.add(region); tracker.onRegionCreate(region); @@ -206,31 +191,23 @@ public void saveAllRegion() { - dataProvider.saveAll(regions); + dataProvider.saveAll(idToRegion.values()); } public void onTick(int tick) { if(tick % 101 == 0) { - for(int i = 0; i <= lastID; i++) - { - Region region = regions[i]; - if (region != null) - region.onUpdate(); - } + for(Region region : idToRegion.values()) + region.onUpdate(); } } public void unload() { saveAllRegion(); - for(int i = 0; i <= lastID; i++) - { - Region region = regions[i]; - if (region != null) - region.onUnload(); - } + for(Region region : idToRegion.values()) + region.onUnload(); dataProvider.close(); } @@ -238,19 +215,14 @@ { regionMap.remove(region); region.onDestroy(); - regions[region.getID()] = null; + idToRegion.remove(region.getID()); dataProvider.destroyRegion(region); tracker.onRegionDestroy(region); - if(region.getID() == lastID) - lastID--; } public Region getRegion(int id) { - if(id >= regions.length || id < 0) - return null; - - return regions[id]; + return idToRegion.get(id); } @Override @@ -277,9 +249,9 @@ return regionMap.hasInRange(range); } - public Region[] unsafeGetRegions() + public IntObjMap unsafeGetRegions() { - return regions; + return idToRegion; } public RegionChangeResult expandRegion(Region region, ForgeDirection dir, int amount) diff --git a/src/main/java/org/ultramine/mods/privreg/regions/RegionTracker.java b/src/main/java/org/ultramine/mods/privreg/regions/RegionTracker.java index ec34f59..6ab83ca 100644 --- a/src/main/java/org/ultramine/mods/privreg/regions/RegionTracker.java +++ b/src/main/java/org/ultramine/mods/privreg/regions/RegionTracker.java @@ -22,7 +22,7 @@ public void onPlayerEnter(EntityPlayerMP player) { int dim = player.dimension; - for(Region region : regMgr.unsafeGetRegions()) + for(Region region : regMgr.unsafeGetRegions().values()) if(region != null) new PacketRegionData(region).sendTo(player); }