fix dimensions
This commit is contained in:
parent
0e848f01c4
commit
8b983f15c2
20 changed files with 789 additions and 527 deletions
|
@ -27,8 +27,17 @@ import common.Version;
|
|||
import common.collect.Lists;
|
||||
import common.collect.Maps;
|
||||
import common.color.TextColor;
|
||||
import common.dimension.Area;
|
||||
import common.dimension.DimType;
|
||||
import common.dimension.Dimension;
|
||||
import common.dimension.Domain;
|
||||
import common.dimension.Galaxy;
|
||||
import common.dimension.Moon;
|
||||
import common.dimension.Planet;
|
||||
import common.dimension.Sector;
|
||||
import common.dimension.Semi;
|
||||
import common.dimension.Space;
|
||||
import common.dimension.Star;
|
||||
import common.effect.StatusEffect;
|
||||
import common.entity.Entity;
|
||||
import common.entity.npc.EntityHuman;
|
||||
|
@ -80,6 +89,7 @@ import common.util.ExtMath;
|
|||
import common.util.Pair;
|
||||
import common.util.PortalType;
|
||||
import common.util.Position;
|
||||
import common.util.Triplet;
|
||||
import common.util.Util;
|
||||
import common.util.Var;
|
||||
import common.util.WorldPos;
|
||||
|
@ -90,6 +100,7 @@ import server.clipboard.ReorderRegistry;
|
|||
import server.clipboard.RotationRegistry;
|
||||
import server.command.CommandEnvironment;
|
||||
import server.command.Executor;
|
||||
import server.init.TeleportRegistry;
|
||||
import server.network.HandshakeHandler;
|
||||
import server.network.Player;
|
||||
import server.network.User;
|
||||
|
@ -155,6 +166,7 @@ public final class Server implements IThreadListener, Executor {
|
|||
Registry.register();
|
||||
GenBiome.setAsProvider();
|
||||
UniverseRegistry.register();
|
||||
TeleportRegistry.register();
|
||||
RotationRegistry.register();
|
||||
ReorderRegistry.register();
|
||||
final Server server = new Server();
|
||||
|
@ -169,6 +181,185 @@ public final class Server implements IThreadListener, Executor {
|
|||
Region.killIO();
|
||||
Log.flushLog();
|
||||
}
|
||||
|
||||
private static void readDimensions(TagObject tag) {
|
||||
List<Pair<String, String>> galaxies = Lists.newArrayList();
|
||||
List<Triplet<String, String, String>> sectors = Lists.newArrayList();
|
||||
List<Triplet<String, String, String>> stars = Lists.newArrayList();
|
||||
List<Triplet<String, String, String>> planets = Lists.newArrayList();
|
||||
List<Triplet<String, String, String>> moons = Lists.newArrayList();
|
||||
List<Pair<String, String>> semis = Lists.newArrayList();
|
||||
List<Pair<String, String>> domains = Lists.newArrayList();
|
||||
List<Triplet<String, String, String>> areas = Lists.newArrayList();
|
||||
|
||||
List<TagObject> list = tag.getList("Dimensions");
|
||||
for(TagObject data : list) {
|
||||
String name = data.getString("Name");
|
||||
String type = data.getString("Type");
|
||||
String display = data.hasString("CustomName") ? data.getString("CustomName") : name;
|
||||
if(type.equals("galaxy"))
|
||||
galaxies.add(new Pair(name, display));
|
||||
else if(type.equals("sector"))
|
||||
sectors.add(new Triplet(name, display, data.getString("Galaxy")));
|
||||
else if(type.equals("domain"))
|
||||
domains.add(new Pair(name, display));
|
||||
else {
|
||||
DimType dim = DimType.getByName(type);
|
||||
if(dim != null) {
|
||||
switch(dim) {
|
||||
case SEMI:
|
||||
semis.add(new Pair(name, display));
|
||||
break;
|
||||
case AREA:
|
||||
areas.add(new Triplet(name, display, data.getString("Domain")));
|
||||
break;
|
||||
case MOON:
|
||||
moons.add(new Triplet(name, display, data.getString("Planet")));
|
||||
break;
|
||||
case PLANET:
|
||||
planets.add(new Triplet(name, display, data.getString("Star")));
|
||||
break;
|
||||
case STAR:
|
||||
stars.add(new Triplet(name, display, data.getString("Sector")));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(Pair<String, String> galaxy : galaxies) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomGalaxy(galaxy.first(), galaxy.second());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Galaxie %s nicht hinzufügen", galaxy.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Triplet<String, String, String> sector : sectors) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomSector(sector.first(), sector.second(), sector.third());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Sektor %s nicht hinzufügen", sector.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Triplet<String, String, String> star : stars) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomStar(star.first(), star.second(), (Star)Dimension.create(DimType.STAR), star.third());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Stern %s nicht hinzufügen", star.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Triplet<String, String, String> planet : planets) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomPlanet(planet.first(), planet.second(), (Planet)Dimension.create(DimType.PLANET), planet.third());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Planet %s nicht hinzufügen", planet.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Triplet<String, String, String> moon : moons) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomMoon(moon.first(), moon.second(), (Moon)Dimension.create(DimType.MOON), moon.third());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Mond %s nicht hinzufügen", moon.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Pair<String, String> semi : semis) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomSemi(semi.first(), semi.second(), (Semi)Dimension.create(DimType.SEMI));
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Dimension %s nicht hinzufügen", semi.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Pair<String, String> domain : domains) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomDomain(domain.first(), domain.second());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Bereich %s nicht hinzufügen", domain.first());
|
||||
}
|
||||
}
|
||||
|
||||
for(Triplet<String, String, String> area : areas) {
|
||||
try {
|
||||
UniverseRegistry.registerCustomArea(area.first(), area.second(), (Area)Dimension.create(DimType.AREA), area.third());
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Dimension %s nicht hinzufügen", area.first());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static TagObject writeDimensions() {
|
||||
TagObject tag = new TagObject();
|
||||
|
||||
List<TagObject> list = Lists.newArrayList();
|
||||
for(Dimension dim : UniverseRegistry.getDimensions()) {
|
||||
if(dim.isCustom()) {
|
||||
TagObject data = new TagObject();
|
||||
data.setString("Type", dim.getType().getName());
|
||||
data.setString("Name", UniverseRegistry.getName(dim));
|
||||
data.setString("CustomName", dim.getCustomName());
|
||||
switch(dim.getType()) {
|
||||
case AREA:
|
||||
data.setString("Domain", UniverseRegistry.getDomain((Area)dim).id);
|
||||
break;
|
||||
case MOON:
|
||||
data.setString("Planet", UniverseRegistry.getName(UniverseRegistry.getPlanet((Moon)dim)));
|
||||
break;
|
||||
case PLANET:
|
||||
data.setString("Star", UniverseRegistry.getName(UniverseRegistry.getStar((Planet)dim)));
|
||||
break;
|
||||
case STAR:
|
||||
data.setString("Sector", UniverseRegistry.getSector((Star)dim).id);
|
||||
break;
|
||||
}
|
||||
list.add(data);
|
||||
}
|
||||
}
|
||||
for(Sector sector : UniverseRegistry.getSectors()) {
|
||||
if(sector.isCustom()) {
|
||||
TagObject data = new TagObject();
|
||||
data.setString("Type", "sector");
|
||||
data.setString("Name", sector.id);
|
||||
data.setString("CustomName", sector.getCustomName());
|
||||
data.setString("Galaxy", UniverseRegistry.getGalaxy(sector).id);
|
||||
list.add(data);
|
||||
}
|
||||
}
|
||||
for(Galaxy galaxy : UniverseRegistry.getGalaxies()) {
|
||||
if(galaxy.isCustom()) {
|
||||
TagObject data = new TagObject();
|
||||
data.setString("Type", "galaxy");
|
||||
data.setString("Name", galaxy.id);
|
||||
data.setString("CustomName", galaxy.getCustomName());
|
||||
list.add(data);
|
||||
}
|
||||
}
|
||||
for(Domain domain : UniverseRegistry.getDomains()) {
|
||||
if(domain.isCustom()) {
|
||||
TagObject data = new TagObject();
|
||||
data.setString("Type", "domain");
|
||||
data.setString("Name", domain.id);
|
||||
data.setString("CustomName", domain.getCustomName());
|
||||
list.add(data);
|
||||
}
|
||||
}
|
||||
if(!list.isEmpty())
|
||||
tag.setList("Dimensions", list);
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
private void saveServerConfig(long time) {
|
||||
TagObject data = new TagObject();
|
||||
|
@ -182,7 +373,7 @@ public final class Server implements IThreadListener, Executor {
|
|||
cfg.setString(cvar, value.get());
|
||||
}
|
||||
data.setObject("Config", cfg);
|
||||
data.setObject("Universe", UniverseRegistry.toTags());
|
||||
data.setObject("Universe", writeDimensions());
|
||||
if(this.keyPair != null) {
|
||||
data.setByteArray("PrivateKey", this.keyPair.getPrivate().getEncoded());
|
||||
data.setByteArray("PublicKey", this.keyPair.getPublic().getEncoded());
|
||||
|
@ -213,7 +404,7 @@ public final class Server implements IThreadListener, Executor {
|
|||
if(svar != null)
|
||||
svar.set(cfg.getString(key), false, false);
|
||||
}
|
||||
UniverseRegistry.fromTags(tag.getObject("Universe"));
|
||||
readDimensions(tag.getObject("Universe"));
|
||||
long lastPlayed = tag.getLong("LastAccess");
|
||||
String version = tag.hasString("Version") ? tag.getString("Version") : null;
|
||||
version = version != null && version.isEmpty() ? "<unbekannt>" : version;
|
||||
|
@ -239,6 +430,34 @@ public final class Server implements IThreadListener, Executor {
|
|||
Log.IO.info("Erstelle neue Welt und Konfiguration");
|
||||
return World.START_TIME;
|
||||
}
|
||||
|
||||
private void loadDimension(Dimension dim) {
|
||||
File file = new File(new File(new File("chunk"), UniverseRegistry.getName(dim)), "data.cdt");
|
||||
TagObject tag = null;
|
||||
if(file.exists()) {
|
||||
try {
|
||||
tag = TagObject.readGZip(file);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Weltdaten %s nicht laden", file);
|
||||
}
|
||||
}
|
||||
dim.readData(tag == null ? new TagObject() : tag);
|
||||
if(tag == null || !tag.hasLong("Seed"))
|
||||
Log.TICK.info("Startwert für %s: %d" + (Vars.seed.isEmpty() ? "" : " von Basiswert '%s'"), dim.getFormattedName(false), dim.getSeed(), Vars.seed);
|
||||
}
|
||||
|
||||
private void saveDimension(Dimension dim) {
|
||||
TagObject tag = dim.writeData();
|
||||
File file = new File(new File(new File("chunk"), UniverseRegistry.getName(dim)), "data.cdt");
|
||||
try {
|
||||
file.getParentFile().mkdirs();
|
||||
TagObject.writeGZip(tag, file);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Weltdaten %s nicht speichern", file);
|
||||
}
|
||||
}
|
||||
|
||||
private void setCallback(Runnable callback, String ... vars) {
|
||||
for(String key : vars) {
|
||||
|
@ -306,6 +525,9 @@ public final class Server implements IThreadListener, Executor {
|
|||
|
||||
public void saveWorldInfo() {
|
||||
this.saveServerConfig(this.space.getDayTime());
|
||||
for(Dimension dim : UniverseRegistry.getDimensions()) {
|
||||
this.saveDimension(dim);
|
||||
}
|
||||
WorldServer.saveWarps(this.warps);
|
||||
}
|
||||
|
||||
|
@ -383,6 +605,9 @@ public final class Server implements IThreadListener, Executor {
|
|||
public void run(long time) {
|
||||
Region.loadMap();
|
||||
long wtime = this.loadServerConfig();
|
||||
for(Dimension dim : UniverseRegistry.getDimensions()) {
|
||||
this.loadDimension(dim);
|
||||
}
|
||||
if(this.keyPair == null) {
|
||||
Log.SYSTEM.info("Generiere neues Schlüsselpaar");
|
||||
this.keyPair = EncryptUtil.createKeypair();
|
||||
|
|
|
@ -7,9 +7,15 @@ import common.biome.Biome;
|
|||
import common.collect.Iterables;
|
||||
import common.collect.Lists;
|
||||
import common.color.TextColor;
|
||||
import common.dimension.Area;
|
||||
import common.dimension.DimType;
|
||||
import common.dimension.Dimension;
|
||||
import common.dimension.Planet;
|
||||
import common.dimension.Star;
|
||||
import common.init.Blocks;
|
||||
import common.init.NameRegistry;
|
||||
import common.init.UniverseRegistry;
|
||||
import common.rng.Random;
|
||||
import server.command.ArgumentParser;
|
||||
import server.command.Command;
|
||||
import server.command.CommandEnvironment;
|
||||
|
@ -23,6 +29,53 @@ public class CommandLoad extends Command {
|
|||
|
||||
private String loadingDim;
|
||||
|
||||
public static Planet registerPlanet(String star, String name, String custom, int sky, int fog, int clouds, long orbit, long rotation,
|
||||
float offset, float gravity, float temperature, int brightness) {
|
||||
star = star == null ? UniverseRegistry.getName(new Random().pick(Lists.newArrayList(UniverseRegistry.getStars()))) : star;
|
||||
if(!UniverseRegistry.isDimension(star) || UniverseRegistry.getDimension(star).getType() != DimType.STAR || UniverseRegistry.isRegistered(name))
|
||||
return null;
|
||||
Planet dim = new Planet(sky, fog, clouds, orbit, rotation, offset, gravity, temperature, brightness);
|
||||
dim.setTimeQualifier(3);
|
||||
return UniverseRegistry.registerCustomPlanet(name, custom, dim, star);
|
||||
}
|
||||
|
||||
public static void registerPreset(Dimension preset) {
|
||||
Random rand = new Random();
|
||||
String pname;
|
||||
do {
|
||||
pname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5));
|
||||
} while(UniverseRegistry.isRegistered(pname.toLowerCase()));
|
||||
if(preset.getType() == DimType.PLANET) {
|
||||
String galaxy;
|
||||
do {
|
||||
galaxy = NameRegistry.FANTASY.generate(rand, rand.range(2, 5));
|
||||
} while(UniverseRegistry.isRegistered(galaxy.toLowerCase()));
|
||||
String sector;
|
||||
do {
|
||||
sector = NameRegistry.FANTASY.generate(rand, rand.range(2, 5));
|
||||
} while(UniverseRegistry.isRegistered(sector.toLowerCase()));
|
||||
String sname;
|
||||
do {
|
||||
sname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5));
|
||||
} while(UniverseRegistry.isRegistered(sname.toLowerCase()));
|
||||
Star star = new Star(0xff0000 | (rand.range(0x60, 0xa0) << 8),
|
||||
rand.frange(200.0f, 400.0f), rand.frange(5000.0f, 7000.0f),
|
||||
rand.pick(Blocks.lava.getState(), Blocks.magma.getState()), rand.range(64, 212));
|
||||
UniverseRegistry.registerCustomGalaxy(galaxy.toLowerCase(), galaxy);
|
||||
UniverseRegistry.registerCustomSector(sector.toLowerCase(), sector, galaxy.toLowerCase());
|
||||
UniverseRegistry.registerCustomStar(sname.toLowerCase(), sname, star, galaxy.toLowerCase());
|
||||
UniverseRegistry.registerCustomPlanet(pname.toLowerCase(), pname, (Planet)preset, sname.toLowerCase());
|
||||
}
|
||||
else if(preset.getType() == DimType.AREA) {
|
||||
String domain;
|
||||
do {
|
||||
domain = NameRegistry.FANTASY.generate(rand, rand.range(2, 5));
|
||||
} while(UniverseRegistry.isRegistered(domain.toLowerCase()));
|
||||
UniverseRegistry.registerCustomDomain(domain.toLowerCase(), domain);
|
||||
UniverseRegistry.registerCustomArea(pname.toLowerCase(), pname, (Area)preset, domain.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
public CommandLoad() {
|
||||
super("load");
|
||||
|
||||
|
@ -69,7 +122,7 @@ public class CommandLoad extends Command {
|
|||
}
|
||||
this.loadingDim = name;
|
||||
if(Converter.convert(dir, name, pos -> env.getServer().schedule(() -> {
|
||||
Planet planet = UniverseRegistry.registerPlanet(star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness);
|
||||
Planet planet = registerPlanet(star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness);
|
||||
planet.setBiome(biome);
|
||||
this.loadingDim = null;
|
||||
exec.log(TextColor.GREEN + "Welt %s wurde erfolgreich in Dimension '%s' konvertiert", dir, display);
|
||||
|
@ -87,7 +140,7 @@ public class CommandLoad extends Command {
|
|||
}
|
||||
return;
|
||||
}
|
||||
Planet planet = UniverseRegistry.registerPlanet(star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness);
|
||||
Planet planet = registerPlanet(star, name, display, sky, fog, clouds, orbit, rotation, (float)offset, (float)gravity, (float)temperature, brightness);
|
||||
planet.setBiome(biome);
|
||||
exec.log(TextColor.GREEN + "Dimension '%s' wurde registriert", display);
|
||||
if(teleport && ((Player)exec).getPresentEntity() != null)
|
||||
|
|
29
server/src/main/java/server/init/TeleportRegistry.java
Normal file
29
server/src/main/java/server/init/TeleportRegistry.java
Normal file
|
@ -0,0 +1,29 @@
|
|||
package server.init;
|
||||
|
||||
import java.util.Map;
|
||||
import common.collect.Maps;
|
||||
import common.dimension.Dimension;
|
||||
import common.init.UniverseRegistry;
|
||||
import common.util.PortalType;
|
||||
|
||||
public abstract class TeleportRegistry {
|
||||
private static final Map<Integer, Integer> PORTALS = Maps.newHashMap();
|
||||
|
||||
public static Dimension getPortalDest(Dimension src, PortalType portal) {
|
||||
return PORTALS.containsKey((portal.ordinal() << 20) | UniverseRegistry.getId(src)) ? UniverseRegistry.getDimension(PORTALS.get((portal.ordinal() << 20) | UniverseRegistry.getId(src))) :
|
||||
(PORTALS.containsKey(portal.ordinal() | 0x7ff00000) ? UniverseRegistry.getDimension(PORTALS.get(portal.ordinal() | 0x7ff00000)) : src);
|
||||
}
|
||||
|
||||
|
||||
private static void registerPortal(PortalType portal, String src, String dest) {
|
||||
PORTALS.put((portal.ordinal() << 20) | UniverseRegistry.getId(UniverseRegistry.getDimension(src)), UniverseRegistry.getId(UniverseRegistry.getDimension(dest)));
|
||||
}
|
||||
|
||||
private static void registerPortal(PortalType portal, String dest) {
|
||||
PORTALS.put(portal.ordinal() | 0x7ff00000, UniverseRegistry.getId(UniverseRegistry.getDimension(dest)));
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
|
||||
}
|
||||
}
|
|
@ -52,6 +52,7 @@ import common.packet.SPacketBiome;
|
|||
import common.packet.SPacketBlockAction;
|
||||
import common.packet.SPacketBlockBreakAnim;
|
||||
import common.packet.SPacketBlockChange;
|
||||
import common.packet.SPacketCelestials;
|
||||
import common.packet.SPacketMultiBlockChange;
|
||||
import common.rng.Random;
|
||||
import common.rng.WeightedList;
|
||||
|
@ -80,6 +81,7 @@ import server.Server;
|
|||
import server.biome.GenBiome;
|
||||
import server.biome.RngSpawn;
|
||||
import server.clipboard.ClipboardBlock;
|
||||
import server.init.TeleportRegistry;
|
||||
import server.network.Player;
|
||||
import server.vars.SVars;
|
||||
import server.village.VillageCollection;
|
||||
|
@ -169,10 +171,7 @@ public final class WorldServer extends AWorldServer {
|
|||
private boolean populate;
|
||||
|
||||
private boolean updateForced;
|
||||
// private boolean resetWeather;
|
||||
private boolean loadersModified;
|
||||
// private boolean warpsModified;
|
||||
private boolean exterminated;
|
||||
private int emptyTicks;
|
||||
private int blockEvtIdx;
|
||||
private int trackDistance;
|
||||
|
@ -318,47 +317,20 @@ public final class WorldServer extends AWorldServer {
|
|||
this.updateViewRadius();
|
||||
this.chunkDir = new File(new File("chunk"), UniverseRegistry.getName(dim));
|
||||
this.chunkDir.mkdirs();
|
||||
if(!Vars.seed.isEmpty())
|
||||
this.rand.setSeed((long)Vars.seed.hashCode() ^ ~((long)UniverseRegistry.getName(dim).hashCode()));
|
||||
this.seed = this.rand.longv();
|
||||
this.dimension.setSeed(this.seed);
|
||||
TagObject tag = null;
|
||||
try {
|
||||
File dat = new File(this.chunkDir, "data.cdt");
|
||||
if(dat.exists() && dat.isFile())
|
||||
tag = TagObject.readGZip(dat);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Weltdaten nicht laden");
|
||||
}
|
||||
if(tag != null) {
|
||||
this.exterminated = tag.getBool("Exterminated");
|
||||
this.time = tag.getLong("Time");
|
||||
if(tag.hasObject("Generator")) {
|
||||
this.dimension.readGenerator(tag.getObject("Generator"));
|
||||
if(this.dimension.getType().weather && !this.exterminated)
|
||||
this.weather = this.dimension.getWeather();
|
||||
this.seed = this.dimension.getSeed();
|
||||
}
|
||||
if(this.dimension.getType().weather && !this.exterminated)
|
||||
this.weather = Weather.getByName(tag.getString("Weather"));
|
||||
if(this.weather == null) {
|
||||
this.weather = this.dimension.getWeather();
|
||||
// this.dataModified = true;
|
||||
}
|
||||
// ...
|
||||
}
|
||||
else {
|
||||
Log.TICK.info("Startwert für %s: %d" + (Vars.seed.isEmpty() ? "" : " von Basiswert '%s'"), this.dimension.getFormattedName(false), this.seed, Vars.seed);
|
||||
}
|
||||
if(this.exterminated)
|
||||
this.weather = Weather.CLEAR;
|
||||
|
||||
this.seed = this.dimension.getSeed();
|
||||
this.time = this.dimension.getTimeExisted();
|
||||
|
||||
this.grng = new Random(this.seed);
|
||||
this.initGenerator(this.exterminated);
|
||||
this.initGenerator(this.dimension.isExterminated());
|
||||
this.calculateInitialSkylight();
|
||||
this.calculateInitialWeather();
|
||||
this.updatePhysics();
|
||||
tag = null;
|
||||
this.loadLoaderList();
|
||||
}
|
||||
|
||||
private void loadLoaderList() {
|
||||
TagObject tag = null;
|
||||
try {
|
||||
File dat = new File(this.chunkDir, "loaders.cdt");
|
||||
if(dat.exists() && dat.isFile())
|
||||
|
@ -375,7 +347,7 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
this.loadersModified = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Server getServer() {
|
||||
return this.server;
|
||||
|
@ -408,7 +380,7 @@ public final class WorldServer extends AWorldServer {
|
|||
this.setSkylightSubtracted(light);
|
||||
// if(this.primary)
|
||||
// this.info.tick();
|
||||
this.time += 1L;
|
||||
this.dimension.setTimeExisted(this.time += 1L);
|
||||
// this.dataModified = true;
|
||||
if(Vars.dayCycle) // {
|
||||
this.daytime += Vars.timeFlow;
|
||||
|
@ -894,9 +866,6 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
|
||||
public void saveAllChunks() {
|
||||
// if(this.primary) {
|
||||
//
|
||||
// }
|
||||
if(this.loadersModified) {
|
||||
this.loadersModified = false;
|
||||
TagObject loaders = new TagObject();
|
||||
|
@ -922,26 +891,6 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
}
|
||||
}
|
||||
// if(this.warpsModified) {
|
||||
// this.warpsModified = false;
|
||||
// }
|
||||
// if(this.dataModified) {
|
||||
// this.dataModified = false;
|
||||
TagObject data = new TagObject();
|
||||
// data.setLong("Seed", this.seed);
|
||||
data.setObject("Generator", this.dimension.writeGenerator());
|
||||
data.setLong("Time", this.time);
|
||||
data.setBool("Exterminated", this.exterminated);
|
||||
data.setString("Weather", this.weather.getName());
|
||||
// ...
|
||||
File file = new File(this.chunkDir, "data.cdt");
|
||||
try {
|
||||
TagObject.writeGZip(data, file);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.IO.error(e, "Konnte Weltdaten nicht speichern");
|
||||
}
|
||||
// }
|
||||
for(int i = 0; i < this.dataList.size(); ++i) {
|
||||
WorldSavedData wdata = this.dataList.get(i);
|
||||
if(wdata.dirty) {
|
||||
|
@ -1083,8 +1032,7 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
|
||||
public void setWeather(Weather weather) {
|
||||
this.weather = weather;
|
||||
// this.dataModified = true;
|
||||
super.setWeather(weather);
|
||||
this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.SET_WEATHER,
|
||||
weather.ordinal()));
|
||||
}
|
||||
|
@ -1107,7 +1055,7 @@ public final class WorldServer extends AWorldServer {
|
|||
// }
|
||||
// }
|
||||
|
||||
if((this.dimension.getType().weather && !this.exterminated) || force) {
|
||||
if((this.dimension.getType().weather && !this.dimension.isExterminated()) || force) {
|
||||
float prevDarkness = this.darkness;
|
||||
float prevRain = this.rain;
|
||||
float prevFog = this.fog;
|
||||
|
@ -1169,7 +1117,7 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
}
|
||||
|
||||
if((this.dimension.getType().days || (this.dimension.getType().weather && !this.exterminated)) || force) {
|
||||
if((this.dimension.getType().days || (this.dimension.getType().weather && !this.dimension.isExterminated())) || force) {
|
||||
float prevTemp = this.temp;
|
||||
|
||||
float temp = this.getBaseTemperature() + this.weather.getTemperature();
|
||||
|
@ -1516,11 +1464,11 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
|
||||
public boolean isExterminated() {
|
||||
return this.exterminated;
|
||||
return this.dimension.isExterminated();
|
||||
}
|
||||
|
||||
public boolean exterminate() {
|
||||
if(this.exterminated)
|
||||
if(this.dimension.isExterminated())
|
||||
return false;
|
||||
this.resetData(true);
|
||||
this.reloadChunks();
|
||||
|
@ -1537,7 +1485,7 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
|
||||
private void resetData(boolean exterminated) {
|
||||
this.setWeather(exterminated ? Weather.CLEAR : this.dimension.getWeather());
|
||||
this.setWeather(exterminated ? Weather.CLEAR : this.dimension.getDefaultWeather());
|
||||
this.resetWeather();
|
||||
if(!this.loaderList.isEmpty())
|
||||
this.loadersModified = true;
|
||||
|
@ -1556,9 +1504,15 @@ public final class WorldServer extends AWorldServer {
|
|||
return file.isDirectory() || !file.getName().equals("data.cdt");
|
||||
}
|
||||
}));
|
||||
this.exterminated = exterminated;
|
||||
boolean updated = this.dimension.isExterminated() != exterminated;
|
||||
this.dimension.setExterminated(exterminated);
|
||||
this.initGenerator(exterminated);
|
||||
this.reloadChunks();
|
||||
if(updated)
|
||||
for(Player player : this.server.getPlayers()) {
|
||||
if(player.getEntity() != null)
|
||||
player.sendPacket(new SPacketCelestials(player.getEntity().worldObj.dimension));
|
||||
}
|
||||
}
|
||||
|
||||
private void insertChunk(int x, int z) {
|
||||
|
@ -1792,7 +1746,7 @@ public final class WorldServer extends AWorldServer {
|
|||
}
|
||||
|
||||
public void setBiome(BlockPos pos, Biome biome) {
|
||||
if(this.exterminated)
|
||||
if(this.dimension.isExterminated())
|
||||
return;
|
||||
ChunkServer chunk = this.getChunk(pos);
|
||||
if(chunk == null || !chunk.isLoaded())
|
||||
|
@ -2654,6 +2608,10 @@ public final class WorldServer extends AWorldServer {
|
|||
return this.server.getWorld(dimension);
|
||||
}
|
||||
|
||||
public Dimension getPortalDest(PortalType portal) {
|
||||
return TeleportRegistry.getPortalDest(this.dimension, portal);
|
||||
}
|
||||
|
||||
public void markChunkDirty(BlockPos pos) {
|
||||
if(this.isBlockLoaded(pos))
|
||||
this.getChunk(pos).setModified(true);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue