Increased world value cache and changed map rendering.

This commit is contained in:
Harrison Deng 2020-05-17 20:16:10 -05:00
parent df605880b7
commit 1b4fbd05f4
3 changed files with 27 additions and 25 deletions

View File

@ -27,12 +27,14 @@ import org.bukkit.map.MapView.Scale;
import ca.recrown.islandsurvivalcraft.IslandSurvivalCraft;
import ca.recrown.islandsurvivalcraft.interaction.items.VariationItemIdentifier;
import ca.recrown.islandsurvivalcraft.interaction.items.VariedItem;
import ca.recrown.islandsurvivalcraft.utilities.GeneralUtilities;
import ca.recrown.islandsurvivalcraft.utilities.datatypes.Point2;
import ca.recrown.islandsurvivalcraft.world.WorldInfo;
import ca.recrown.islandsurvivalcraft.world.Information.IslandInformation;
import ca.recrown.islandsurvivalcraft.world.Information.IslandInformationManager;
public class IslandMapItem extends MapRenderer implements VariedItem {
Color mainColor = new Color(0, 180, 0);
private Material[] baseItems;
private VariationItemIdentifier identifier;
private IslandSurvivalCraft islandSurvivalCraft;
@ -64,27 +66,22 @@ public class IslandMapItem extends MapRenderer implements VariedItem {
WorldInfo worldInfo = islandSurvivalCraft.getWorldInfoManager().retrieve(map.getWorld().getName());
IslandInformationManager islandInformationManager = worldInfo.getIslandInfoManager();
int blocksPerPixel = (int) (1 * Math.pow(2, map.getScale().getValue()));
for (int x = 0; x < 128; x ++) {
for (int y = 0; y < 128; y ++) {
int actualX = blocksPerPixel * (x - Byte.MAX_VALUE/2) + map.getCenterX();
int actualZ = blocksPerPixel * (y - Byte.MAX_VALUE/2) + map.getCenterZ();
Point2 pCoords = new Point2(actualX, actualZ);
IslandInformation info = islandInformationManager.getIslandInformation(pCoords, false);
if (info != null) {
byte baseColorVal = canvas.getBasePixel(x, y);
Color mainColor = new Color(255, 120, 70);
Color baseColor = null;
if (baseColorVal != 0) {
baseColor = MapPalette.getColor(baseColorVal);
} else {
baseColor = new Color(1f, 1f, 1f);
for (int x = 0; x < 128; x += 1) {
for (int y = x % 2; y < 128; y += 2) {
if (canvas.getPixel(x, y) != MapPalette.matchColor(mainColor)) {
int actualX = blocksPerPixel * (x - Byte.MAX_VALUE/2) + map.getCenterX();
int actualZ = blocksPerPixel * (y - Byte.MAX_VALUE/2) + map.getCenterZ();
Point2 pCoords = new Point2(actualX, actualZ);
if (islandInformationManager.isChunkIslandInformationLoaded(GeneralUtilities.worldToChunkCoordinates(pCoords), false)) {
IslandInformation info = islandInformationManager.getIslandInformation(pCoords, false);
if (info != null) {
canvas.setPixel(x, y, MapPalette.matchColor(mainColor));
} else {
canvas.setPixel(x, y, canvas.getBasePixel(x, y));
}
} else if (worldInfo.getIslandMap().isIsland(actualX, actualZ)) {
canvas.setPixel(x, y, MapPalette.matchColor(mainColor));
}
Color resultingColor = new Color(
(mainColor.getRed() * baseColor.getRed())/(255f * 255f),
(mainColor.getGreen() * baseColor.getGreen())/(255f * 255f),
(mainColor.getBlue() * baseColor.getBlue())/(255f * 255f)
);
canvas.setPixel(x, y, MapPalette.matchColor(resultingColor));
}
}
}
@ -115,7 +112,7 @@ public class IslandMapItem extends MapRenderer implements VariedItem {
if (item.getType() != Material.FILLED_MAP) return false;
Bukkit.getScheduler().scheduleSyncDelayedTask(islandSurvivalCraft, () -> {
initializeInstanceOfItem(item);
});
}, 15);
return false;
}
@ -144,8 +141,8 @@ public class IslandMapItem extends MapRenderer implements VariedItem {
mapMeta.getPersistentDataContainer().set(getNamespacedKey(), getIdentifier(), getIdentifier().getID());
MapView mapView = Bukkit.createMap(clicker.getWorld());
mapView.setTrackingPosition(true);
mapView.setCenterX(Math.round(clicker.getLocation().getBlockX() / 128f) * 128);
mapView.setCenterZ(Math.round(clicker.getLocation().getBlockZ() / 128f) * 128);
mapView.setCenterX((Math.round(clicker.getLocation().getBlockX() / 128f) * 128) - 1);
mapView.setCenterZ((Math.round(clicker.getLocation().getBlockZ() / 128f) * 128) - 1);
mapView.setScale(Scale.CLOSEST);
mapMeta.setMapView(mapView);
freshMap.setItemMeta(mapMeta);
@ -163,7 +160,7 @@ public class IslandMapItem extends MapRenderer implements VariedItem {
if (item.getType() != Material.FILLED_MAP) return;
MapMeta mapMeta = (MapMeta) item.getItemMeta();
MapView mapView = mapMeta.getMapView();
mapView.removeRenderer(this);
if (mapView.getRenderers().contains(this)) return;
mapView.addRenderer(this);
mapMeta.setMapView(mapView);
item.setItemMeta(mapMeta);
@ -171,6 +168,7 @@ public class IslandMapItem extends MapRenderer implements VariedItem {
@Override
public void onItemHeld(ItemStack heldItem, HumanEntity holder) {
initializeInstanceOfItem(heldItem);
}
@Override

View File

@ -130,6 +130,10 @@ public class IslandInformationManager implements Runnable {
return null;
}
public boolean isChunkIslandInformationLoaded(Point2 chunkCoords, boolean checkLoading) {
return islandSets.containsKey(chunkCoords) || buildingCache.contains(chunkCoords);
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {

View File

@ -29,7 +29,7 @@ public class IslandWorldMap {
public IslandWorldMap(Random random) {
this.noiseGenerator = new SimplexOctaveGenerator(random, NOISE_OCTAVES);
noiseGenerator.setScale(SCALE);
this.blockValueCache = new Cache<>(131072);
this.blockValueCache = new Cache<>(256000);
}
/**