fix macro data checks breaking on macro-less realm
This commit is contained in:
parent
26355baec4
commit
6ac45b47a2
@ -815,7 +815,9 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager
|
|||||||
ServerEntityUtils.destroyEntity(blockEntity);
|
ServerEntityUtils.destroyEntity(blockEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
MacroDataUpdater.update(parent, parent.getMacroData(), realPos);
|
if(parent.getMacroData() != null){
|
||||||
|
MacroDataUpdater.update(parent, parent.getMacroData(), realPos);
|
||||||
|
}
|
||||||
this.generationService.submit(() -> {
|
this.generationService.submit(() -> {
|
||||||
try {
|
try {
|
||||||
BlockChunkData blockChunkData = realm.getServerWorldData().getServerBlockManager().getChunk(worldPos.x, worldPos.y, worldPos.z);
|
BlockChunkData blockChunkData = realm.getServerWorldData().getServerBlockManager().getChunk(worldPos.x, worldPos.y, worldPos.z);
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package electrosphere.server.entity;
|
package electrosphere.server.entity;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@ -75,24 +76,26 @@ public class ServerContentManager {
|
|||||||
//Block for macro data generation if relevant
|
//Block for macro data generation if relevant
|
||||||
//
|
//
|
||||||
List<MacroObject> objects = null;
|
List<MacroObject> objects = null;
|
||||||
if(macroData != null){
|
if(macroData == null){
|
||||||
|
objects = new LinkedList<MacroObject>();
|
||||||
|
} else {
|
||||||
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldPos.x, worldPos.y, worldPos.z));
|
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldPos.x, worldPos.y, worldPos.z));
|
||||||
}
|
//if any of this macro data isn't ready, return a null chunk
|
||||||
//if any of this macro data isn't ready, return a null chunk
|
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
||||||
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
int waitCount = 0;
|
||||||
int waitCount = 0;
|
while(notFullResCount > 0 && waitCount < MAX_TIME_TO_WAIT){
|
||||||
while(notFullResCount > 0 && waitCount < MAX_TIME_TO_WAIT){
|
try {
|
||||||
try {
|
TimeUnit.MILLISECONDS.sleep(1);
|
||||||
TimeUnit.MILLISECONDS.sleep(1);
|
} catch (InterruptedException e) {
|
||||||
} catch (InterruptedException e) {
|
e.printStackTrace();
|
||||||
e.printStackTrace();
|
break;
|
||||||
break;
|
}
|
||||||
|
notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
||||||
|
waitCount++;
|
||||||
|
}
|
||||||
|
if(notFullResCount > 0){
|
||||||
|
throw new Error("Failed to generate content " + notFullResCount + " " + waitCount);
|
||||||
}
|
}
|
||||||
notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
|
||||||
waitCount++;
|
|
||||||
}
|
|
||||||
if(notFullResCount > 0){
|
|
||||||
throw new Error("Failed to generate content " + notFullResCount + " " + waitCount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package electrosphere.server.physics.block.manager;
|
package electrosphere.server.physics.block.manager;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@ -150,13 +151,15 @@ public class ServerBlockChunkGenerationThread implements Runnable {
|
|||||||
){
|
){
|
||||||
//get the macro data that affects this chunk
|
//get the macro data that affects this chunk
|
||||||
List<MacroObject> objects = null;
|
List<MacroObject> objects = null;
|
||||||
if(macroData != null){
|
if(macroData == null){
|
||||||
|
objects = new LinkedList<MacroObject>();
|
||||||
|
} else {
|
||||||
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldX, worldY, worldZ));
|
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldX, worldY, worldZ));
|
||||||
}
|
//if any of this macro data isn't ready, return a null chunk
|
||||||
//if any of this macro data isn't ready, return a null chunk
|
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
||||||
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
if(notFullResCount > 0){
|
||||||
if(notFullResCount > 0){
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockChunkData chunk = null;
|
BlockChunkData chunk = null;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package electrosphere.server.physics.terrain.manager;
|
package electrosphere.server.physics.terrain.manager;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@ -158,19 +159,23 @@ public class ChunkGenerationThread implements Runnable {
|
|||||||
|
|
||||||
//get the macro data that affects this chunk
|
//get the macro data that affects this chunk
|
||||||
List<MacroObject> objects = null;
|
List<MacroObject> objects = null;
|
||||||
if(macroData != null){
|
if(macroData == null){
|
||||||
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldX, worldY, worldZ));
|
objects = new LinkedList<MacroObject>();
|
||||||
}
|
} else {
|
||||||
//if any of this macro data isn't ready, return a null chunk
|
if(macroData != null){
|
||||||
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
objects = macroData.getNearbyObjects(ServerWorldData.convertChunkToRealSpace(worldX, worldY, worldZ));
|
||||||
if(notFullResCount > 0){
|
}
|
||||||
return null;
|
//if any of this macro data isn't ready, return a null chunk
|
||||||
}
|
long notFullResCount = objects.stream().filter((MacroObject macroObj) -> macroObj instanceof MacroLODObject).map((MacroObject oldView) -> (MacroLODObject)oldView).filter((MacroLODObject lodObj) -> !lodObj.isFullRes()).count();
|
||||||
List<MacroObject> towns = objects.stream().filter((MacroObject obj) -> obj instanceof Town).collect(Collectors.toList());
|
if(notFullResCount > 0){
|
||||||
for(MacroObject currObj : towns){
|
return null;
|
||||||
Town town = (Town)currObj;
|
}
|
||||||
List<VirtualStructure> structs = town.getStructures(macroData);
|
List<MacroObject> towns = objects.stream().filter((MacroObject obj) -> obj instanceof Town).collect(Collectors.toList());
|
||||||
objects.addAll(structs);
|
for(MacroObject currObj : towns){
|
||||||
|
Town town = (Town)currObj;
|
||||||
|
List<VirtualStructure> structs = town.getStructures(macroData);
|
||||||
|
objects.addAll(structs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){
|
if(chunkCache.containsChunk(worldX, worldY, worldZ, stride)){
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user