30% Performance Improvement

This commit is contained in:
Daniel Mills 2020-10-22 19:05:52 -04:00
parent 4f5b562e04
commit 56203c3ee2
2 changed files with 21 additions and 119 deletions

View File

@ -1,32 +1,23 @@
package com.volmit.iris.util; package com.volmit.iris.util;
import java.util.concurrent.TimeUnit;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.data.type.Leaves; import org.bukkit.block.data.type.Leaves;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisDimension; import com.volmit.iris.object.IrisDimension;
public class B public class B
{ {
private static final FastBlockData AIR = FastBlockData.of(Material.AIR); private static final FastBlockData AIR = FastBlockData.of(Material.AIR);
private static final LoadingCache<String, FastBlockData> bdc = Caffeine.newBuilder().expireAfterAccess(60000, TimeUnit.MILLISECONDS).build((c) -> null); private static final KMap<String, FastBlockData> bdc = new KMap<>();
private static final KList<String> nulls = new KList<>(); private static final KList<String> nulls = new KList<>();
private static final KList<FastBlockData> storage = new KList<>();
private static final KList<FastBlockData> storageChest = new KList<>();
private static final KList<FastBlockData> lit = new KList<>();
private static final KList<FastBlockData> updatable = new KList<>();
private static final KList<FastBlockData> notUpdatable = new KList<>();
private static final KList<String> canPlaceOn = new KList<>(); private static final KList<String> canPlaceOn = new KList<>();
private static final KList<FastBlockData> decorant = new KList<>(); private static final KList<FastBlockData> decorant = new KList<>();
private static final IrisDimension defaultCompat = new IrisDimension(); private static final IrisDimension defaultCompat = new IrisDimension();
private static final KMap<Material, Boolean> solid = new KMap<>(); private static final KMap<Material, Boolean> solid = new KMap<>();
private static final LoadingCache<String, FastBlockData> types = Caffeine.newBuilder().expireAfterAccess(30000, TimeUnit.MILLISECONDS).build((c) -> null); private static final KMap<String, FastBlockData> types = new KMap<>();
private static final LoadingCache<String, FastBlockData> typesb = Caffeine.newBuilder().expireAfterAccess(30000, TimeUnit.MILLISECONDS).build((c) -> null); private static final KMap<String, FastBlockData> typesb = new KMap<>();
private static IrisLock lock = new IrisLock("Typelock"); private static IrisLock lock = new IrisLock("Typelock");
public static FastBlockData get(String bd) public static FastBlockData get(String bd)
@ -44,7 +35,7 @@ public class B
return AIR; return AIR;
} }
public static LoadingCache<String, FastBlockData> getBdc() public static KMap<String, FastBlockData> getBdc()
{ {
return bdc; return bdc;
} }
@ -54,31 +45,6 @@ public class B
return nulls; return nulls;
} }
public static KList<FastBlockData> getStorage()
{
return storage;
}
public static KList<FastBlockData> getStoragechest()
{
return storageChest;
}
public static KList<FastBlockData> getLit()
{
return lit;
}
public static KList<FastBlockData> getUpdatable()
{
return updatable;
}
public static KList<FastBlockData> getNotupdatable()
{
return notUpdatable;
}
public static KList<String> getCanplaceon() public static KList<String> getCanplaceon()
{ {
return canPlaceOn; return canPlaceOn;
@ -99,12 +65,12 @@ public class B
return solid; return solid;
} }
public static LoadingCache<String, FastBlockData> getTypes() public static KMap<String, FastBlockData> getTypes()
{ {
return types; return types;
} }
public static LoadingCache<String, FastBlockData> getTypesb() public static KMap<String, FastBlockData> getTypesb()
{ {
return typesb; return typesb;
} }
@ -118,8 +84,13 @@ public class B
{ {
String bd = bdx.trim().toUpperCase(); String bd = bdx.trim().toUpperCase();
return typesb.get(bd, (k) -> return typesb.compute(bd, (k, v) ->
{ {
if(v != null)
{
return v;
}
try try
{ {
return FastBlockData.of(Material.valueOf(k)); return FastBlockData.of(Material.valueOf(k));
@ -156,12 +127,7 @@ public class B
public static boolean isSolid(Material mat) public static boolean isSolid(Material mat)
{ {
if(!solid.containsKey(mat)) return mat.isSolid();
{
solid.put(mat, mat.isSolid());
}
return solid.get(mat);
} }
public static FastBlockData mat(String bd) public static FastBlockData mat(String bd)
@ -327,13 +293,8 @@ public class B
public static boolean isStorage(FastBlockData mat) public static boolean isStorage(FastBlockData mat)
{ {
if(storage.contains(mat))
{
return true;
}
// @builder // @builder
boolean str = mat.matEquals(B.mat("CHEST")) return mat.matEquals(B.mat("CHEST"))
|| mat.matEquals(B.mat("TRAPPED_CHEST")) || mat.matEquals(B.mat("TRAPPED_CHEST"))
|| mat.matEquals(B.mat("SHULKER_BOX")) || mat.matEquals(B.mat("SHULKER_BOX"))
|| mat.matEquals(B.mat("WHITE_SHULKER_BOX")) || mat.matEquals(B.mat("WHITE_SHULKER_BOX"))
@ -360,27 +321,12 @@ public class B
|| mat.matEquals(B.mat("BLAST_FURNACE")) || mat.matEquals(B.mat("BLAST_FURNACE"))
|| mat.matEquals(B.mat("SMOKER")); || mat.matEquals(B.mat("SMOKER"));
//@done //@done
if(str)
{
lock.lock();
storage.add(mat);
lock.unlock();
return true;
}
return false;
} }
public static boolean isStorageChest(FastBlockData mat) public static boolean isStorageChest(FastBlockData mat)
{ {
if(storageChest.contains(mat))
{
return true;
}
// @builder // @builder
boolean str = mat.matEquals(B.mat("CHEST")) return mat.matEquals(B.mat("CHEST"))
|| mat.matEquals(B.mat("TRAPPED_CHEST")) || mat.matEquals(B.mat("TRAPPED_CHEST"))
|| mat.matEquals(B.mat("SHULKER_BOX")) || mat.matEquals(B.mat("SHULKER_BOX"))
|| mat.matEquals(B.mat("WHITE_SHULKER_BOX")) || mat.matEquals(B.mat("WHITE_SHULKER_BOX"))
@ -404,27 +350,12 @@ public class B
|| mat.matEquals(B.mat("DROPPER")) || mat.matEquals(B.mat("DROPPER"))
|| mat.matEquals(B.mat("HOPPER")); || mat.matEquals(B.mat("HOPPER"));
//@done //@done
if(str)
{
lock.lock();
storageChest.add(mat);
lock.unlock();
return true;
}
return false;
} }
public static boolean isLit(FastBlockData mat) public static boolean isLit(FastBlockData mat)
{ {
if(lit.contains(mat))
{
return true;
}
// @builder // @builder
boolean str = mat.matEquals(B.mat("GLOWSTONE")) return mat.matEquals(B.mat("GLOWSTONE"))
|| mat.matEquals(B.mat("END_ROD")) || mat.matEquals(B.mat("END_ROD"))
|| mat.matEquals(B.mat("SOUL_SAND")) || mat.matEquals(B.mat("SOUL_SAND"))
|| mat.matEquals(B.mat("TORCH")) || mat.matEquals(B.mat("TORCH"))
@ -446,43 +377,11 @@ public class B
|| mat.getType().equals(Material.BREWING_STAND) || mat.getType().equals(Material.BREWING_STAND)
|| mat.getType().equals(Material.REDSTONE_ORE); || mat.getType().equals(Material.REDSTONE_ORE);
//@done //@done
if(str)
{
lock.lock();
lit.add(mat);
lock.unlock();
return true;
}
return false;
} }
public static boolean isUpdatable(FastBlockData mat) public static boolean isUpdatable(FastBlockData mat)
{ {
if(updatable.contains(mat)) return isLit(mat) || isStorage(mat);
{
return true;
}
if(notUpdatable.contains(mat))
{
return false;
}
boolean str = isLit(mat) || isStorage(mat);
if(str)
{
lock.lock();
updatable.add(mat);
lock.unlock();
return true;
}
lock.lock();
notUpdatable.add(mat);
lock.unlock();
return false;
} }
public static boolean isFoliage(FastBlockData d) public static boolean isFoliage(FastBlockData d)

View File

@ -168,9 +168,12 @@ public class PregenJob implements Listener
PrecisionStopwatch p = PrecisionStopwatch.start(); PrecisionStopwatch p = PrecisionStopwatch.start();
if(PaperLib.isPaper()) if(PaperLib.isPaper())
{
for(int i = 0; i < 16; i++)
{ {
tickPaper(); tickPaper();
} }
}
else else
{ {