From f613bd2122c506dd837a89a9b8863035f19d1286 Mon Sep 17 00:00:00 2001 From: Sen Date: Sun, 29 Jun 2025 19:09:47 +0200 Subject: [PATCH] extend dimension system, remove dim ids --- client/src/main/java/client/Client.java | 10 +- .../java/client/gui/character/GuiChar.java | 4 +- .../java/client/network/ClientPlayer.java | 14 +- .../common/block/artificial/BlockBed.java | 2 +- .../src/main/java/common/dimension/Area.java | 8 +- .../main/java/common/dimension/Dimension.java | 952 ++++++++---------- .../main/java/common/dimension/Domain.java | 9 +- .../main/java/common/dimension/Galaxy.java | 7 +- .../src/main/java/common/dimension/Moon.java | 8 +- .../main/java/common/dimension/Nameable.java | 34 +- .../main/java/common/dimension/Planet.java | 22 +- .../main/java/common/dimension/Sector.java | 9 +- .../src/main/java/common/dimension/Semi.java | 8 +- .../src/main/java/common/dimension/Space.java | 3 +- .../src/main/java/common/dimension/Star.java | 10 +- .../src/main/java/common/entity/Entity.java | 31 +- .../entity/item/EntityCartContainer.java | 3 +- .../java/common/entity/item/EntityItem.java | 3 +- .../java/common/entity/item/EntityXp.java | 3 +- .../java/common/entity/npc/EntityNPC.java | 44 +- .../java/common/init/UniverseRegistry.java | 767 +++++++------- .../java/common/item/tool/ItemInfoWand.java | 4 +- .../common/item/tool/ItemSpaceNavigator.java | 8 +- .../src/main/java/common/network/IPlayer.java | 5 +- .../common/packet/SPacketDimensionName.java | 10 +- .../java/common/packet/SPacketJoinGame.java | 35 +- .../java/common/packet/SPacketRespawn.java | 134 ++- .../src/main/java/common/util/Position.java | 69 +- common/src/main/java/common/util/Quartet.java | 4 + .../src/main/java/common/util/WorldPos.java | 28 +- .../main/java/common/world/AWorldServer.java | 2 +- server/src/main/java/server/Server.java | 74 +- .../java/server/command/DimensionParser.java | 11 +- .../main/java/server/command/WorldParser.java | 7 +- .../command/commands/CommandDeathspot.java | 3 +- .../server/command/commands/CommandLoad.java | 6 +- .../command/commands/CommandOfflinetp.java | 3 +- .../command/commands/CommandReturn.java | 3 +- .../server/command/commands/CommandTele.java | 2 +- .../server/command/commands/CommandTime.java | 2 +- .../server/command/commands/CommandTp.java | 3 +- .../server/command/commands/CommandWarp.java | 7 +- .../server/command/commands/CommandWorld.java | 2 +- .../src/main/java/server/network/Player.java | 44 +- .../src/main/java/server/world/Converter.java | 5 - .../main/java/server/world/WorldServer.java | 77 +- 46 files changed, 1216 insertions(+), 1283 deletions(-) create mode 100644 common/src/main/java/common/util/Quartet.java diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 69d904fb..3fae47a4 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -498,6 +498,8 @@ public class Client implements IThreadListener { private boolean waitingForFile; private boolean refreshing; + public String dimensionName; + public String message; public int total; public int progress = -1; @@ -1590,7 +1592,7 @@ public class Client implements IThreadListener { // SKC.loaded(true); } - public void setDimensionAndSpawnPlayer(int dimension, int type) + public void setDimensionAndSpawnPlayer(int type) { this.world.removeAllEntities(); int i = 0; @@ -1839,9 +1841,9 @@ public class Client implements IThreadListener { if(this.world.isBlockLoaded(blockpos)) { ChunkClient chunk = this.world.getChunk(blockpos); biome = chunk.getBiome(blockpos); - bline = "Biom: " + biome.display + " (" + biome.id + ")" + /* (this.debugHideInfo ? "" : */ (", D: " + + bline = "Biom: " + biome.display + " (" + biome.name + ")" + /* (this.debugHideInfo ? "" : */ (", D: " + TextColor.stripCodes(this.world.dimension.getFormattedName(false)) + - " (" + this.world.dimension.getDimensionId() + ")"); + " (" + (this.dimensionName == null ? UniverseRegistry.getName(this.world.dimension) : this.dimensionName) + ")"); lline = "Licht: " + chunk.getLightSub(blockpos, 0) + " (" + chunk.getLight(LightType.SKY, blockpos) + " Himmel, " + chunk.getLight(LightType.BLOCK, blockpos) + " Blöcke, " + String.format( "%.1f", this.world.getSunBrightness(1.0f) * 15.0f) + " Welt), A: " @@ -1850,7 +1852,7 @@ public class Client implements IThreadListener { else { bline = "Biom: , D: " + TextColor.stripCodes(this.world.dimension.getFormattedName(false)) + - " (" + this.world.dimension.getDimensionId() + ")"; + " (" + (this.dimensionName == null ? UniverseRegistry.getName(this.world.dimension) : this.dimensionName) + ")"; lline = "Licht: " + String.format( "%.1f", this.world.getSunBrightness(1.0f) * 15.0f) + " Welt, A: " + String.format("%.3f", this.world.getCelestialAngle(1.0f)); diff --git a/client/src/main/java/client/gui/character/GuiChar.java b/client/src/main/java/client/gui/character/GuiChar.java index 33cc771d..52b9e305 100755 --- a/client/src/main/java/client/gui/character/GuiChar.java +++ b/client/src/main/java/client/gui/character/GuiChar.java @@ -385,7 +385,7 @@ public class GuiChar extends GuiList GuiChar.this.gm.displayGuiScreen(GuiLoading.makeWaitTask("Lade Welt ...")); Dimension dim = UniverseRegistry.getBaseDimensions().get(GuiChar.this.dimension); GuiChar.this.gm.player.client.addToSendQueue(new CPacketMessage(CPacketMessage.Type.INFO, descField.getText())); - GuiChar.this.gm.player.client.addToSendQueue(new CPacketAction(CPacketAction.Action.CLOSE_EDITOR, dim.getDimensionId())); + GuiChar.this.gm.player.client.addToSendQueue(new CPacketAction(CPacketAction.Action.CLOSE_EDITOR, UniverseRegistry.getId(dim))); } } }, "Charakter erstellen")); @@ -416,7 +416,7 @@ public class GuiChar extends GuiList Dimension dim = UniverseRegistry.getDimension(egg.origin()); if(dim != null) { for(int z = 0; z < UniverseRegistry.getBaseDimensions().size(); z++) { - if(UniverseRegistry.getBaseDimensions().get(z).getDimensionId() == dim.getDimensionId()) { + if(UniverseRegistry.getBaseDimensions().get(z) == dim) { this.dimension = z; break; } diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index 5fb944c1..78162908 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -218,6 +218,7 @@ public class ClientPlayer implements IClientPlayer public void handleJoinGame(SPacketJoinGame packetIn) { NetHandler.checkThread(packetIn, this, this.gm); + this.gm.dimensionName = packetIn.getDimName(); this.gm.charEditor = packetIn.isInEditor(); this.gm.controller = new PlayerController(this.gm, this); this.world = new WorldClient(this.gm, packetIn.getDimension()); @@ -1064,10 +1065,9 @@ public class ClientPlayer implements IClientPlayer { NetHandler.checkThread(packetIn, this, this.gm, this.world); this.gm.charEditor = packetIn.isInEditor(); - Dimension dim = packetIn.getDimension(); - if (dim.getDimensionId() != this.world.dimension.getDimensionId()) // this.gameController.thePlayer.dimension) - { + if(dim != null) { + this.gm.dimensionName = packetIn.getDimName(); this.loaded = false; // if(dim.getDimensionId() < 0 && this.gameController.thePlayer.dimension >= 0) { // this.travelSound = "portal.travel"; @@ -1082,7 +1082,7 @@ public class ClientPlayer implements IClientPlayer // this.gameController.displayGuiScreen(GuiSkin.INSTANCE); // } - this.gm.setDimensionAndSpawnPlayer(dim.getDimensionId(), packetIn.getEntityType()); + this.gm.setDimensionAndSpawnPlayer(packetIn.getEntityType()); this.gm.displayGuiScreen(this.gm.charEditor ? GuiChar.INSTANCE : null); // this.gameController.controller.setCheat(packetIn.getCheat()); } @@ -1928,7 +1928,9 @@ public class ClientPlayer implements IClientPlayer public void handleDimName(SPacketDimensionName packetIn) { NetHandler.checkThread(packetIn, this, this.gm, this.world); - this.world.dimension.setFullName(packetIn.getFullName()); - this.world.dimension.setCustomName(packetIn.getCustomName()); + if(this.world.dimension.isCustom()) { + this.world.dimension.setCustomName(packetIn.getCustomName()); + this.world.dimension.setDisplayName(packetIn.getFullName()); + } } } diff --git a/common/src/main/java/common/block/artificial/BlockBed.java b/common/src/main/java/common/block/artificial/BlockBed.java index dc7701c9..aa4c3fcc 100755 --- a/common/src/main/java/common/block/artificial/BlockBed.java +++ b/common/src/main/java/common/block/artificial/BlockBed.java @@ -70,7 +70,7 @@ public class BlockBed extends Block implements Rotatable { } if(player.isEntityAlive() && Math.abs(player.posX - (double)pos.getX()) <= 3.0D && Math.abs(player.posY - (double)pos.getY()) <= 2.0D && Math.abs(player.posZ - (double)pos.getZ()) <= 3.0D) { - player.setSpawnPoint(new WorldPos(pos, player.worldObj.dimension.getDimensionId())); + player.setSpawnPoint(new WorldPos(pos, player.worldObj)); player.connection.addHotbar(TextColor.DGREEN + "Dein Einstiegspunkt wurde auf %s bei [%s, %s, %s] gesetzt", player.worldObj.dimension.getFormattedName(false), player.getSpawnPoint().getX(), player.getSpawnPoint().getY(), player.getSpawnPoint().getZ()); diff --git a/common/src/main/java/common/dimension/Area.java b/common/src/main/java/common/dimension/Area.java index 125d1cba..d6c96b66 100755 --- a/common/src/main/java/common/dimension/Area.java +++ b/common/src/main/java/common/dimension/Area.java @@ -1,12 +1,12 @@ package common.dimension; public final class Area extends Dimension { - Area(int id, String name) { - super(id, name); + Area() { + super(true); } - public Area(int id, String name, int sky, int fog, float temperature, int brightness) { - super(id, name); + public Area(int sky, int fog, float temperature, int brightness) { + super(false); this.setPhysics(1L, 1L, 0.0f, 10.0f, temperature, brightness); this.setSkyColor(sky).setFogColor(fog); } diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index eb4fee9b..66c12e43 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -17,7 +17,7 @@ import common.util.Vec3; import common.world.State; import common.world.Weather; -public abstract class Dimension extends Nameable implements Comparable { +public abstract class Dimension extends Nameable { public class GeneratorSettings { public float coordinateScale = 684.412F; public float heightScale = 684.412F; @@ -141,9 +141,6 @@ public abstract class Dimension extends Nameable implements Comparable= UniverseRegistry.MORE_DIM_ID) { - this.seaLevel = tag.getInt("SeaLevel"); - this.filler = readState(tag, "FillerBlock", Blocks.stone.getState()); - this.liquid = readState(tag, "LiquidBlock", Blocks.water.getState()); - } - } - if(generator) { - if(all || this.id >= UniverseRegistry.MORE_DIM_ID) { - this.noiseGen.coordinateScale = tag.getFloat("CoordScale"); - this.noiseGen.heightScale = tag.getFloat("HeightScale"); - this.noiseGen.upperLimitScale = tag.getFloat("UpperLmtScale"); - this.noiseGen.lowerLimitScale = tag.getFloat("LowerLmtScale"); - this.noiseGen.depthNoiseScaleX = tag.getFloat("DepthScaleX"); - this.noiseGen.depthNoiseScaleZ = tag.getFloat("DepthScaleZ"); - this.noiseGen.amplification = tag.getFloat("Amplification"); - this.noiseGen.mainNoiseScaleX = tag.getFloat("ScaleX"); - this.noiseGen.mainNoiseScaleY = tag.getFloat("ScaleY"); - this.noiseGen.mainNoiseScaleZ = tag.getFloat("ScaleZ"); - this.noiseGen.baseSize = tag.getFloat("BaseSize"); - this.noiseGen.stretchY = tag.getFloat("Stretch"); - this.noiseGen.biomeDepthWeight = tag.getFloat("BDepthWeight"); - this.noiseGen.biomeDepthOffset = tag.getFloat("BDepthOffset"); - this.noiseGen.biomeScaleWeight = tag.getFloat("BScaleWeight"); - this.noiseGen.biomeScaleOffset = tag.getFloat("BScaleOffset"); - this.generatorType = GeneratorType.getByName(tag.getString("Generator")); - this.replacerType = ReplacerType.getByName(tag.getString("Replacer")); - this.mobs = tag.getBool("MobGen"); - this.snow = tag.getBool("SnowGen"); - this.ceiling = tag.getBool("Ceiling"); - this.caves = tag.getBool("Caves"); - this.ravines = tag.getBool("Ravines"); - this.strideCaves = tag.getBool("AltCaves"); - this.useStrongholds = tag.getBool("Strongholds"); - this.useVillages = tag.getBool("Villages"); - this.useMineshafts = tag.getBool("Mineshafts"); - this.useScattered = tag.getBool("Scattered"); - this.useFortresses = tag.getBool("Fortresses"); - this.dungeons = tag.getInt("Dungeons"); - this.biomeSize = tag.getInt("BiomeSize"); - this.riverSize = tag.getInt("RiverSize"); - this.snowRarity = tag.getInt("SnowRarity"); - this.seaRarity = tag.getInt("SeaRarity"); - this.addRarity = tag.getInt("AddRarity"); - // this.biomeRarity = tag.getInteger("BiomeRarity"); - this.defaultBiome = Biome.findByName(tag.getString("DefaultBiome")); - this.semiFixed = tag.getBool("SemiFixed"); - this.defaultWeather = Weather.getByName(tag.getString("DefaultWeather")); - this.defaultWeather = this.defaultWeather == null ? Weather.CLEAR : this.defaultWeather; - this.defaultLeaves = LeavesType.getByName(tag.getString("DefaultLeaves")); - this.defaultLeaves = this.defaultLeaves == null ? LeavesType.SPRING : this.defaultLeaves; - this.top = readState(tag, "TopBlock", Blocks.dirt.getState()); - this.surface = readState(tag, "SurfaceBlock", Blocks.grass.getState()); - this.alt1 = readState(tag, "AltBlock1", Blocks.gravel.getState()); - this.alt2 = readState(tag, "AltBlock2", Blocks.sand.getState()); - this.caveFiller = readState(tag, "CaveFillBlock", Blocks.lava.getState()); - if(tag.hasStringArray("Layers")) { - String[] list = tag.getStringArray("Layers"); - this.layers = new State[list.length]; - for(int z = 0; z < this.layers.length; z++) { - this.layers[z] = BlockRegistry.byName(list[z], Blocks.air.getState()); - } - } - else { - this.layers = null; - } - if(tag.hasStringArray("AddBiomes")) { - String[] list = tag.getStringArray("AddBiomes"); - if(list.length == 0) { - this.addBiomes = null; - } - else { - this.addBiomes = new Biome[list.length]; - for(int z = 0; z < this.addBiomes.length; z++) { - this.addBiomes[z] = Biome.findByName(list[z]); - } - } - } - else { - this.addBiomes = null; - } - if(tag.hasStringArray("FrostBiomes")) { - String[] list = tag.getStringArray("FrostBiomes"); - if(list.length == 0) { - this.frostBiomes = null; - } - else { - this.frostBiomes = new Biome[list.length]; - for(int z = 0; z < this.frostBiomes.length; z++) { - this.frostBiomes[z] = Biome.findByName(list[z]); - } - } - } - else { - this.frostBiomes = null; - } - if(tag.hasStringArray("ColdBiomes")) { - String[] list = tag.getStringArray("ColdBiomes"); - if(list.length == 0) { - this.coldBiomes = null; - } - else { - this.coldBiomes = new Biome[list.length]; - for(int z = 0; z < this.coldBiomes.length; z++) { - this.coldBiomes[z] = Biome.findByName(list[z]); - } - } - } - else { - this.coldBiomes = null; - } - if(tag.hasStringArray("MediumBiomes")) { - String[] list = tag.getStringArray("MediumBiomes"); - if(list.length == 0) { - this.mediumBiomes = null; - } - else { - this.mediumBiomes = new Biome[list.length]; - for(int z = 0; z < this.mediumBiomes.length; z++) { - this.mediumBiomes[z] = Biome.findByName(list[z]); - } - } - } - else { - this.mediumBiomes = null; - } - if(tag.hasStringArray("HotBiomes")) { - String[] list = tag.getStringArray("HotBiomes"); - if(list.length == 0) { - this.hotBiomes = null; - } - else { - this.hotBiomes = new Biome[list.length]; - for(int z = 0; z < this.hotBiomes.length; z++) { - this.hotBiomes[z] = Biome.findByName(list[z]); - } - } - } - else { - this.hotBiomes = null; - } - this.ores.clear(); - if(tag.hasList("Ores")) { - List list = tag.getList("Ores"); - for(int z = 0; z < list.size(); z++) { - TagObject gen = list.get(z); - this.ores.add(new Ore(readState(gen, Blocks.iron_ore.getState()), - gen.getInt("Count"), gen.getInt("Add"), gen.getInt("Size"), - gen.getInt("MinC"), gen.getInt("MaxS"), gen.getBool("Distrib"))); - } - } - this.lakes.clear(); - if(tag.hasList("Lakes")) { - List list = tag.getList("Lakes"); - for(int z = 0; z < list.size(); z++) { - TagObject gen = list.get(z); - this.lakes.add(new Lake( - readState(gen, Blocks.water.getState()), - readState(gen, "Filler", null), readState(gen, "Top", null), - gen.getInt("Chance"), gen.getInt("Min"), gen.getInt("Max"), gen.getBool("Ratiod"))); - } - } - this.liquids.clear(); - if(tag.hasList("Liquids")) { - List list = tag.getList("Liquids"); - for(int z = 0; z < list.size(); z++) { - TagObject gen = list.get(z); - this.liquids.add(new Liquid( - readState(gen, Blocks.flowing_water.getState()), - gen.getInt("Chance"), gen.getInt("Min"), gen.getInt("Max"), gen.getBool("Lower"))); - } - } - this.populated = !tag.hasBool("NoPopulation") || !tag.getBool("NoPopulation"); - } + this.seaLevel = tag.getInt("SeaLevel"); + this.filler = readState(tag, "FillerBlock", Blocks.stone.getState()); + this.liquid = readState(tag, "LiquidBlock", Blocks.water.getState()); + this.noiseGen.coordinateScale = tag.getFloat("CoordScale"); + this.noiseGen.heightScale = tag.getFloat("HeightScale"); + this.noiseGen.upperLimitScale = tag.getFloat("UpperLmtScale"); + this.noiseGen.lowerLimitScale = tag.getFloat("LowerLmtScale"); + this.noiseGen.depthNoiseScaleX = tag.getFloat("DepthScaleX"); + this.noiseGen.depthNoiseScaleZ = tag.getFloat("DepthScaleZ"); + this.noiseGen.amplification = tag.getFloat("Amplification"); + this.noiseGen.mainNoiseScaleX = tag.getFloat("ScaleX"); + this.noiseGen.mainNoiseScaleY = tag.getFloat("ScaleY"); + this.noiseGen.mainNoiseScaleZ = tag.getFloat("ScaleZ"); + this.noiseGen.baseSize = tag.getFloat("BaseSize"); + this.noiseGen.stretchY = tag.getFloat("Stretch"); + this.noiseGen.biomeDepthWeight = tag.getFloat("BDepthWeight"); + this.noiseGen.biomeDepthOffset = tag.getFloat("BDepthOffset"); + this.noiseGen.biomeScaleWeight = tag.getFloat("BScaleWeight"); + this.noiseGen.biomeScaleOffset = tag.getFloat("BScaleOffset"); + this.generatorType = GeneratorType.getByName(tag.getString("Generator")); + this.replacerType = ReplacerType.getByName(tag.getString("Replacer")); + this.mobs = tag.getBool("MobGen"); + this.snow = tag.getBool("SnowGen"); + this.ceiling = tag.getBool("Ceiling"); + this.caves = tag.getBool("Caves"); + this.ravines = tag.getBool("Ravines"); + this.strideCaves = tag.getBool("AltCaves"); + this.useStrongholds = tag.getBool("Strongholds"); + this.useVillages = tag.getBool("Villages"); + this.useMineshafts = tag.getBool("Mineshafts"); + this.useScattered = tag.getBool("Scattered"); + this.useFortresses = tag.getBool("Fortresses"); + this.dungeons = tag.getInt("Dungeons"); + this.biomeSize = tag.getInt("BiomeSize"); + this.riverSize = tag.getInt("RiverSize"); + this.snowRarity = tag.getInt("SnowRarity"); + this.seaRarity = tag.getInt("SeaRarity"); + this.addRarity = tag.getInt("AddRarity"); + this.defaultBiome = Biome.findByName(tag.getString("DefaultBiome")); + this.semiFixed = tag.getBool("SemiFixed"); + this.defaultWeather = Weather.getByName(tag.getString("DefaultWeather")); + this.defaultWeather = this.defaultWeather == null ? Weather.CLEAR : this.defaultWeather; + this.defaultLeaves = LeavesType.getByName(tag.getString("DefaultLeaves")); + this.defaultLeaves = this.defaultLeaves == null ? LeavesType.SPRING : this.defaultLeaves; + this.top = readState(tag, "TopBlock", Blocks.dirt.getState()); + this.surface = readState(tag, "SurfaceBlock", Blocks.grass.getState()); + this.alt1 = readState(tag, "AltBlock1", Blocks.gravel.getState()); + this.alt2 = readState(tag, "AltBlock2", Blocks.sand.getState()); + this.caveFiller = readState(tag, "CaveFillBlock", Blocks.lava.getState()); + if(tag.hasStringArray("Layers")) { + String[] list = tag.getStringArray("Layers"); + this.layers = new State[list.length]; + for(int z = 0; z < this.layers.length; z++) { + this.layers[z] = BlockRegistry.byName(list[z], Blocks.air.getState()); + } } else { - this.fullName = tag.getString("FullName"); - this.readTags(tag); + this.layers = null; } -// this.customName = tag.hasString("CustomName") ? tag.getString("CustomName") : null; - if(all || !generator || this.id >= UniverseRegistry.MORE_DIM_ID) { - this.denseFog = tag.getBool("DenseFog"); - this.timeQualifier = tag.getInt("ImperialTime"); - this.brightness = tag.getInt("Brightness"); - this.skyColor = tag.getInt("SkyColor"); - this.fogColor = tag.getInt("FogColor"); - this.cloudColor = tag.getInt("CloudColor"); - this.gravity = tag.getFloat("Gravity"); - this.temperature = tag.getFloat("Temperature"); - this.orbitOffset = tag.getFloat("OrbitOffset"); - this.cloudHeight = tag.getFloat("CloudHeight"); - this.starBrightness = tag.getFloat("StarBrighness"); - this.deepstarBrightness = tag.getFloat("DStarBrightness"); - this.orbitalPeriod = tag.getLong("OrbitalPeriod"); - this.rotationPeriod = tag.getLong("RotationPeriod"); - this.cloudTexture = CloudType.getByName(tag.getString("CloudTexture")); - this.skyboxTexture = tag.hasString("SkyBoxTexture") ? - SkyboxType.getByName(tag.getString("SkyBoxTexture")) : null; - if(tag.hasInt("StarColor")) { - this.setStarColor(tag.getInt("StarColor")); - } - else if(tag.hasObject("StarColorFnc")) { - TagObject fnc = tag.getObject("StarColorFnc"); - this.setStarColorSin(fnc.getFloat("Period"), fnc.getFloat("Det"), fnc.getFloat("Dist"), - fnc.getInt("Color"), fnc.getByte("DetChn"), fnc.getByte("DistChn")); + if(tag.hasStringArray("AddBiomes")) { + String[] list = tag.getStringArray("AddBiomes"); + if(list.length == 0) { + this.addBiomes = null; } else { - this.starColorFunc = null; + this.addBiomes = new Biome[list.length]; + for(int z = 0; z < this.addBiomes.length; z++) { + this.addBiomes[z] = Biome.findByName(list[z]); + } } - if(tag.hasInt("DStarColor")) { - this.setDeepStarColor(tag.getInt("DStarColor")); - } - else if(tag.hasObject("DStarColorFnc")) { - TagObject fnc = tag.getObject("DStarColorFnc"); - this.setDeepStarColorSin(fnc.getFloat("Period"), fnc.getFloat("Det"), fnc.getFloat("Dist"), - fnc.getInt("Color"), fnc.getByte("DetChn"), fnc.getByte("DistChn")); - } - else { - this.deepstarColorFunc = null; - } - } - } - - public final TagObject dumpTags() { - return this.toTags(true, false, true); - } - - public final TagObject toTags(boolean generator) { - return this.toTags(generator, !generator, false); - } - - private final TagObject toTags(boolean generator, boolean partialGen, boolean all) { - TagObject tag = (all || !generator || this.id >= UniverseRegistry.MORE_DIM_ID) ? this.toTags() : new TagObject(); - if(this == Space.INSTANCE) { - if(generator || partialGen) - tag.setLong("Seed", this.seed); - return tag; - } - if(generator || partialGen) { - tag.setLong("Seed", this.seed); - if(partialGen || all || this.id >= UniverseRegistry.MORE_DIM_ID) { - tag.setInt("SeaLevel", this.seaLevel); - writeState(tag, "FillerBlock", this.filler); - writeState(tag, "LiquidBlock", this.liquid); - } - } - if(generator) { - if(all || this.id >= UniverseRegistry.MORE_DIM_ID) { - tag.setFloat("CoordScale", this.noiseGen.coordinateScale); - tag.setFloat("HeightScale", this.noiseGen.heightScale); - tag.setFloat("UpperLmtScale", this.noiseGen.upperLimitScale); - tag.setFloat("LowerLmtScale", this.noiseGen.lowerLimitScale); - tag.setFloat("DepthScaleX", this.noiseGen.depthNoiseScaleX); - tag.setFloat("DepthScaleZ", this.noiseGen.depthNoiseScaleZ); - tag.setFloat("Amplification", this.noiseGen.amplification); - tag.setFloat("ScaleX", this.noiseGen.mainNoiseScaleX); - tag.setFloat("ScaleY", this.noiseGen.mainNoiseScaleY); - tag.setFloat("ScaleZ", this.noiseGen.mainNoiseScaleZ); - tag.setFloat("BaseSize", this.noiseGen.baseSize); - tag.setFloat("Stretch", this.noiseGen.stretchY); - tag.setFloat("BDepthWeight", this.noiseGen.biomeDepthWeight); - tag.setFloat("BDepthOffset", this.noiseGen.biomeDepthOffset); - tag.setFloat("BScaleWeight", this.noiseGen.biomeScaleWeight); - tag.setFloat("BScaleOffset", this.noiseGen.biomeScaleOffset); - tag.setString("Generator", this.generatorType.getName()); - tag.setString("Replacer", this.replacerType.getName()); - tag.setBool("MobGen", this.mobs); - tag.setBool("SnowGen", this.snow); - tag.setBool("Ceiling", this.ceiling); - tag.setBool("Caves", this.caves); - tag.setBool("Ravines", this.ravines); - tag.setBool("AltCaves", this.strideCaves); - tag.setBool("Strongholds", this.useStrongholds); - tag.setBool("Villages", this.useVillages); - tag.setBool("Mineshafts", this.useMineshafts); - tag.setBool("Scattered", this.useScattered); - tag.setBool("Fortresses", this.useFortresses); - tag.setInt("Dungeons", this.dungeons); - tag.setInt("BiomeSize", this.biomeSize); - tag.setInt("RiverSize", this.riverSize); - tag.setInt("SnowRarity", this.snowRarity); - tag.setInt("SeaRarity", this.seaRarity); - tag.setInt("AddRarity", this.addRarity); - // tag.setInteger("BiomeRarity", this.biomeRarity); - // if(this.defaultBiome != null) - tag.setString("DefaultBiome", this.defaultBiome.name.toLowerCase()); - // if(this.mainBiome != null) - tag.setBool("SemiFixed", this.semiFixed); - tag.setString("DefaultWeather", this.defaultWeather.getName()); - tag.setString("DefaultLeaves", this.defaultLeaves.getName()); - writeState(tag, "TopBlock", this.top); - writeState(tag, "SurfaceBlock", this.surface); - writeState(tag, "AltBlock1", this.alt1); - writeState(tag, "AltBlock2", this.alt2); - writeState(tag, "CaveFillBlock", this.caveFiller); - if(this.layers != null) { - String[] list = new String[this.layers.length]; - for(int z = 0; z < this.layers.length; z++) { - list[z] = BlockRegistry.getName(this.layers[z]); - } - tag.setStringArray("Layers", list); - } - if(this.addBiomes != null) { - String[] list = new String[this.addBiomes.length]; - for(int z = 0; z < this.addBiomes.length; z++) { - list[z] = this.addBiomes[z].name.toLowerCase(); - } - tag.setStringArray("AddBiomes", list); - } - if(this.frostBiomes != null) { - String[] list = new String[this.frostBiomes.length]; - for(int z = 0; z < this.frostBiomes.length; z++) { - list[z] = this.frostBiomes[z].name.toLowerCase(); - } - tag.setStringArray("FrostBiomes", list); - } - if(this.coldBiomes != null) { - String[] list = new String[this.coldBiomes.length]; - for(int z = 0; z < this.coldBiomes.length; z++) { - list[z] = this.coldBiomes[z].name.toLowerCase(); - } - tag.setStringArray("ColdBiomes", list); - } - if(this.mediumBiomes != null) { - String[] list = new String[this.mediumBiomes.length]; - for(int z = 0; z < this.mediumBiomes.length; z++) { - list[z] = this.mediumBiomes[z].name.toLowerCase(); - } - tag.setStringArray("MediumBiomes", list); - } - if(this.hotBiomes != null) { - String[] list = new String[this.hotBiomes.length]; - for(int z = 0; z < this.hotBiomes.length; z++) { - list[z] = this.hotBiomes[z].name.toLowerCase(); - } - tag.setStringArray("HotBiomes", list); - } - if(!this.ores.isEmpty()) { - List list = Lists.newArrayList(); - for(Ore gen : this.ores) { - TagObject ore = new TagObject(); - writeState(ore, gen.state()); - ore.setBool("Distrib", gen.dist()); - ore.setInt("Size", gen.size()); - ore.setInt("Count", gen.count()); - ore.setInt("Add", gen.more()); - ore.setInt("MinC", gen.min()); - ore.setInt("MaxS", gen.max()); - list.add(ore); - } - tag.setList("Ores", list); - } - if(!this.lakes.isEmpty()) { - List list = Lists.newArrayList(); - for(Lake gen : this.lakes) { - TagObject lake = new TagObject(); - writeState(lake, gen.state()); - writeState(lake, "Filler", gen.filler()); - writeState(lake, "Top", gen.top()); - lake.setBool("Ratiod", gen.ratiod()); - lake.setInt("Chance", gen.chance()); - lake.setInt("Min", gen.minHeight()); - lake.setInt("Max", gen.maxHeight()); - list.add(lake); - } - tag.setList("Lakes", list); - } - if(!this.liquids.isEmpty()) { - List list = Lists.newArrayList(); - for(Liquid gen : this.liquids) { - TagObject liquid = new TagObject(); - writeState(liquid, gen.state()); - liquid.setBool("Lower", gen.lower()); - liquid.setInt("Chance", gen.chance()); - liquid.setInt("Min", gen.minHeight()); - liquid.setInt("Max", gen.maxHeight()); - list.add(liquid); - } - tag.setList("Liquids", list); - } - if(!this.populated) - tag.setBool("NoPopulation", true); - } } else { - tag.setString("FullName", this.getFormattedName(true)); - this.writeTags(tag); + this.addBiomes = null; } -// if(this.customName != null) -// tag.setString("CustomName", this.customName); - if(all || !generator || this.id >= UniverseRegistry.MORE_DIM_ID) { - tag.setBool("DenseFog", this.denseFog); - tag.setInt("ImperialTime", this.timeQualifier); - tag.setInt("Brightness", this.brightness); - tag.setInt("SkyColor", this.skyColor); - tag.setInt("FogColor", this.fogColor); - tag.setInt("CloudColor", this.cloudColor); - tag.setFloat("Gravity", this.gravity); - tag.setFloat("Temperature", this.temperature); - tag.setFloat("OrbitOffset", this.orbitOffset); - tag.setFloat("CloudHeight", this.cloudHeight); - tag.setFloat("StarBrighness", this.starBrightness); - tag.setFloat("DStarBrightness", this.deepstarBrightness); - tag.setLong("OrbitalPeriod", this.orbitalPeriod); - tag.setLong("RotationPeriod", this.rotationPeriod); - tag.setString("CloudTexture", this.cloudTexture.toString()); - if(this.skyboxTexture != null) - tag.setString("SkyBoxTexture", this.skyboxTexture.toString()); - if(this.starColorFunc instanceof SingleColorGen) { - tag.setInt("StarColor", ((SingleColorGen)this.starColorFunc).color); + if(tag.hasStringArray("FrostBiomes")) { + String[] list = tag.getStringArray("FrostBiomes"); + if(list.length == 0) { + this.frostBiomes = null; } - else if(this.starColorFunc instanceof SinusColorGen) { - TagObject fnc = new TagObject(); - fnc.setFloat("Period", ((SinusColorGen)this.starColorFunc).period); - fnc.setFloat("Det", ((SinusColorGen)this.starColorFunc).det); - fnc.setFloat("Dist", ((SinusColorGen)this.starColorFunc).dist); - fnc.setInt("Color", ((SinusColorGen)this.starColorFunc).color); - fnc.setByte("DetChn", (byte)((SinusColorGen)this.starColorFunc).detChn); - fnc.setByte("DistChn", (byte)((SinusColorGen)this.starColorFunc).distChn); - tag.setObject("StarColorFnc", fnc); + else { + this.frostBiomes = new Biome[list.length]; + for(int z = 0; z < this.frostBiomes.length; z++) { + this.frostBiomes[z] = Biome.findByName(list[z]); + } } - if(this.deepstarColorFunc instanceof SingleColorGen) { - tag.setInt("DStarColor", ((SingleColorGen)this.deepstarColorFunc).color); + } + else { + this.frostBiomes = null; + } + if(tag.hasStringArray("ColdBiomes")) { + String[] list = tag.getStringArray("ColdBiomes"); + if(list.length == 0) { + this.coldBiomes = null; } - else if(this.deepstarColorFunc instanceof SinusColorGen) { - TagObject fnc = new TagObject(); - fnc.setFloat("Period", ((SinusColorGen)this.deepstarColorFunc).period); - fnc.setFloat("Det", ((SinusColorGen)this.deepstarColorFunc).det); - fnc.setFloat("Dist", ((SinusColorGen)this.deepstarColorFunc).dist); - fnc.setInt("Color", ((SinusColorGen)this.deepstarColorFunc).color); - fnc.setByte("DetChn", (byte)((SinusColorGen)this.deepstarColorFunc).detChn); - fnc.setByte("DistChn", (byte)((SinusColorGen)this.deepstarColorFunc).distChn); - tag.setObject("DStarColorFnc", fnc); + else { + this.coldBiomes = new Biome[list.length]; + for(int z = 0; z < this.coldBiomes.length; z++) { + this.coldBiomes[z] = Biome.findByName(list[z]); + } } - } - return tag; + } + else { + this.coldBiomes = null; + } + if(tag.hasStringArray("MediumBiomes")) { + String[] list = tag.getStringArray("MediumBiomes"); + if(list.length == 0) { + this.mediumBiomes = null; + } + else { + this.mediumBiomes = new Biome[list.length]; + for(int z = 0; z < this.mediumBiomes.length; z++) { + this.mediumBiomes[z] = Biome.findByName(list[z]); + } + } + } + else { + this.mediumBiomes = null; + } + if(tag.hasStringArray("HotBiomes")) { + String[] list = tag.getStringArray("HotBiomes"); + if(list.length == 0) { + this.hotBiomes = null; + } + else { + this.hotBiomes = new Biome[list.length]; + for(int z = 0; z < this.hotBiomes.length; z++) { + this.hotBiomes[z] = Biome.findByName(list[z]); + } + } + } + else { + this.hotBiomes = null; + } + this.ores.clear(); + if(tag.hasList("Ores")) { + List list = tag.getList("Ores"); + for(int z = 0; z < list.size(); z++) { + TagObject gen = list.get(z); + this.ores.add(new Ore(readState(gen, Blocks.iron_ore.getState()), + gen.getInt("Count"), gen.getInt("Add"), gen.getInt("Size"), + gen.getInt("MinC"), gen.getInt("MaxS"), gen.getBool("Distrib"))); + } + } + this.lakes.clear(); + if(tag.hasList("Lakes")) { + List list = tag.getList("Lakes"); + for(int z = 0; z < list.size(); z++) { + TagObject gen = list.get(z); + this.lakes.add(new Lake( + readState(gen, Blocks.water.getState()), + readState(gen, "Filler", null), readState(gen, "Top", null), + gen.getInt("Chance"), gen.getInt("Min"), gen.getInt("Max"), gen.getBool("Ratiod"))); + } + } + this.liquids.clear(); + if(tag.hasList("Liquids")) { + List list = tag.getList("Liquids"); + for(int z = 0; z < list.size(); z++) { + TagObject gen = list.get(z); + this.liquids.add(new Liquid( + readState(gen, Blocks.flowing_water.getState()), + gen.getInt("Chance"), gen.getInt("Min"), gen.getInt("Max"), gen.getBool("Lower"))); + } + } + this.populated = !tag.hasBool("NoPopulation") || !tag.getBool("NoPopulation"); + this.denseFog = tag.getBool("DenseFog"); + this.timeQualifier = tag.getInt("ImperialTime"); + this.brightness = tag.getInt("Brightness"); + this.skyColor = tag.getInt("SkyColor"); + this.fogColor = tag.getInt("FogColor"); + this.cloudColor = tag.getInt("CloudColor"); + this.gravity = tag.getFloat("Gravity"); + this.temperature = tag.getFloat("Temperature"); + this.orbitOffset = tag.getFloat("OrbitOffset"); + this.cloudHeight = tag.getFloat("CloudHeight"); + this.starBrightness = tag.getFloat("StarBrighness"); + this.deepstarBrightness = tag.getFloat("DStarBrightness"); + this.orbitalPeriod = tag.getLong("OrbitalPeriod"); + this.rotationPeriod = tag.getLong("RotationPeriod"); + this.cloudTexture = CloudType.getByName(tag.getString("CloudTexture")); + this.skyboxTexture = tag.hasString("SkyBoxTexture") ? + SkyboxType.getByName(tag.getString("SkyBoxTexture")) : null; + if(tag.hasInt("StarColor")) { + this.setStarColor(tag.getInt("StarColor")); + } + else if(tag.hasObject("StarColorFnc")) { + TagObject fnc = tag.getObject("StarColorFnc"); + this.setStarColorSin(fnc.getFloat("Period"), fnc.getFloat("Det"), fnc.getFloat("Dist"), + fnc.getInt("Color"), fnc.getByte("DetChn"), fnc.getByte("DistChn")); + } + else { + this.starColorFunc = null; + } + if(tag.hasInt("DStarColor")) { + this.setDeepStarColor(tag.getInt("DStarColor")); + } + else if(tag.hasObject("DStarColorFnc")) { + TagObject fnc = tag.getObject("DStarColorFnc"); + this.setDeepStarColorSin(fnc.getFloat("Period"), fnc.getFloat("Det"), fnc.getFloat("Dist"), + fnc.getInt("Color"), fnc.getByte("DetChn"), fnc.getByte("DistChn")); + } + else { + this.deepstarColorFunc = null; + } } - public final TagObject toTags() { - TagObject tag = new TagObject(); - tag.setInt("ID", this.id); - tag.setString("Name", this.name); - tag.setString("Type", this.getType().getName()); - return tag; + public final void toTags(TagObject tag) { + tag.setInt("SeaLevel", this.seaLevel); + writeState(tag, "FillerBlock", this.filler); + writeState(tag, "LiquidBlock", this.liquid); + tag.setFloat("CoordScale", this.noiseGen.coordinateScale); + tag.setFloat("HeightScale", this.noiseGen.heightScale); + tag.setFloat("UpperLmtScale", this.noiseGen.upperLimitScale); + tag.setFloat("LowerLmtScale", this.noiseGen.lowerLimitScale); + tag.setFloat("DepthScaleX", this.noiseGen.depthNoiseScaleX); + tag.setFloat("DepthScaleZ", this.noiseGen.depthNoiseScaleZ); + tag.setFloat("Amplification", this.noiseGen.amplification); + tag.setFloat("ScaleX", this.noiseGen.mainNoiseScaleX); + tag.setFloat("ScaleY", this.noiseGen.mainNoiseScaleY); + tag.setFloat("ScaleZ", this.noiseGen.mainNoiseScaleZ); + tag.setFloat("BaseSize", this.noiseGen.baseSize); + tag.setFloat("Stretch", this.noiseGen.stretchY); + tag.setFloat("BDepthWeight", this.noiseGen.biomeDepthWeight); + tag.setFloat("BDepthOffset", this.noiseGen.biomeDepthOffset); + tag.setFloat("BScaleWeight", this.noiseGen.biomeScaleWeight); + tag.setFloat("BScaleOffset", this.noiseGen.biomeScaleOffset); + tag.setString("Generator", this.generatorType.getName()); + tag.setString("Replacer", this.replacerType.getName()); + tag.setBool("MobGen", this.mobs); + tag.setBool("SnowGen", this.snow); + tag.setBool("Ceiling", this.ceiling); + tag.setBool("Caves", this.caves); + tag.setBool("Ravines", this.ravines); + tag.setBool("AltCaves", this.strideCaves); + tag.setBool("Strongholds", this.useStrongholds); + tag.setBool("Villages", this.useVillages); + tag.setBool("Mineshafts", this.useMineshafts); + tag.setBool("Scattered", this.useScattered); + tag.setBool("Fortresses", this.useFortresses); + tag.setInt("Dungeons", this.dungeons); + tag.setInt("BiomeSize", this.biomeSize); + tag.setInt("RiverSize", this.riverSize); + tag.setInt("SnowRarity", this.snowRarity); + tag.setInt("SeaRarity", this.seaRarity); + tag.setInt("AddRarity", this.addRarity); + tag.setString("DefaultBiome", this.defaultBiome.name.toLowerCase()); + tag.setBool("SemiFixed", this.semiFixed); + tag.setString("DefaultWeather", this.defaultWeather.getName()); + tag.setString("DefaultLeaves", this.defaultLeaves.getName()); + writeState(tag, "TopBlock", this.top); + writeState(tag, "SurfaceBlock", this.surface); + writeState(tag, "AltBlock1", this.alt1); + writeState(tag, "AltBlock2", this.alt2); + writeState(tag, "CaveFillBlock", this.caveFiller); + if(this.layers != null) { + String[] list = new String[this.layers.length]; + for(int z = 0; z < this.layers.length; z++) { + list[z] = BlockRegistry.getName(this.layers[z]); + } + tag.setStringArray("Layers", list); + } + if(this.addBiomes != null) { + String[] list = new String[this.addBiomes.length]; + for(int z = 0; z < this.addBiomes.length; z++) { + list[z] = this.addBiomes[z].name.toLowerCase(); + } + tag.setStringArray("AddBiomes", list); + } + if(this.frostBiomes != null) { + String[] list = new String[this.frostBiomes.length]; + for(int z = 0; z < this.frostBiomes.length; z++) { + list[z] = this.frostBiomes[z].name.toLowerCase(); + } + tag.setStringArray("FrostBiomes", list); + } + if(this.coldBiomes != null) { + String[] list = new String[this.coldBiomes.length]; + for(int z = 0; z < this.coldBiomes.length; z++) { + list[z] = this.coldBiomes[z].name.toLowerCase(); + } + tag.setStringArray("ColdBiomes", list); + } + if(this.mediumBiomes != null) { + String[] list = new String[this.mediumBiomes.length]; + for(int z = 0; z < this.mediumBiomes.length; z++) { + list[z] = this.mediumBiomes[z].name.toLowerCase(); + } + tag.setStringArray("MediumBiomes", list); + } + if(this.hotBiomes != null) { + String[] list = new String[this.hotBiomes.length]; + for(int z = 0; z < this.hotBiomes.length; z++) { + list[z] = this.hotBiomes[z].name.toLowerCase(); + } + tag.setStringArray("HotBiomes", list); + } + if(!this.ores.isEmpty()) { + List list = Lists.newArrayList(); + for(Ore gen : this.ores) { + TagObject ore = new TagObject(); + writeState(ore, gen.state()); + ore.setBool("Distrib", gen.dist()); + ore.setInt("Size", gen.size()); + ore.setInt("Count", gen.count()); + ore.setInt("Add", gen.more()); + ore.setInt("MinC", gen.min()); + ore.setInt("MaxS", gen.max()); + list.add(ore); + } + tag.setList("Ores", list); + } + if(!this.lakes.isEmpty()) { + List list = Lists.newArrayList(); + for(Lake gen : this.lakes) { + TagObject lake = new TagObject(); + writeState(lake, gen.state()); + writeState(lake, "Filler", gen.filler()); + writeState(lake, "Top", gen.top()); + lake.setBool("Ratiod", gen.ratiod()); + lake.setInt("Chance", gen.chance()); + lake.setInt("Min", gen.minHeight()); + lake.setInt("Max", gen.maxHeight()); + list.add(lake); + } + tag.setList("Lakes", list); + } + if(!this.liquids.isEmpty()) { + List list = Lists.newArrayList(); + for(Liquid gen : this.liquids) { + TagObject liquid = new TagObject(); + writeState(liquid, gen.state()); + liquid.setBool("Lower", gen.lower()); + liquid.setInt("Chance", gen.chance()); + liquid.setInt("Min", gen.minHeight()); + liquid.setInt("Max", gen.maxHeight()); + list.add(liquid); + } + tag.setList("Liquids", list); + } + if(!this.populated) + tag.setBool("NoPopulation", true); + tag.setBool("DenseFog", this.denseFog); + tag.setInt("ImperialTime", this.timeQualifier); + tag.setInt("Brightness", this.brightness); + tag.setInt("SkyColor", this.skyColor); + tag.setInt("FogColor", this.fogColor); + tag.setInt("CloudColor", this.cloudColor); + tag.setFloat("Gravity", this.gravity); + tag.setFloat("Temperature", this.temperature); + tag.setFloat("OrbitOffset", this.orbitOffset); + tag.setFloat("CloudHeight", this.cloudHeight); + tag.setFloat("StarBrighness", this.starBrightness); + tag.setFloat("DStarBrightness", this.deepstarBrightness); + tag.setLong("OrbitalPeriod", this.orbitalPeriod); + tag.setLong("RotationPeriod", this.rotationPeriod); + tag.setString("CloudTexture", this.cloudTexture.toString()); + if(this.skyboxTexture != null) + tag.setString("SkyBoxTexture", this.skyboxTexture.toString()); + if(this.starColorFunc instanceof SingleColorGen) { + tag.setInt("StarColor", ((SingleColorGen)this.starColorFunc).color); + } + else if(this.starColorFunc instanceof SinusColorGen) { + TagObject fnc = new TagObject(); + fnc.setFloat("Period", ((SinusColorGen)this.starColorFunc).period); + fnc.setFloat("Det", ((SinusColorGen)this.starColorFunc).det); + fnc.setFloat("Dist", ((SinusColorGen)this.starColorFunc).dist); + fnc.setInt("Color", ((SinusColorGen)this.starColorFunc).color); + fnc.setByte("DetChn", (byte)((SinusColorGen)this.starColorFunc).detChn); + fnc.setByte("DistChn", (byte)((SinusColorGen)this.starColorFunc).distChn); + tag.setObject("StarColorFnc", fnc); + } + if(this.deepstarColorFunc instanceof SingleColorGen) { + tag.setInt("DStarColor", ((SingleColorGen)this.deepstarColorFunc).color); + } + else if(this.deepstarColorFunc instanceof SinusColorGen) { + TagObject fnc = new TagObject(); + fnc.setFloat("Period", ((SinusColorGen)this.deepstarColorFunc).period); + fnc.setFloat("Det", ((SinusColorGen)this.deepstarColorFunc).det); + fnc.setFloat("Dist", ((SinusColorGen)this.deepstarColorFunc).dist); + fnc.setInt("Color", ((SinusColorGen)this.deepstarColorFunc).color); + fnc.setByte("DetChn", (byte)((SinusColorGen)this.deepstarColorFunc).detChn); + fnc.setByte("DistChn", (byte)((SinusColorGen)this.deepstarColorFunc).distChn); + tag.setObject("DStarColorFnc", fnc); + } } protected String getNameIdentifier() { - return (this.id >= UniverseRegistry.MORE_DIM_ID && (this.customName == null || this.customName.isEmpty())) ? "%s" : - this.getType().format; - } - - protected String getIdentifier() { - return this.name; + return this.getType().format; } public int getBiomeSize() { diff --git a/common/src/main/java/common/dimension/Domain.java b/common/src/main/java/common/dimension/Domain.java index f2097146..514039e0 100755 --- a/common/src/main/java/common/dimension/Domain.java +++ b/common/src/main/java/common/dimension/Domain.java @@ -6,9 +6,10 @@ import common.collect.Sets; public final class Domain extends Nameable implements Comparable { public final String id; - private final Set areas = Sets.newTreeSet(); + private final Set areas = Sets.newHashSet(); - public Domain(String id) { + public Domain(String id, boolean custom) { + super(custom); this.id = id; } @@ -23,8 +24,4 @@ public final class Domain extends Nameable implements Comparable { protected String getNameIdentifier() { return "%s"; } - - protected String getIdentifier() { - return this.id; - } } diff --git a/common/src/main/java/common/dimension/Galaxy.java b/common/src/main/java/common/dimension/Galaxy.java index 92031071..3be4943c 100755 --- a/common/src/main/java/common/dimension/Galaxy.java +++ b/common/src/main/java/common/dimension/Galaxy.java @@ -8,7 +8,8 @@ public final class Galaxy extends Nameable implements Comparable { public final String id; private final Set sectors = Sets.newTreeSet(); - public Galaxy(String id) { + public Galaxy(String id, boolean custom) { + super(custom); this.id = id; } @@ -23,8 +24,4 @@ public final class Galaxy extends Nameable implements Comparable { protected String getNameIdentifier() { return "Galaxie %s"; } - - protected String getIdentifier() { - return this.id; - } } diff --git a/common/src/main/java/common/dimension/Moon.java b/common/src/main/java/common/dimension/Moon.java index cab561cf..0998bb45 100755 --- a/common/src/main/java/common/dimension/Moon.java +++ b/common/src/main/java/common/dimension/Moon.java @@ -1,12 +1,12 @@ package common.dimension; public final class Moon extends Dimension { - Moon(int id, String name) { - super(id, name); + Moon() { + super(true); } - public Moon(int id, String name, int sky, int fog, long orbit, long rotation, float gravity, float temperature, int brightness) { - super(id, name); + public Moon(int sky, int fog, long orbit, long rotation, float gravity, float temperature, int brightness) { + super(false); this.setPhysics(orbit, rotation, 0.0f, gravity, temperature, brightness); this.setTimeQualifier(7); this.setStarBrightness(0.75f).setDeepStarBrightness(0.75f); diff --git a/common/src/main/java/common/dimension/Nameable.java b/common/src/main/java/common/dimension/Nameable.java index 17cd47a9..ed70e616 100755 --- a/common/src/main/java/common/dimension/Nameable.java +++ b/common/src/main/java/common/dimension/Nameable.java @@ -1,35 +1,31 @@ package common.dimension; -import common.tags.TagObject; - public abstract class Nameable { - protected String customName = null; + private final boolean custom; + + private String display = null; + + protected Nameable(boolean custom) { + this.custom = custom; + } public final String getCustomName() { - return this.customName; + return this.display; } public final void setCustomName(String name) { - this.customName = name; + this.display = name; } - public void readTags(TagObject tag) { - this.customName = tag.hasString("CustomName") ? tag.getString("CustomName") : null; - } - - public void writeTags(TagObject tag) { - if(this.customName != null) - tag.setString("CustomName", this.customName); - } + public final boolean isCustom() { + return this.custom; + } protected abstract String getNameIdentifier(); - protected abstract String getIdentifier(); public final String getNameString() { - return this.customName != null && !this.customName.isEmpty() - ? (this.customName.startsWith("'") && this.customName.endsWith("'") && this.customName.length() > 2 - ? this.customName.substring(1, this.customName.length() - 1) : - String.format(this.getNameIdentifier(), this.customName)) : - String.format(this.getNameIdentifier(), this.getIdentifier()); + return this.display.startsWith("'") && this.display.endsWith("'") && this.display.length() > 2 + ? this.display.substring(1, this.display.length() - 1) : + String.format(this.getNameIdentifier(), this.display); } } diff --git a/common/src/main/java/common/dimension/Planet.java b/common/src/main/java/common/dimension/Planet.java index 37fa250c..7ad95f03 100755 --- a/common/src/main/java/common/dimension/Planet.java +++ b/common/src/main/java/common/dimension/Planet.java @@ -5,29 +5,29 @@ import java.util.Set; import common.collect.Sets; public final class Planet extends Dimension { - private final Set moons = Sets.newTreeSet(); + private final Set moons = Sets.newHashSet(); - Planet(int id, String name) { - super(id, name); + Planet() { + super(true); } - public Planet(int id, String name, int sky, int fog, int clouds, long orbit, long rotation, float gravity, float temperature, + public Planet(int sky, int fog, int clouds, long orbit, long rotation, float gravity, float temperature, int brightness) { - this(id, name, sky, fog, clouds, orbit, rotation, 0.0f, gravity, temperature, brightness); + this(sky, fog, clouds, orbit, rotation, 0.0f, gravity, temperature, brightness); } - public Planet(int id, String name, int sky, int fog, int clouds, long orbit, long rotation, float offset, float gravity, + public Planet(int sky, int fog, int clouds, long orbit, long rotation, float offset, float gravity, float temperature) { - this(id, name, sky, fog, clouds, orbit, rotation, offset, gravity, temperature, 0); + this(sky, fog, clouds, orbit, rotation, offset, gravity, temperature, 0); } - public Planet(int id, String name, int sky, int fog, int clouds, long orbit, long rotation, float gravity, float temperature) { - this(id, name, sky, fog, clouds, orbit, rotation, 0.0f, gravity, temperature, 0); + public Planet(int sky, int fog, int clouds, long orbit, long rotation, float gravity, float temperature) { + this(sky, fog, clouds, orbit, rotation, 0.0f, gravity, temperature, 0); } - public Planet(int id, String name, int sky, int fog, int clouds, long orbit, long rotation, float offset, float gravity, + public Planet(int sky, int fog, int clouds, long orbit, long rotation, float offset, float gravity, float temperature, int brightness) { - super(id, name); + super(false); this.setPhysics(orbit, rotation, offset, gravity, temperature, brightness); this.setTimeQualifier(7); this.setStarBrightness(0.5f).setDeepStarBrightness(0.0f); diff --git a/common/src/main/java/common/dimension/Sector.java b/common/src/main/java/common/dimension/Sector.java index 63277443..0b3847d1 100755 --- a/common/src/main/java/common/dimension/Sector.java +++ b/common/src/main/java/common/dimension/Sector.java @@ -6,9 +6,10 @@ import common.collect.Sets; public final class Sector extends Nameable implements Comparable { public final String id; - private final Set stars = Sets.newTreeSet(); + private final Set stars = Sets.newHashSet(); - public Sector(String id) { + public Sector(String id, boolean custom) { + super(custom); this.id = id; } @@ -23,8 +24,4 @@ public final class Sector extends Nameable implements Comparable { protected String getNameIdentifier() { return "Sektor %s"; } - - protected String getIdentifier() { - return this.id; - } } diff --git a/common/src/main/java/common/dimension/Semi.java b/common/src/main/java/common/dimension/Semi.java index d5e8b582..a034392a 100755 --- a/common/src/main/java/common/dimension/Semi.java +++ b/common/src/main/java/common/dimension/Semi.java @@ -1,12 +1,12 @@ package common.dimension; public final class Semi extends Dimension { - Semi(int id, String name) { - super(id, name); + Semi() { + super(true); } - public Semi(int id, String name, int sky, int fog, int clouds, float temperature, int brightness) { - super(id, name); + public Semi(int sky, int fog, int clouds, float temperature, int brightness) { + super(false); this.setPhysics(1L, 1L, 0.0f, 10.0f, temperature, brightness); this.setStarBrightness(0.5f).setDeepStarBrightness(0.5f); this.setSkyColor(sky).setFogColor(fog).setCloudColor(clouds); diff --git a/common/src/main/java/common/dimension/Space.java b/common/src/main/java/common/dimension/Space.java index bab21293..e73953d6 100755 --- a/common/src/main/java/common/dimension/Space.java +++ b/common/src/main/java/common/dimension/Space.java @@ -6,10 +6,9 @@ public final class Space extends Dimension { public static final Space INSTANCE = new Space(); private Space() { - super(0, "space"); + super(false); this.setPhysics(1L, 1L, 0.0f, 0.0f, 2.7f, 15).setTimeQualifier(8); this.setBiome(Biome.SPACE).setStarBrightness(1.0f).setDeepStarBrightness(1.0f); - this.setCustomName("Der Weltraum"); } public final DimType getType() { diff --git a/common/src/main/java/common/dimension/Star.java b/common/src/main/java/common/dimension/Star.java index 14af9e6e..5e9d74e3 100755 --- a/common/src/main/java/common/dimension/Star.java +++ b/common/src/main/java/common/dimension/Star.java @@ -6,14 +6,14 @@ import common.collect.Sets; import common.world.State; public final class Star extends Dimension { - private final Set planets = Sets.newTreeSet(); + private final Set planets = Sets.newHashSet(); - Star(int id, String name) { - super(id, name); + Star() { + super(true); } - public Star(int id, String name, int color, float gravity, float temp, State surface, int height) { - super(id, name); + public Star(int color, float gravity, float temp, State surface, int height) { + super(false); this.setPhysics(1L, 1L, 0.0f, gravity, temp, 15); this.setTimeQualifier(7); this.setStarBrightness(0.75f).setDeepStarBrightness(0.75f); diff --git a/common/src/main/java/common/entity/Entity.java b/common/src/main/java/common/entity/Entity.java index 227c7070..da2488ae 100755 --- a/common/src/main/java/common/entity/Entity.java +++ b/common/src/main/java/common/entity/Entity.java @@ -11,6 +11,7 @@ import common.block.artificial.BlockWall; import common.block.liquid.BlockLiquid; import common.color.TextColor; import common.dimension.DimType; +import common.dimension.Dimension; import common.enchantment.Enchantment; import common.enchantment.EnchantmentHelper; import common.entity.effect.EntityLightning; @@ -268,8 +269,8 @@ public abstract class Entity protected void checkPortal() { if(this.inPortal != null) { if(this.vehicle == null && this.passenger == null && Vars.portals) { - int current = this.worldObj.dimension.getDimensionId(); - int dest = UniverseRegistry.getPortalDest(current, this.inPortal); + Dimension current = this.worldObj.dimension; + Dimension dest = UniverseRegistry.getPortalDest(current, this.inPortal); if(dest != current) { this.travelToDimension(dest, null, 0.0f, 0.0f, this.inPortal); this.inPortal = null; @@ -357,8 +358,8 @@ public abstract class Entity protected void onVoidUpdate() { if(!this.worldObj.client && this.worldObj.dimension.getType() != DimType.SPACE) { // this.worldObj.profiler.start("descent"); - int current = this.worldObj.dimension.getDimensionId(); - int dim = Vars.voidPortal ? UniverseRegistry.getPortalDest(current, PortalType.VOID) : current; + Dimension current = this.worldObj.dimension; + Dimension dim = Vars.voidPortal ? UniverseRegistry.getPortalDest(current, PortalType.VOID) : current; if(dim == current) { // && (!(this.isPlayer()) || !((EntityNPCMP)this).creative)) { this.kill(); } @@ -1804,17 +1805,23 @@ public abstract class Entity return (double)this.height * 0.75D; } - public void teleport(double x, double y, double z, float yaw, float pitch, int dimension) { + public void teleport(double x, double y, double z, float yaw, float pitch, Dimension dimension) { + if(dimension == null) + return; x = ExtMath.clampd(x, -World.MAX_SIZE + 1, World.MAX_SIZE - 1); z = ExtMath.clampd(z, -World.MAX_SIZE + 1, World.MAX_SIZE - 1); this.unmount(); Entity entity = this; - if(this.worldObj.dimension.getDimensionId() != dimension) { + if(this.worldObj.dimension != dimension) { entity = this.travelToDimension(dimension, new BlockPos(x, y, z), yaw, pitch, null); } entity.setLocationAndAngles(x, y, z, yaw, pitch); entity.setRotationYawHead(yaw); } + + public final void teleport(double x, double y, double z, float yaw, float pitch, World world) { + this.teleport(x, y, z, yaw, pitch, world.dimension); + } // protected void setY(double y) { // this.unmount(); @@ -1823,13 +1830,17 @@ public abstract class Entity // } public final void teleport(Position pos) { - this.teleport(pos.x(), pos.y(), pos.z(), pos.yaw(), pos.pitch(), pos.dim()); + this.teleport(pos.x(), pos.y(), pos.z(), pos.yaw(), pos.pitch(), pos.getDimension()); } - public final void teleport(BlockPos pos, int dim) { + public final void teleport(BlockPos pos, Dimension dim) { this.teleport(((double)pos.getX()) + 0.5, (double)pos.getY(), ((double)pos.getZ()) + 0.5, this.rotYaw, this.rotPitch, dim); } + public final void teleport(BlockPos pos, World world) { + this.teleport(pos, world.dimension); + } + // public final Position getLocation() { // return new Position(this); // } @@ -2329,7 +2340,7 @@ public abstract class Entity /** * Teleports the entity to another dimension. Params: Dimension number to teleport to */ - public Entity travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) + public Entity travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { if (!this.worldObj.client && !this.dead) { @@ -2619,7 +2630,7 @@ public abstract class Entity } public Position getPos() { - return new Position(this.posX, this.posY, this.posZ, this.rotYaw, this.rotPitch, this.worldObj.dimension.getDimensionId()); + return new Position(this.posX, this.posY, this.posZ, this.rotYaw, this.rotPitch, this.worldObj); } public abstract EntityType getType(); diff --git a/common/src/main/java/common/entity/item/EntityCartContainer.java b/common/src/main/java/common/entity/item/EntityCartContainer.java index 90ed0e75..1f029865 100755 --- a/common/src/main/java/common/entity/item/EntityCartContainer.java +++ b/common/src/main/java/common/entity/item/EntityCartContainer.java @@ -1,6 +1,7 @@ package common.entity.item; import common.collect.Lists; +import common.dimension.Dimension; import common.entity.DamageSource; import common.entity.Entity; import common.entity.npc.EntityNPC; @@ -166,7 +167,7 @@ public abstract class EntityCartContainer extends EntityCart implements ILockabl /** * Teleports the entity to another dimension. Params: Dimension number to teleport to */ - public Entity travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) + public Entity travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { this.dropContentsWhenDead = false; return super.travelToDimension(dimensionId, pos, yaw, pitch, portal); diff --git a/common/src/main/java/common/entity/item/EntityItem.java b/common/src/main/java/common/entity/item/EntityItem.java index 99ad4cd8..70947cf1 100755 --- a/common/src/main/java/common/entity/item/EntityItem.java +++ b/common/src/main/java/common/entity/item/EntityItem.java @@ -2,6 +2,7 @@ package common.entity.item; import common.block.Material; import common.color.TextColor; +import common.dimension.Dimension; import common.entity.DamageSource; import common.entity.Entity; import common.entity.EntityType; @@ -477,7 +478,7 @@ public class EntityItem extends Entity /** * Teleports the entity to another dimension. Params: Dimension number to teleport to */ - public Entity travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) + public Entity travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { Entity entity = super.travelToDimension(dimensionId, pos, yaw, pitch, portal); diff --git a/common/src/main/java/common/entity/item/EntityXp.java b/common/src/main/java/common/entity/item/EntityXp.java index 06d13428..6569309e 100755 --- a/common/src/main/java/common/entity/item/EntityXp.java +++ b/common/src/main/java/common/entity/item/EntityXp.java @@ -2,6 +2,7 @@ package common.entity.item; import common.block.Material; import common.color.TextColor; +import common.dimension.Dimension; import common.entity.DamageSource; import common.entity.Entity; import common.entity.EntityType; @@ -196,7 +197,7 @@ public class EntityXp extends Entity implements IObjectData } } - public Entity travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) + public Entity travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { Entity entity = super.travelToDimension(dimensionId, pos, yaw, pitch, portal); diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index bb5cf4f3..fc7f20b2 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -24,6 +24,7 @@ import common.block.Block; import common.block.artificial.BlockBed; import common.collect.Lists; import common.color.TextColor; +import common.dimension.Dimension; import common.dimension.Space; import common.enchantment.Enchantment; import common.enchantment.EnchantmentHelper; @@ -48,6 +49,7 @@ import common.init.NameRegistry; import common.init.SoundEvent; import common.init.SpeciesRegistry; import common.init.TradeRegistry; +import common.init.UniverseRegistry; import common.init.SpeciesRegistry.ModelType; import common.inventory.Container; import common.inventory.ContainerPlayer; @@ -206,7 +208,7 @@ public abstract class EntityNPC extends EntityLiving public double chasingPosX; public double chasingPosY; public double chasingPosZ; - private WorldPos originPos = new WorldPos(0, 64, 0, Space.INSTANCE.getDimensionId()); + private WorldPos originPos = new WorldPos(0, 64, 0, Space.INSTANCE); private WorldPos spawnPos; public int experienceLevel; public int experienceTotal; @@ -2891,13 +2893,13 @@ public abstract class EntityNPC extends EntityLiving } } - public Entity travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { + public Entity travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { if(this.connection != null) this.connection.travelToDimension(dimensionId, pos, yaw, pitch, portal); return this.isPlayer() ? this : super.travelToDimension(dimensionId, pos, yaw, pitch, portal); } - public void teleport(double x, double y, double z, float yaw, float pitch, int dimension) { + public void teleport(double x, double y, double z, float yaw, float pitch, Dimension dimension) { if(this.connection != null) this.connection.teleport(x, y, z, yaw, pitch, dimension); else if(!this.isPlayer()) @@ -3458,17 +3460,19 @@ public abstract class EntityNPC extends EntityLiving // this.wakeUpPlayer(); // } - if (tagCompund.hasInt("SpawnX") && tagCompund.hasInt("SpawnY") && tagCompund.hasInt("SpawnZ")) + if (tagCompund.hasInt("SpawnX") && tagCompund.hasInt("SpawnY") && tagCompund.hasInt("SpawnZ") && tagCompund.hasString("SpawnDim")) { - this.spawnPos = new WorldPos(tagCompund.getInt("SpawnX"), tagCompund.getInt("SpawnY"), - tagCompund.getInt("SpawnZ"), tagCompund.getInt("SpawnDim")); + Dimension dim = UniverseRegistry.getDimension(tagCompund.getString("SpawnDim")); + this.spawnPos = dim == null ? null : new WorldPos(tagCompund.getInt("SpawnX"), tagCompund.getInt("SpawnY"), + tagCompund.getInt("SpawnZ"), dim); // this.spawnForced = tagCompund.getBoolean("SpawnForced"); } - if (tagCompund.hasInt("OriginX") && tagCompund.hasInt("OriginY") && tagCompund.hasInt("OriginZ")) + if (tagCompund.hasInt("OriginX") && tagCompund.hasInt("OriginY") && tagCompund.hasInt("OriginZ") && tagCompund.hasString("OriginDim")) { - this.originPos = new WorldPos(tagCompund.getInt("OriginX"), tagCompund.getInt("OriginY"), - tagCompund.getInt("OriginZ"), tagCompund.getInt("OriginDim")); + Dimension dim = UniverseRegistry.getDimension(tagCompund.getString("OriginDim")); + this.originPos = dim == null ? new WorldPos(0, 64, 0, Space.INSTANCE) : new WorldPos(tagCompund.getInt("OriginX"), tagCompund.getInt("OriginY"), + tagCompund.getInt("OriginZ"), dim); } // this.foodStats.readNBT(tagCompund); @@ -3572,19 +3576,25 @@ public abstract class EntityNPC extends EntityLiving if (this.spawnPos != null) { - tagCompound.setInt("SpawnX", this.spawnPos.getX()); - tagCompound.setInt("SpawnY", this.spawnPos.getY()); - tagCompound.setInt("SpawnZ", this.spawnPos.getZ()); - tagCompound.setInt("SpawnDim", this.spawnPos.getDimension()); + Dimension dim = this.spawnPos.getDimension(); + if(dim != null) { + tagCompound.setInt("SpawnX", this.spawnPos.getX()); + tagCompound.setInt("SpawnY", this.spawnPos.getY()); + tagCompound.setInt("SpawnZ", this.spawnPos.getZ()); + tagCompound.setString("SpawnDim", UniverseRegistry.getName(dim)); + } // tagCompound.setBoolean("SpawnForced", this.spawnForced); } if (this.originPos != null) { - tagCompound.setInt("OriginX", this.originPos.getX()); - tagCompound.setInt("OriginY", this.originPos.getY()); - tagCompound.setInt("OriginZ", this.originPos.getZ()); - tagCompound.setInt("OriginDim", this.originPos.getDimension()); + Dimension dim = this.originPos.getDimension(); + if(dim != null) { + tagCompound.setInt("OriginX", this.originPos.getX()); + tagCompound.setInt("OriginY", this.originPos.getY()); + tagCompound.setInt("OriginZ", this.originPos.getZ()); + tagCompound.setString("OriginDim", UniverseRegistry.getName(dim)); + } } // this.foodStats.writeNBT(tagCompound); diff --git a/common/src/main/java/common/init/UniverseRegistry.java b/common/src/main/java/common/init/UniverseRegistry.java index 6223e798..b6744d7d 100755 --- a/common/src/main/java/common/init/UniverseRegistry.java +++ b/common/src/main/java/common/init/UniverseRegistry.java @@ -1,9 +1,8 @@ package common.init; +import java.util.IdentityHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; - import common.biome.Biome; import common.block.foliage.LeavesType; import common.collect.Lists; @@ -26,31 +25,27 @@ import common.dimension.Dimension.ReplacerType; import common.log.Log; import common.rng.Random; import common.tags.TagObject; +import common.util.Pair; import common.util.PortalType; +import common.util.Triplet; import common.world.State; import common.world.Weather; import java.util.Set; public abstract class UniverseRegistry { - public static final int MORE_DIM_ID = 1000; public static final long EARTH_YEAR = 8766144L; private static final List BASE_DIMS = Lists.newArrayList(); - private static final Map BASE_REGISTRY = Maps.newHashMap(); - private static final Map BASE_ALIASES = Maps.newHashMap(); - private static final Map BASE_MAP = Maps.newHashMap(); - private static final Map BASE_NAMES = Maps.newHashMap(); private static final Map PORTALS = Maps.newHashMap(); private static final List DIMENSIONS = Lists.newArrayList(); - private static final Map REGISTRY = Maps.newTreeMap(); - private static final Map ALIASES = Maps.newTreeMap(); - private static final Set NAMES = Sets.newTreeSet(); + private static final Map ID_MAP = Maps.newTreeMap(); + private static final Map IDS = new IdentityHashMap(); + private static final Map NAME_MAP = Maps.newTreeMap(); + private static final Map NAMES = new IdentityHashMap(); + private static final Set NAME_LIST = Sets.newTreeSet(); -// private static final Map MOONS = Maps.newHashMap(); -// private static final Map PLANETS = Maps.newHashMap(); -// private static final Map STARS = Maps.newHashMap(); private static final Map SECTORS = Maps.newHashMap(); private static final Map GALAXIES = Maps.newHashMap(); private static final Map DOMAINS = Maps.newHashMap(); @@ -61,86 +56,121 @@ public abstract class UniverseRegistry { private static final Map SECTOR_MAP = Maps.newHashMap(); private static final Map AREA_MAP = Maps.newHashMap(); - private static int nextDimId; - - public static void clear() { - nextDimId = UniverseRegistry.MORE_DIM_ID; - ALIASES.clear(); - NAMES.clear(); - REGISTRY.clear(); - DIMENSIONS.clear(); - SECTORS.clear(); - GALAXIES.clear(); - DOMAINS.clear(); - MOON_MAP.clear(); - PLANET_MAP.clear(); - STAR_MAP.clear(); - SECTOR_MAP.clear(); - AREA_MAP.clear(); - register(Space.INSTANCE); - for(Dimension dim : BASE_REGISTRY.values()) { - register(dim.copy()); - } - for(Entry entry : BASE_MAP.entrySet()) { - assign(entry.getKey(), entry.getValue()); - } - } - public static void fromTags(TagObject tag) { + List> galaxies = Lists.newArrayList(); + List> sectors = Lists.newArrayList(); + List> stars = Lists.newArrayList(); + List> planets = Lists.newArrayList(); + List> moons = Lists.newArrayList(); + List> semis = Lists.newArrayList(); + List> domains = Lists.newArrayList(); + List> areas = Lists.newArrayList(); + List list = tag.getList("Dimensions"); - for(int z = 0; z < list.size(); z++) { - Dimension dim = Dimension.getByTag(list.get(z)); - if(!REGISTRY.containsKey(dim.getDimensionId()) && !ALIASES.containsKey(dim.getDimensionName())) - register(dim); - nextDimId = dim.getDimensionId() + 1 > nextDimId ? dim.getDimensionId() + 1 : nextDimId; + 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; + } + } + } } - list = tag.getList("Names"); - for(int z = 0; z < list.size(); z++) { - TagObject data = list.get(z); - String id = data.getString("ID"); -// if(BASE_ALIASES.containsKey(id)) { - Dimension dim = ALIASES.get(id); - if(dim != null && dim != Space.INSTANCE) - dim.readTags(data); -// } + for(Pair galaxy : galaxies) { + try { + registerGalaxy(galaxy.first(), galaxy.second(), true); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Galaxie %s nicht hinzufügen", galaxy.first()); + } } - list = tag.getList("Sectors"); - for(int z = 0; z < list.size(); z++) { - TagObject data = list.get(z); - String id = data.getString("ID"); - Sector sector = SECTORS.get(id); - if(sector == null) - SECTORS.put(id, sector = new Sector(id)); - sector.readTags(data); + for(Triplet sector : sectors) { + try { + registerSector(sector.first(), sector.second(), sector.third(), true); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Sektor %s nicht hinzufügen", sector.first()); + } } - list = tag.getList("Galaxies"); - for(int z = 0; z < list.size(); z++) { - TagObject data = list.get(z); - String id = data.getString("ID"); - Galaxy galaxy = GALAXIES.get(id); - if(galaxy == null) - GALAXIES.put(id, galaxy = new Galaxy(id)); - galaxy.readTags(data); + for(Triplet star : stars) { + try { + registerStar(star.first(), star.second(), Dimension.create(DimType.STAR), star.third()); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Stern %s nicht hinzufügen", star.first()); + } } - list = tag.getList("Domains"); - for(int z = 0; z < list.size(); z++) { - TagObject data = list.get(z); - String id = data.getString("ID"); - Domain domain = DOMAINS.get(id); - if(domain == null) - DOMAINS.put(id, domain = new Domain(id)); - domain.readTags(data); + for(Triplet planet : planets) { + try { + registerPlanet(planet.first(), planet.second(), Dimension.create(DimType.PLANET), planet.third()); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Planet %s nicht hinzufügen", planet.first()); + } } - list = tag.getList("Barycenters"); - for(int z = 0; z < list.size(); z++) { - TagObject link = list.get(z); - if(!assign(link.getString("Celestial"), link.getString("Center"))) - Log.TICK.warn("Konnte '" + link.getString("Celestial") + "' nicht zu '" + link.getString("Center") + "' zuweisen"); + for(Triplet moon : moons) { + try { + registerMoon(moon.first(), moon.second(), Dimension.create(DimType.MOON), moon.third()); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Mond %s nicht hinzufügen", moon.first()); + } + } + + for(Pair semi : semis) { + try { + registerSemi(semi.first(), semi.second(), Dimension.create(DimType.SEMI)); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Dimension %s nicht hinzufügen", semi.first()); + } + } + + for(Pair domain : domains) { + try { + registerDomain(domain.first(), domain.second(), true); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Bereich %s nicht hinzufügen", domain.first()); + } + } + + for(Triplet area : areas) { + try { + registerArea(area.first(), area.second(), Dimension.create(DimType.AREA), area.third()); + } + catch(Exception e) { + Log.IO.error(e, "Konnte Dimension %s nicht hinzufügen", area.first()); + } } } @@ -149,218 +179,108 @@ public abstract class UniverseRegistry { List list = Lists.newArrayList(); for(Dimension dim : DIMENSIONS) { - if(!BASE_REGISTRY.containsKey(dim.getDimensionId()) && dim != Space.INSTANCE) - list.add(dim.toTags()); + if(dim.isCustom()) { + TagObject data = new TagObject(); + data.setString("Type", dim.getType().getName()); + data.setString("Name", getName(dim)); + data.setString("CustomName", dim.getCustomName()); + switch(dim.getType()) { + case AREA: + data.setString("Domain", AREA_MAP.get(dim).id); + break; + case MOON: + data.setString("Planet", getName(MOON_MAP.get(dim))); + break; + case PLANET: + data.setString("Star", getName(PLANET_MAP.get(dim))); + break; + case STAR: + data.setString("Sector", STAR_MAP.get(dim).id); + break; + } + list.add(data); + } + } + for(Sector sector : SECTORS.values()) { + if(sector.isCustom()) { + TagObject data = new TagObject(); + data.setString("Type", "sector"); + data.setString("Name", sector.id); + data.setString("CustomName", sector.getCustomName()); + data.setString("Galaxy", SECTOR_MAP.get(sector).id); + list.add(data); + } + } + for(Galaxy galaxy : GALAXIES.values()) { + 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 : DOMAINS.values()) { + 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); - - list = Lists.newArrayList(); - for(Dimension dim : DIMENSIONS) { - if(/* BASE_REGISTRY.containsKey(dim.getDimensionId()) */ dim != Space.INSTANCE) { - TagObject data = new TagObject(); - dim.writeTags(data); - if(!data.isEmpty()) { - data.setString("ID", dim.getDimensionName()); - list.add(data); - } - } - } - if(!list.isEmpty()) - tag.setList("Names", list); - - list = Lists.newArrayList(); - for(Sector sector : SECTORS.values()) { - TagObject data = new TagObject(); - sector.writeTags(data); - if(!data.isEmpty()) { - data.setString("ID", sector.id); - list.add(data); - } - } - if(!list.isEmpty()) - tag.setList("Sectors", list); - - list = Lists.newArrayList(); - for(Galaxy galaxy : GALAXIES.values()) { - TagObject data = new TagObject(); - galaxy.writeTags(data); - if(!data.isEmpty()) { - data.setString("ID", galaxy.id); - list.add(data); - } - } - if(!list.isEmpty()) - tag.setList("Galaxies", list); - - list = Lists.newArrayList(); - for(Domain domain : DOMAINS.values()) { - TagObject data = new TagObject(); - domain.writeTags(data); - if(!data.isEmpty()) { - data.setString("ID", domain.id); - list.add(data); - } - } - if(!list.isEmpty()) - tag.setList("Domains", list); - - list = Lists.newArrayList(); - for(Entry entry : MOON_MAP.entrySet()) { - if(BASE_REGISTRY.containsKey(entry.getKey().getDimensionId())) - continue; - TagObject link = new TagObject(); - link.setString("Celestial", entry.getKey().getDimensionName()); - link.setString("Center", entry.getValue().getDimensionName()); - list.add(link); - } - for(Entry entry : PLANET_MAP.entrySet()) { - if(BASE_REGISTRY.containsKey(entry.getKey().getDimensionId())) - continue; - TagObject link = new TagObject(); - link.setString("Celestial", entry.getKey().getDimensionName()); - link.setString("Center", entry.getValue().getDimensionName()); - list.add(link); - } - for(Entry entry : STAR_MAP.entrySet()) { - if(BASE_REGISTRY.containsKey(entry.getKey().getDimensionId())) - continue; - TagObject link = new TagObject(); - link.setString("Celestial", entry.getKey().getDimensionName()); - link.setString("Center", entry.getValue().id); - list.add(link); - } - for(Entry entry : SECTOR_MAP.entrySet()) { - if(BASE_MAP.containsKey(entry.getKey().id)) - continue; - TagObject link = new TagObject(); - link.setString("Celestial", entry.getKey().id); - link.setString("Center", entry.getValue().id); - list.add(link); - } - for(Entry entry : AREA_MAP.entrySet()) { - if(BASE_REGISTRY.containsKey(entry.getKey().getDimensionId())) - continue; - TagObject link = new TagObject(); - link.setString("Celestial", entry.getKey().getDimensionName()); - link.setString("Center", entry.getValue().id); - list.add(link); - } - if(!list.isEmpty()) - tag.setList("Barycenters", list); - + return tag; } 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 ? new Random().pick(Lists.newArrayList(STAR_MAP.keySet())).getDimensionName() : star; - if(!ALIASES.containsKey(star) || ALIASES.get(star).getType() != DimType.STAR || ALIASES.containsKey(name)) + star = star == null ? getName(new Random().pick(Lists.newArrayList(STAR_MAP.keySet()))) : star; + if(!NAME_MAP.containsKey(star) || NAME_MAP.get(star).getType() != DimType.STAR || NAME_MAP.containsKey(name)) return null; - Planet dim = new Planet(nextDimId++, name, sky, fog, clouds, orbit, rotation, offset, gravity, temperature, brightness); - register(dim); - assign(name, star); + Dimension dim = new Planet(sky, fog, clouds, orbit, rotation, offset, gravity, temperature, brightness).copy(); dim.setTimeQualifier(3); - dim.setCustomName(custom); - return dim; + registerPlanet(name, custom, dim, star); + return (Planet)dim; } - public static Dimension[] registerPreset(Dimension preset) { - if(ALIASES.containsKey(preset.getDimensionName())) - return new Dimension[] {preset}; + public static void registerPreset(Dimension preset) { Random rand = new Random(); - String pname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); - preset = preset.copy(nextDimId++, pname.toLowerCase()); - preset.setCustomName(pname); - register(preset); + String pname; + do { + pname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); + } while(isRegistered(pname.toLowerCase())); if(preset.getType() == DimType.PLANET) { - String galaxy = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); - String sector = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); - String sname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); - Star star = new Star(nextDimId++, sname.toLowerCase(), 0xff0000 | (rand.range(0x60, 0xa0) << 8), + String galaxy; + do { + galaxy = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); + } while(isRegistered(galaxy.toLowerCase())); + String sector; + do { + sector = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); + } while(isRegistered(sector.toLowerCase())); + String sname; + do { + sname = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); + } while(isRegistered(sname.toLowerCase())); + Dimension 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)); - star.setCustomName(sname); - register(star); - assign(preset.getDimensionName(), star.getDimensionName()); - assign(star.getDimensionName(), sector.toLowerCase()); - SECTORS.get(sector.toLowerCase()).setCustomName(sector); - assign(sector.toLowerCase(), galaxy.toLowerCase()); - GALAXIES.get(galaxy.toLowerCase()).setCustomName(galaxy); - return new Dimension[] {preset, star}; + rand.pick(Blocks.lava.getState(), Blocks.magma.getState()), rand.range(64, 212)).copy(); + registerGalaxy(galaxy.toLowerCase(), galaxy, true); + registerSector(sector.toLowerCase(), sector, galaxy.toLowerCase(), true); + registerStar(sname.toLowerCase(), sname, star, galaxy.toLowerCase()); + registerPlanet(pname.toLowerCase(), pname, preset.copy(), sname.toLowerCase()); } else if(preset.getType() == DimType.AREA) { - String domain = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); - assign(preset.getDimensionName(), domain.toLowerCase()); - DOMAINS.get(domain.toLowerCase()).setCustomName(domain); + String domain; + do { + domain = NameRegistry.FANTASY.generate(rand, rand.range(2, 5)); + } while(isRegistered(domain.toLowerCase())); + registerDomain(domain.toLowerCase(), domain, true); + registerArea(pname.toLowerCase(), pname, preset.copy(), domain.toLowerCase()); } - return new Dimension[] {preset}; - } - - public static boolean assign(String body, String center) { - Dimension celestial = ALIASES.get(body); - Dimension barycenter = ALIASES.get(center); - if(celestial != null && celestial.getType() == DimType.MOON && barycenter != null - && barycenter.getType() == DimType.PLANET) { - MOON_MAP.put((Moon)celestial, (Planet)barycenter); - ((Planet)barycenter).addMoon((Moon)celestial); - return true; - } - else if(celestial != null && celestial.getType() == DimType.PLANET && barycenter != null - && barycenter.getType() == DimType.STAR) { - PLANET_MAP.put((Planet)celestial, (Star)barycenter); - ((Star)barycenter).addPlanet((Planet)celestial); - return true; - } - else if(celestial != null && celestial.getType() == DimType.STAR && barycenter == null) { - Sector sector = SECTORS.get(center); - if(sector == null) { - SECTORS.put(center, sector = new Sector(center)); - if(BASE_NAMES.containsKey(center)) - sector.setCustomName(BASE_NAMES.get(center)); - } - STAR_MAP.put((Star)celestial, sector); - sector.addStar((Star)celestial); - return true; - } - else if(celestial != null && celestial.getType() == DimType.AREA && barycenter == null) { - Domain domain = DOMAINS.get(center); - if(domain == null) { - DOMAINS.put(center, domain = new Domain(center)); - if(BASE_NAMES.containsKey(center)) - domain.setCustomName(BASE_NAMES.get(center)); - } - AREA_MAP.put((Area)celestial, domain); - domain.addArea((Area)celestial); - return true; - } - else if(celestial == null && barycenter == null) { - Sector sector = SECTORS.get(body); - if(sector == null) { - SECTORS.put(body, sector = new Sector(body)); - if(BASE_NAMES.containsKey(body)) - sector.setCustomName(BASE_NAMES.get(body)); - } - Galaxy galaxy = GALAXIES.get(center); - if(galaxy == null) { - GALAXIES.put(center, galaxy = new Galaxy(center)); - if(BASE_NAMES.containsKey(center)) - galaxy.setCustomName(BASE_NAMES.get(center)); - } - SECTOR_MAP.put(sector, galaxy); - galaxy.addSector(sector); - return true; - } - else { - return false; - } - } - - private static void register(Dimension dim) { - DIMENSIONS.add(dim); - ALIASES.put(dim.getDimensionName(), dim); - NAMES.add(dim.getDimensionName()); - REGISTRY.put(dim.getDimensionId(), dim); } public static List getDimensions() { @@ -368,158 +288,173 @@ public abstract class UniverseRegistry { } public static Dimension getDimension(int dim) { - return REGISTRY.get(dim); + return ID_MAP.get(dim); + } + + public static int getId(Dimension dim) { + if(dim == null) + return -1; + Integer id = IDS.get(dim); + return id == null ? -1 : id; + } + + public static String getName(Dimension dim) { + return dim == null ? null : NAMES.get(dim); } public static Dimension getDimension(String name) { - return ALIASES.get(name); + return NAME_MAP.get(name); } public static Set getWorldNames() { - return NAMES; - } - - public static String getDefaultName(String name) { - return BASE_NAMES.get(name); + return NAME_LIST; } public static List getBaseDimensions() { return BASE_DIMS; } - public static int getPortalDest(int src, PortalType portal) { - return PORTALS.containsKey((portal.ordinal() << 20) | src) ? PORTALS.get((portal.ordinal() << 20) | src) : - (PORTALS.containsKey(portal.ordinal() | 0x7ff00000) ? PORTALS.get(portal.ordinal() | 0x7ff00000) : src); + public static Dimension getPortalDest(Dimension src, PortalType portal) { + return PORTALS.containsKey((portal.ordinal() << 20) | getId(src)) ? getDimension(PORTALS.get((portal.ordinal() << 20) | getId(src))) : + (PORTALS.containsKey(portal.ordinal() | 0x7ff00000) ? getDimension(PORTALS.get(portal.ordinal() | 0x7ff00000)) : src); } -// public static Text getUnformattedName(Dimension dim, boolean full) { -// Text base = dim.getNameComponent(); -//// if(dim.getCustomName() != null && !dim.getCustomName().isEmpty()) -//// base = new TextComponent(dim.getCustomName()); -//// else if(dim.getDimensionId() >= Constants.MORE_DIM_ID) -////// base = new Translation("dimension." + dim.getType().getName(), dim.getDimensionName()); -//// base = new Translation("preset." + dim.getDimensionName()); -//// else -//// base = new Translation("dimension." + dim.getDimensionName()); -// if(!full) -// return base; -// switch(dim.getType()) { -// case MOON: -// dim = MOON_MAP.get(dim); -// if(dim == null) -// return base; -// base.appendText(" / ").appendSibling(dim.getNameComponent()); -// case PLANET: -// dim = PLANET_MAP.get(dim); -// if(dim == null) -// return base; -// base.appendText(" / ").appendSibling(dim.getNameComponent()); -// case STAR: -// Sector sector = STAR_MAP.get(dim); -// if(sector == null) -// return base; -// base.appendText(" / ").appendSibling(sector.getNameComponent()); -// Galaxy galaxy = SECTOR_MAP.get(sector); -// if(galaxy == null) -// return base; -// base.appendText(" / ").appendSibling(galaxy.getNameComponent()); -// break; -// case AREA: -// Domain domain = AREA_MAP.get(dim); -// if(domain == null) -// return base; -// base.appendText(" / ").appendSibling(domain.getNameComponent()); -// break; -// default: -// break; -// } -// return base; -// } - public static String getFormattedName(Dimension dim, boolean full) { String base = dim.getNameString(); -// if(dim.getCustomName() != null && !dim.getCustomName().isEmpty()) -// base = dim.getCustomName(); -// else if(dim.getDimensionId() >= Constants.MORE_DIM_ID) -//// base = I18n.format("dimension." + dim.getType().getName(), dim.getDimensionName()); -// base = I18n.format("preset." + dim.getDimensionName()); -// else -// base = I18n.format("dimension." + dim.getDimensionName()); if(!full) return base; switch(dim.getType()) { case MOON: dim = MOON_MAP.get(dim); - if(dim == null) - return base; base += " / " + dim.getNameString(); case PLANET: dim = PLANET_MAP.get(dim); - if(dim == null) - return base; base += " / " + dim.getNameString(); case STAR: Sector sector = STAR_MAP.get(dim); - if(sector == null) - return base; base += " / " + sector.getNameString(); - Galaxy galaxy = SECTOR_MAP.get(sector); - if(galaxy == null) - return base; - base += " / " + galaxy.getNameString(); - break; + return base + " / " + SECTOR_MAP.get(sector).getNameString(); case AREA: - Domain domain = AREA_MAP.get(dim); - if(domain == null) - return base; - base += " / " + domain.getNameString(); - break; + return base + " / " + AREA_MAP.get(dim).getNameString(); default: - break; + return base; } - return base; + } + + public static boolean isRegistered(String name) { + return GALAXIES.containsKey(name) || SECTORS.containsKey(name) || DOMAINS.containsKey(name) || NAME_MAP.containsKey(name); + } + + private static void checkRegistered(String name) { + if(isRegistered(name)) + throw new IllegalArgumentException("Objekt " + name + " ist bereits registriert"); } - private static void registerDimension(String name, Dimension dim) { - dim.setCustomName(name); - BASE_NAMES.put(dim.getDimensionName(), name); - if(dim.getType() == DimType.PLANET || dim.getType() == DimType.AREA || dim.getType() == DimType.SEMI) + private static void registerGalaxy(String name, String display, boolean custom) { + checkRegistered(name); + Galaxy galaxy = new Galaxy(name, custom); + galaxy.setCustomName(display); + GALAXIES.put(name, galaxy); + } + + private static void registerGalaxy(String name, String display) { + registerGalaxy(name, display, false); + } + + private static void registerSector(String name, String display, String galaxy, boolean custom) { + checkRegistered(name); + Galaxy base = GALAXIES.get(galaxy); + if(base == null) + throw new IllegalArgumentException("Galaxie " + galaxy + " existiert nicht"); + Sector sector = new Sector(name, custom); + sector.setCustomName(display); + SECTORS.put(name, sector); + SECTOR_MAP.put(sector, base); + base.addSector(sector); + } + + private static void registerSector(String name, String display, String galaxy) { + registerSector(name, display, galaxy, false); + } + + private static void registerDomain(String name, String display, boolean custom) { + checkRegistered(name); + Domain domain = new Domain(name, custom); + domain.setCustomName(display); + DOMAINS.put(name, domain); + } + + private static void registerDomain(String name, String display) { + registerDomain(name, display, false); + } + + private static void registerDimension(String name, String display, Dimension dim) { + checkRegistered(name); + dim.setCustomName(display); + NAME_MAP.put(name, dim); + NAMES.put(dim, name); + NAME_LIST.add(name); + ID_MAP.put(DIMENSIONS.size(), dim); + IDS.put(dim, DIMENSIONS.size()); + DIMENSIONS.add(dim); + if(!dim.isCustom() && (dim.getType() == DimType.PLANET || dim.getType() == DimType.AREA || dim.getType() == DimType.SEMI)) BASE_DIMS.add(dim); - BASE_REGISTRY.put(dim.getDimensionId(), dim); - BASE_ALIASES.put(dim.getDimensionName(), dim); } - private static void registerGalaxy(String name, String galaxy) { - BASE_NAMES.put(galaxy, name); + private static void registerStar(String name, String display, Dimension dim, String sector) { + Sector base = SECTORS.get(sector); + if(base == null) + throw new IllegalArgumentException("Sektor " + sector + " existiert nicht"); + registerDimension(name, display, dim); + STAR_MAP.put((Star)dim, base); + base.addStar((Star)dim); } - private static void registerSector(String name, String sector, String galaxy) { - BASE_MAP.put(sector, galaxy); - BASE_NAMES.put(sector, name); + private static void registerPlanet(String name, String display, Dimension dim, String star) { + Dimension base = NAME_MAP.get(star); + if(base == null || base.getType() != DimType.STAR) + throw new IllegalArgumentException("Stern " + star + " existiert nicht"); + registerDimension(name, display, dim); + PLANET_MAP.put((Planet)dim, ((Star)base)); + ((Star)base).addPlanet((Planet)dim); } - private static void registerDomain(String name, String domain) { - BASE_NAMES.put(domain, name); + private static void registerMoon(String name, String display, Dimension dim, String planet) { + Dimension base = NAME_MAP.get(planet); + if(base == null || base.getType() != DimType.PLANET) + throw new IllegalArgumentException("Planet " + planet + " existiert nicht"); + registerDimension(name, display, dim); + MOON_MAP.put((Moon)dim, ((Planet)base)); + ((Planet)base).addMoon((Moon)dim); } - private static void registerDimension(String name, Dimension dim, String base) { - registerDimension(name, dim); - BASE_MAP.put(dim.getDimensionName(), base); + private static void registerArea(String name, String display, Dimension dim, String domain) { + Domain base = DOMAINS.get(domain); + if(base == null) + throw new IllegalArgumentException("Bereich " + domain + " existiert nicht"); + registerDimension(name, display, dim); + AREA_MAP.put((Area)dim, base); + base.addArea((Area)dim); + } + + private static void registerSemi(String name, String display, Dimension dim) { + registerDimension(name, display, dim); } private static void registerPortal(PortalType portal, String src, String dest) { - PORTALS.put((portal.ordinal() << 20) | BASE_ALIASES.get(src).getDimensionId(), BASE_ALIASES.get(dest).getDimensionId()); + PORTALS.put((portal.ordinal() << 20) | getId(NAME_MAP.get(src)), getId(NAME_MAP.get(dest))); } private static void registerPortal(PortalType portal, String dest) { - PORTALS.put(portal.ordinal() | 0x7ff00000, BASE_ALIASES.get(dest).getDimensionId()); + PORTALS.put(portal.ordinal() | 0x7ff00000, getId(NAME_MAP.get(dest))); } public static void register() { - registerGalaxy("Milchstraße", "milkyway"); - registerSector("Solar", "solar", "milkyway"); - registerDimension("Sol", new Star(2, "sol", 0xff7f00, 274.0f, 5778.0f, Blocks.lava.getState(), 128).setTimeQualifier(1), "solar"); - registerDimension("Terra", new Planet(1, "terra", 0xffffffff, 0xc0d8ff, 0xffffff, UniverseRegistry.EARTH_YEAR, 24000L, 28.0f, 9.81f, + registerDimension("space", "Der Weltraum", Space.INSTANCE); + registerGalaxy("milkyway", "Milchstraße"); + registerSector("solar", "Solar", "milkyway"); + registerStar("sol", "Sol", new Star(0xff7f00, 274.0f, 5778.0f, Blocks.lava.getState(), 128).setTimeQualifier(1), "solar"); + registerPlanet("terra", "Terra", new Planet(0xffffffff, 0xc0d8ff, 0xffffff, UniverseRegistry.EARTH_YEAR, 24000L, 28.0f, 9.81f, 259.15f).setTimeQualifier(0) .setPerlinGen(Blocks.stone.getState(), Blocks.water.getState(), 63) .setBiomeReplacer(Blocks.gravel.getState()) @@ -545,49 +480,49 @@ public abstract class UniverseRegistry { .addOre(Blocks.ruby_ore.getState(), 1, 0, 4, 12, 8, true) .addOre(Blocks.cinnabar_ore.getState(), 1, 0, 11, 0, 24, false) .enableVillages().enableMineshafts().enableScattered().enableStrongholds(), "sol"); - registerDimension("Luna", new Moon(3, "luna", 0x333333, 0x333333, 655728L, 655728L, 1.62f, 210.0f, 8) + registerMoon("luna", "Luna", new Moon(0x333333, 0x333333, 655728L, 655728L, 1.62f, 210.0f, 8) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63).setBiome(Biome.MOON) .setTimeQualifier(1), "terra"); - registerDimension("Merkur", new Planet(4, "mercury", 0x666666, 0x535353, 0x858585, 2111297L, 1407509L, 3.7f, 440.0f) + registerPlanet("mercury", "Merkur", new Planet(0x666666, 0x535353, 0x858585, 2111297L, 1407509L, 3.7f, 440.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Venus", new Planet(5, "venus", 0xc0c0c0, 0xa0a0a0, 0xe0e0e0, 5392908L, 5832449L, 8.87f, 737.0f) + registerPlanet("venus", "Venus", new Planet(0xc0c0c0, 0xa0a0a0, 0xe0e0e0, 5392908L, 5832449L, 8.87f, 737.0f) .setPerlinGen(Blocks.sand.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Mars", new Planet(6, "mars", 0xd6905b, 0xbd723a, 0xbd9273, 16487781L, 24623L, 3.71f, 208.0f) + registerPlanet("mars", "Mars", new Planet(0xd6905b, 0xbd723a, 0xbd9273, 16487781L, 24623L, 3.71f, 208.0f) .setPerlinGen(Blocks.red_sand.getState(), Blocks.air.getState(), 63).setTimeQualifier(1), "sol"); - registerDimension("Jupiter", new Planet(7, "jupiter", 0xffd5ba, 0xb89f90, 0xc7b5a9, 103989391L, 9925L, 24.79f, 163.0f).enableDenseFog() + registerPlanet("jupiter", "Jupiter", new Planet(0xffd5ba, 0xb89f90, 0xc7b5a9, 103989391L, 9925L, 24.79f, 163.0f).enableDenseFog() .setFlatGen(Blocks.hydrogen.getState(), 256).setTimeQualifier(1).setCloudHeight(576.0f), "sol"); - registerDimension("Saturn", new Planet(8, "saturn", 0xf1d1a1, 0xd3b385, 0xeed7b5, 258141008L, 10656L, 10.44f, 133.0f).enableDenseFog() + registerPlanet("saturn", "Saturn", new Planet(0xf1d1a1, 0xd3b385, 0xeed7b5, 258141008L, 10656L, 10.44f, 133.0f).enableDenseFog() .setFlatGen(Blocks.hydrogen.getState(), 256).setTimeQualifier(1).setCloudHeight(576.0f), "sol"); - registerDimension("Uranus", new Planet(9, "uranus", 0xcee6ff, 0xadd2f9, 0x8eb0d3, 736503770L, 17240L, 8.87f, 78.0f) + registerPlanet("uranus", "Uranus", new Planet(0xcee6ff, 0xadd2f9, 0x8eb0d3, 736503770L, 17240L, 8.87f, 78.0f) .setPerlinGen(Blocks.packed_ice.getState(), Blocks.water.getState(), 70) .addOre(Blocks.diamond_ore.getState(), 4, 4, 12, 0, 60, false) .setTimeQualifier(1), "sol"); - registerDimension("Neptun", new Planet(10, "neptune", 0xb4d9ff, 0x85bef9, 0x649bd3, 1444584441L, 16110L, 11.15f, 72.0f) + registerPlanet("neptune", "Neptun", new Planet(0xb4d9ff, 0x85bef9, 0x649bd3, 1444584441L, 16110L, 11.15f, 72.0f) .setPerlinGen(Blocks.packed_ice.getState(), Blocks.water.getState(), 70) .addOre(Blocks.diamond_ore.getState(), 4, 2, 1, 0, 60, false) .setTimeQualifier(1), "sol"); - registerDimension("Ceres", new Planet(11, "ceres", 0x666666, 0x535353, 0x858585, 40315496L, 9074L, 0.27f, 167.0f) + registerPlanet("ceres", "Ceres", new Planet(0x666666, 0x535353, 0x858585, 40315496L, 9074L, 0.27f, 167.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Pluto", new Planet(12, "pluto", 0x666666, 0x535353, 0x858585, 2173127098L, 153293L, 0.62f, 40.0f) + registerPlanet("pluto", "Pluto", new Planet(0x666666, 0x535353, 0x858585, 2173127098L, 153293L, 0.62f, 40.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Haumea", new Planet(13, "haumea", 0x666666, 0x535353, 0x858585, 2487831667L, 3914L, 0.63f, 48.0f) + registerPlanet("haumea", "Haumea", new Planet(0x666666, 0x535353, 0x858585, 2487831667L, 3914L, 0.63f, 48.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Makemake", new Planet(14, "makemake", 0x666666, 0x535353, 0x858585, 2684193293L, 22826L, 0.4f, 30.0f) + registerPlanet("makemake", "Makemake", new Planet(0x666666, 0x535353, 0x858585, 2684193293L, 22826L, 0.4f, 30.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Eris", new Planet(15, "eris", 0x666666, 0x535353, 0x858585, 4900274496L, 378862L, 0.82f, 30.0f) + registerPlanet("eris", "Eris", new Planet(0x666666, 0x535353, 0x858585, 4900274496L, 378862L, 0.82f, 30.0f) .setPerlinGen(Blocks.moon_rock.getState(), Blocks.air.getState(), 63) .setTimeQualifier(1), "sol"); - registerDimension("Gi'rok", new Star(100, "girok", 0xff8f00, 232.0f, 5220.0f, Blocks.lava.getState(), 112).setTimeQualifier(2), "solar"); - registerDimension("'Elbenplanet Gharoth'", new Planet(101, "gharoth", 0xffffffff, 0xc0d8ff, 0xffffff, 4837386L, 52960L, 30.0f, 10.0f, 257.3f) + registerStar("girok", "Gi'rok", new Star(0xff8f00, 232.0f, 5220.0f, Blocks.lava.getState(), 112).setTimeQualifier(2), "solar"); + registerPlanet("gharoth", "'Elbenplanet Gharoth'", new Planet(0xffffffff, 0xc0d8ff, 0xffffff, 4837386L, 52960L, 30.0f, 10.0f, 257.3f) .setTimeQualifier(2).setSimpleGen(Blocks.dirt.getState(), Blocks.water.getState(), 64) .setSimpleReplacer(Blocks.gravel.getState(), Blocks.sand.getState()).setBiome(Biome.ELVENFOREST) .enableCaves(Blocks.air.getState()).setDungeons(4).enableMobs().enableSnow() @@ -597,7 +532,7 @@ public abstract class UniverseRegistry { .addLiquid(Blocks.flowing_lava.getState(), 20, 8, 255, true) .addOre(Blocks.thetium_ore.getState(), 1, 0, 3, 0, 14, false) .addOre(Blocks.gyriyn_ore.getState(), 0, 2, 3, 0, 12, false), "girok"); - registerDimension("'Vampirplanet Transsylvanien'", new Planet(102, "transylvania", 0xffffffff, 0xc0d8ff, 0xffffff, 33850466L, 49760L, 20.0f, 10.0f, 255.5f) + registerPlanet("transylvania", "'Vampirplanet Transsylvanien'", new Planet(0xffffffff, 0xc0d8ff, 0xffffff, 33850466L, 49760L, 20.0f, 10.0f, 255.5f) .setTimeQualifier(5).setPerlinGen(Blocks.rock.getState(), Blocks.water.getState(), 63) .setBiomeReplacer(Blocks.gravel.getState()).setBiomeGen(Biome.FOREST, true, 5, 3, 3, 30) .enableCavesRavines(Blocks.lava.getState()).setDungeons(10).enableMobs().enableSnow() @@ -609,10 +544,10 @@ public abstract class UniverseRegistry { .addOre(Blocks.lead_ore.getState(), 2, 0, 8, 0, 8, false) .addOre(Blocks.ardite_ore.getState(), 0, 2, 3, 0, 12, false) .addOre(Blocks.nichun_ore.getState(), 0, 10, 1, 0, 10, false), "girok"); - registerDimension("'Eismond Yrdinath'", new Moon(103, "yrdinath", 0xccccff, 0xccccff, 46743637L, 17460L, 2.5f, 239.15f, 8).setTimeQualifier(4) + registerMoon("yrdinath", "'Eismond Yrdinath'", new Moon(0xccccff, 0xccccff, 46743637L, 17460L, 2.5f, 239.15f, 8).setTimeQualifier(4) .setPerlinGen(Blocks.snow.getState(), Blocks.ice.getState(), 63).setBiome(Biome.SNOWLAND) .enableMobs().enableSnow().setWeather(Weather.SNOW), "transylvania"); - registerDimension("'Wüstenplanet Me'sar'", new Planet(104, "mesar", 0xff7f3f, 0xff6022, 0xff6f00, 56643366L, 87340L, 11.0f, 333.15f) + registerPlanet("mesar", "'Wüstenplanet Me'sar'", new Planet(0xff7f3f, 0xff6022, 0xff6f00, 56643366L, 87340L, 11.0f, 333.15f) .setTimeQualifier(5).setPerlinGen(Blocks.rock.getState(), Blocks.air.getState(), 63) .setBiomeReplacer(Blocks.red_sand.getState()) .setBiomeGen(Biome.MESA, true, 3, 1000, 100000, 100000) @@ -626,10 +561,10 @@ public abstract class UniverseRegistry { .addOre(Blocks.coal_ore.getState(), 8, 4, 30, 0, 16, false) .addOre(Blocks.stone.getState(), 8, 4, 33, 0, 80, false), "girok"); - registerGalaxy("Drkthrn", "drkthrn"); - registerSector("Blvck", "blvck", "drkthrn"); - registerDimension("Ov'rol", new Star(120, "ovrol", 0x000000, 302.0f, 12666.0f, Blocks.goo.getState(), 192), "blvck"); - registerDimension("'Schwarzplanet'", new Planet(121, "blackplanet", 0x000000, 0x000000, 0x000000, 4632918508L, 204556L, 12.0f, 0.0f) + registerGalaxy("drkthrn", "Drkthrn"); + registerSector("blvck", "Blvck", "drkthrn"); + registerStar("ovrol", "Ov'rol", new Star(0x000000, 302.0f, 12666.0f, Blocks.goo.getState(), 192), "blvck"); + registerPlanet("blackplanet", "'Schwarzplanet'", new Planet(0x000000, 0x000000, 0x000000, 4632918508L, 204556L, 12.0f, 0.0f) .setPerlinGen(Blocks.blackened_stone.getState(), Blocks.goo.getState(), 63) .setBiomeReplacer(Blocks.blackened_cobble.getState()).setBiome(Biome.BLACKENED) .enableCaves(Blocks.air.getState()).setDungeons(4).enableMobs() @@ -637,7 +572,7 @@ public abstract class UniverseRegistry { // .addOre(Blocks.PLACEHOLDER_ore.getState(), 0, 2, 3, 0, 12, false) , "ovrol"); - registerDimension("Der Warp", new Semi(-1, "warp", 0x0c001f, 0x0c001f, 0x190033, 285.0f, 3).setCloudTexture(CloudType.DENSE).setCloudHeight(238.0f) + registerSemi("warp", "Der Warp", new Semi(0x0c001f, 0x0c001f, 0x190033, 285.0f, 3).setCloudTexture(CloudType.DENSE).setCloudHeight(238.0f) .setPerlinGen(Blocks.obsidian.getState(), Blocks.lava.getState(), 63) .setBiome(Biome.CHAOS).enableCavesRavines(Blocks.air.getState()).enableLongCaves().enableMobs().enableSnow() .addLake(Blocks.water.getState(), null, Blocks.obsidian.getState(), 8, 0, 255, false) @@ -647,48 +582,48 @@ public abstract class UniverseRegistry { .setStarBrightness(0.9f).setDeepStarBrightness(0.6f) .setStarColorSin(25.0f, 0.1f, 0.25f, 0xff00ff, 1, 4).setDeepStarColorSin(25.0f, 0.1f, 0.5f, 0xff00ff, 1, 4)); - registerDomain("Tian'Xin", "tianxin"); - registerDimension("Ni'enrath", new Area(-2, "nienrath", 0x7f00ff, 0x7f00ff, 276.15f, 1) + registerDomain("tianxin", "Tian'Xin"); + registerArea("nienrath", "Ni'enrath", new Area(0x7f00ff, 0x7f00ff, 276.15f, 1) .setPerlinGen(Blocks.tian.getState(), Blocks.springwater.getState(), 63).setBiome(Biome.TIAN) .setBiomeReplacer(Blocks.tian.getState()).enableLongCaves().enableMobs().enableSnow() .addLake(Blocks.springwater.getState(), Blocks.tian.getState(), Blocks.tian.getState(), 4, 0, 255, false) .addLiquid(Blocks.flowing_springwater.getState(), 50, 8, 255, false), "tianxin"); - - registerDimension("Cyberspace", new Area(-3, "cyberspace", 0x000000, 0x000000, 293.15f, 15) - .setFlatGen(Blocks.green_clay.getState(), 2) - .enableMobs()); - registerDomain("Hölle", "hell"); - registerDimension("Kreis Thedric", new Area(-1001, "thedric", 0x330707, 0x330707, 347.15f, 2).enableLongCaves().enableMobs().enableFortresses() + registerDomain("digital", "Digital"); + registerArea("cyberspace", "Cyberspace", new Area(0x000000, 0x000000, 293.15f, 15) + .setFlatGen(Blocks.green_clay.getState(), 2) + .enableMobs(), "digital"); + + registerDomain("hell", "Hölle"); + registerArea("thedric", "Kreis Thedric", new Area(0x330707, 0x330707, 347.15f, 2).enableLongCaves().enableMobs().enableFortresses() .enableWorldCeiling().enableDenseFog() .setCavernGen(Blocks.hellrock.getState(), Blocks.lava.getState(), 63) .setSurfaceReplacer(Blocks.gravel.getState(), Blocks.soul_sand.getState()) .setBiome(Biome.UPPERHELL), "hell"); - registerDimension("Kreis Kyroth", new Area(-1002, "kyroth", 0x990000, 0x990000, 387.15f, 3).enableLongCaves().enableMobs() + registerArea("kyroth", "Kreis Kyroth", new Area(0x990000, 0x990000, 387.15f, 3).enableLongCaves().enableMobs() .setSimpleGen(Blocks.hellrock.getState(), Blocks.lava.getState(), 64) .setSimpleReplacer(Blocks.obsidian.getState(), Blocks.soul_sand.getState()) .setBiome(Biome.LOWERHELL) .addLake(Blocks.lava.getState(), null, null, 4, 8, 255, false) .addLiquid(Blocks.flowing_lava.getState(), 40, 8, 255, true), "hell"); - registerDimension("Kreis Ahrd", new Area(-1003, "ahrd", 0xcc0000, 0xcc0000, 467.15f, 15).enableLongCaves().enableMobs() + registerArea("ahrd", "Kreis Ahrd", new Area(0xcc0000, 0xcc0000, 467.15f, 15).enableLongCaves().enableMobs() .setPerlinGen(Blocks.hellrock.getState(), Blocks.lava.getState(), 63) .setBiomeReplacer(Blocks.soul_sand.getState()).setBiome(Biome.HELLHILLS) .addLake(Blocks.lava.getState(), Blocks.soul_sand.getState(), Blocks.soul_sand.getState(), 2, 8, 255, false).addLiquid(Blocks.flowing_lava.getState(), 80, 8, 255, true), "hell"); - registerDimension("Kreis Mizorath", new Area(-1004, "mizorath", 0xff0000, 0xff0000, 1067.15f, 15).enableMobs() + registerArea("mizorath", "Kreis Mizorath", new Area(0xff0000, 0xff0000, 1067.15f, 15).enableMobs() .setPerlinGen(Blocks.hellrock.getState(), Blocks.blood.getState(), 63) .setBiomeReplacer(Blocks.soul_sand.getState()).setBiome(Biome.SOULPLAINS), "hell"); - registerDimension("Kreis Dargoth", new Area(-1005, "dargoth", 0xff3f0c, 0xff3f0c, 1707.15f, 15).enableMobs() + registerArea("dargoth", "Kreis Dargoth", new Area(0xff3f0c, 0xff3f0c, 1707.15f, 15).enableMobs() .setPerlinGen(Blocks.hellrock.getState(), Blocks.magma.getState(), 63) .setBiomeReplacer(Blocks.soul_sand.getState()).setBiome(Biome.SOULPLAINS), "hell"); - registerDimension("Kreis Aasirith", new Area(-1006, "aasirith", 0x191919, 0x191919, 2482.0f, 1).enableLongCaves().enableMobs() + registerArea("aasirith", "Kreis Aasirith", new Area(0x191919, 0x191919, 2482.0f, 1).enableLongCaves().enableMobs() .setPerlinGen(Blocks.rock.getState(), Blocks.magma.getState(), 63) .setBiomeReplacer(Blocks.ash.getState()).setBiome(Biome.ASHLAND) .addLake(Blocks.lava.getState(), Blocks.rock.getState(), Blocks.rock.getState(), 2, 8, 255, false).addLiquid(Blocks.flowing_lava.getState(), 80, 8, 255, true), "hell"); setPresets(); - clear(); } private static Dimension addPreset(String name, String data) { @@ -696,7 +631,7 @@ public abstract class UniverseRegistry { } private static Dimension addPreset(String name, String base, String data) { - Dimension dim = BASE_ALIASES.get(base).copy(UniverseRegistry.MORE_DIM_ID, "preset"); + Dimension dim = NAME_MAP.get(base).copy(); TagObject ptag; try { ptag = TagObject.parse("{" + data + "}"); @@ -704,7 +639,7 @@ public abstract class UniverseRegistry { catch(IllegalArgumentException e) { throw new RuntimeException(e); } - TagObject dtag = dim.toTags(true); + TagObject dtag = dim.writeGenerator(); if(ptag.getBool("ClearGenerator")) { ptag.remove("ClearGenerator"); dtag.remove("FloorBlock"); @@ -750,7 +685,7 @@ public abstract class UniverseRegistry { Dimension.writeState(dtag, "CaveFillBlock", Blocks.air.getState()); } dtag.merge(ptag); - dim.fromTags(dtag); + dim.readGenerator(dtag); dim.setCustomName(name); // BASE_DIMS.add(dim); return dim; diff --git a/common/src/main/java/common/item/tool/ItemInfoWand.java b/common/src/main/java/common/item/tool/ItemInfoWand.java index 484b7b32..00e659c5 100755 --- a/common/src/main/java/common/item/tool/ItemInfoWand.java +++ b/common/src/main/java/common/item/tool/ItemInfoWand.java @@ -16,9 +16,9 @@ public class ItemInfoWand extends ItemWand { public void onUse(ItemStack stack, EntityNPC player, AWorldServer world, Vec3 vec) { Biome biome = world.getBiomeGenForCoords(new BlockPos(vec.xCoord, 0, vec.zCoord)); - player.connection.addHotbar(TextColor.NEON + "* Position bei Level %d: %.3f %.3f %.3f, %s [%d], %.2f °C", world.dimension.getDimensionId(), + player.connection.addHotbar(TextColor.NEON + "* Position in %s: %.3f %.3f %.3f, %s, %.2f °C", world.dimension.getFormattedName(false), vec.xCoord, vec.yCoord, vec.zCoord, - biome.display, biome.id, world.getTemperatureC(new BlockPos(vec))); + biome.display, world.getTemperatureC(new BlockPos(vec))); } public int getRange(ItemStack stack, EntityNPC player) { diff --git a/common/src/main/java/common/item/tool/ItemSpaceNavigator.java b/common/src/main/java/common/item/tool/ItemSpaceNavigator.java index 22dd4422..3ed09b16 100755 --- a/common/src/main/java/common/item/tool/ItemSpaceNavigator.java +++ b/common/src/main/java/common/item/tool/ItemSpaceNavigator.java @@ -34,8 +34,8 @@ public class ItemSpaceNavigator extends ItemMagnetic { public String getHotbarText(EntityNPC player, ItemStack stack) { BlockPos pos = player.getPosition(); return TextColor.ORANGE + formatImperialTime(player.worldObj, false) + " / " + - String.format("%s (%d) bei %d, %d, %d", player.worldObj.dimension.getFormattedName(false) + TextColor.ORANGE, - player.worldObj.dimension.getDimensionId(), pos.getX(), pos.getY(), pos.getZ()); + String.format("%s bei %d, %d, %d", player.worldObj.dimension.getFormattedName(false) + TextColor.ORANGE, + pos.getX(), pos.getY(), pos.getZ()); } public void addInformation(ItemStack stack, EntityNPC player, List tooltip) { @@ -45,7 +45,7 @@ public class ItemSpaceNavigator extends ItemMagnetic { tooltip.add(TextColor.ORANGE + dims[z]); } BlockPos pos = player.getPosition(); - tooltip.add(TextColor.ORANGE + String.format("%s (%d) bei %d, %d, %d", player.worldObj.dimension.getFormattedName(false) - + TextColor.ORANGE, player.worldObj.dimension.getDimensionId(), pos.getX(), pos.getY(), pos.getZ())); + tooltip.add(TextColor.ORANGE + String.format("%s bei %d, %d, %d", player.worldObj.dimension.getFormattedName(false) + + TextColor.ORANGE, pos.getX(), pos.getY(), pos.getZ())); } } diff --git a/common/src/main/java/common/network/IPlayer.java b/common/src/main/java/common/network/IPlayer.java index 41d069e2..8e5a2337 100644 --- a/common/src/main/java/common/network/IPlayer.java +++ b/common/src/main/java/common/network/IPlayer.java @@ -2,6 +2,7 @@ package common.network; import java.util.List; +import common.dimension.Dimension; import common.entity.Entity; import common.entity.npc.EntityNPC; import common.entity.types.EntityLiving; @@ -76,8 +77,8 @@ public interface IPlayer extends NetHandler { void addHotbar(String format, Object... args); void sendThrowMessage(ItemStack stack); void resetLastExperience(); - void travelToDimension(int dimension, BlockPos pos, float yaw, float pitch, PortalType portal); - void teleport(double x, double y, double z, float yaw, float pitch, int dimension); + void travelToDimension(Dimension dimension, BlockPos pos, float yaw, float pitch, PortalType portal); + void teleport(double x, double y, double z, float yaw, float pitch, Dimension dimension); void onItemPickup(Entity entity, int amount); void mountEntity(Entity entity); void openEditSign(TileEntitySign signTile); diff --git a/common/src/main/java/common/packet/SPacketDimensionName.java b/common/src/main/java/common/packet/SPacketDimensionName.java index 25231478..af93e36f 100755 --- a/common/src/main/java/common/packet/SPacketDimensionName.java +++ b/common/src/main/java/common/packet/SPacketDimensionName.java @@ -16,8 +16,7 @@ public class SPacketDimensionName implements Packet { public SPacketDimensionName(Dimension dim) { this.fullName = dim.getFormattedName(true); - this.customName = dim.getCustomName() != null && dim.getCustomName().length() > 64 ? dim.getCustomName().substring(0, 64) : - dim.getCustomName(); + this.customName = dim.getCustomName(); } public void processPacket(IClientPlayer handler) { @@ -25,14 +24,13 @@ public class SPacketDimensionName implements Packet { } public void readPacketData(PacketBuffer buf) throws IOException { - this.fullName = buf.readString(64); - this.customName = buf.readString(64); - this.customName = this.customName.isEmpty() ? null : this.customName; + this.fullName = buf.readString(4096); + this.customName = buf.readString(1024); } public void writePacketData(PacketBuffer buf) throws IOException { buf.writeString(this.fullName); - buf.writeString(this.customName == null ? "" : this.customName); + buf.writeString(this.customName); } public String getFullName() { diff --git a/common/src/main/java/common/packet/SPacketJoinGame.java b/common/src/main/java/common/packet/SPacketJoinGame.java index 2d6606d9..f70c4f94 100755 --- a/common/src/main/java/common/packet/SPacketJoinGame.java +++ b/common/src/main/java/common/packet/SPacketJoinGame.java @@ -4,38 +4,27 @@ import java.io.IOException; import common.dimension.Dimension; import common.network.IClientPlayer; -import common.network.Packet; import common.network.PacketBuffer; -import common.tags.TagObject; -public class SPacketJoinGame implements Packet { +public class SPacketJoinGame extends SPacketRespawn { private int entityId; - private TagObject dimension; - private int type; - private boolean editor; public SPacketJoinGame() { } - public SPacketJoinGame(int entityIdIn, Dimension dimensionIn, int type, boolean editor) { - this.entityId = entityIdIn; - this.dimension = dimensionIn.toTags(false); - this.type = type; - this.editor = editor; + public SPacketJoinGame(int id, Dimension dim, int type, boolean editor) { + super(dim, type, editor); + this.entityId = id; } public void readPacketData(PacketBuffer buf) throws IOException { this.entityId = buf.readInt(); - this.dimension = buf.readTag(); - this.type = buf.readUnsignedShort(); - this.editor = buf.readBoolean(); + super.readPacketData(buf); } public void writePacketData(PacketBuffer buf) throws IOException { buf.writeInt(this.entityId); - buf.writeTag(this.dimension); - buf.writeShort(this.type & 65535); - buf.writeBoolean(this.editor); + super.writePacketData(buf); } public void processPacket(IClientPlayer handler) { @@ -45,16 +34,4 @@ public class SPacketJoinGame implements Packet { public int getEntityId() { return this.entityId; } - - public Dimension getDimension() { - return Dimension.getByTag(this.dimension, false); - } - - public int getEntityType() { - return this.type; - } - - public boolean isInEditor() { - return this.editor; - } } diff --git a/common/src/main/java/common/packet/SPacketRespawn.java b/common/src/main/java/common/packet/SPacketRespawn.java index fba7d5a7..3eb6001d 100755 --- a/common/src/main/java/common/packet/SPacketRespawn.java +++ b/common/src/main/java/common/packet/SPacketRespawn.java @@ -2,59 +2,107 @@ package common.packet; import java.io.IOException; +import common.dimension.DimType; import common.dimension.Dimension; +import common.init.UniverseRegistry; import common.network.IClientPlayer; import common.network.Packet; import common.network.PacketBuffer; import common.tags.TagObject; -public class SPacketRespawn implements Packet -{ - private TagObject dimension; - private int type; - private boolean editor; +public class SPacketRespawn implements Packet { + private int dimId; + private long seed; + private DimType dimType; + private TagObject dimData; + private String dimName; + private String dimDisplay; + private String dimFull; + private int type; + private boolean editor; - public SPacketRespawn() - { - } + public SPacketRespawn() { + } - public SPacketRespawn(Dimension dimensionIn, int type, boolean editor) - { - this.dimension = dimensionIn.toTags(false); - this.type = type; + public SPacketRespawn(Dimension dim, int type, boolean editor) { + if(dim == null) { + this.dimId = -2; + } + else { + this.seed = dim.getSeed(); + if(dim.isCustom()) { + this.dimType = dim.getType(); + this.dimData = new TagObject(); + dim.toTags(this.dimData); + this.dimName = UniverseRegistry.getName(dim); + this.dimDisplay = dim.getCustomName(); + this.dimFull = dim.getFormattedName(true); + this.dimId = -1; + } + else { + this.dimId = UniverseRegistry.getId(dim); + } + } + this.type = type; this.editor = editor; - } - - public void processPacket(IClientPlayer handler) - { - handler.handleRespawn(this); - } - - public void readPacketData(PacketBuffer buf) throws IOException - { - this.dimension = buf.readTag(); - this.type = buf.readUnsignedShort(); - this.editor = buf.readBoolean(); - } - - public void writePacketData(PacketBuffer buf) throws IOException - { - buf.writeTag(this.dimension); - buf.writeShort(this.type & 65535); - buf.writeBoolean(this.editor); - } + } - public Dimension getDimension() - { - return Dimension.getByTag(this.dimension, false); - } + public void processPacket(IClientPlayer handler) { + handler.handleRespawn(this); + } - public int getEntityType() - { - return this.type; - } + public void readPacketData(PacketBuffer buf) throws IOException { + this.dimId = buf.readVarInt(); + if(this.dimId >= -1) + this.seed = buf.readLong(); + if(this.dimId == -1) { + this.dimType = buf.readEnumValue(DimType.class); + this.dimData = buf.readTag(); + this.dimName = buf.readString(1024); + this.dimDisplay = buf.readString(1024); + this.dimFull = buf.readString(4096); + } + this.type = buf.readUnsignedShort(); + this.editor = buf.readBoolean(); + } - public boolean isInEditor() { - return this.editor; - } + public void writePacketData(PacketBuffer buf) throws IOException { + buf.writeVarInt(this.dimId); + if(this.dimId >= -1) + buf.writeLong(this.seed); + if(this.dimId == -1) { + buf.writeEnumValue(this.dimType); + buf.writeTag(this.dimData); + buf.writeString(this.dimName); + buf.writeString(this.dimDisplay); + buf.writeString(this.dimFull); + } + buf.writeShort(this.type & 65535); + buf.writeBoolean(this.editor); + } + + public Dimension getDimension() { + if(this.dimId < -1) + return null; + Dimension dim = this.dimId >= 0 ? UniverseRegistry.getDimension(this.dimId) : Dimension.create(this.dimType); + dim.setSeed(this.seed); + if(!dim.isCustom()) + return dim; + dim.fromTags(this.dimData); + dim.setCustomName(this.dimDisplay); + dim.setDisplayName(this.dimFull); + return dim; + } + + public String getDimName() { + return this.dimName; + } + + public int getEntityType() { + return this.type; + } + + public boolean isInEditor() { + return this.editor; + } } diff --git a/common/src/main/java/common/util/Position.java b/common/src/main/java/common/util/Position.java index ac29267a..2c45eca5 100755 --- a/common/src/main/java/common/util/Position.java +++ b/common/src/main/java/common/util/Position.java @@ -1,4 +1,71 @@ package common.util; -public record Position(double x, double y, double z, float yaw, float pitch, int dim) { +import common.dimension.Dimension; +import common.init.UniverseRegistry; +import common.world.World; + +public class Position extends Vec3 { + private final float yaw; + private final float pitch; + private final int dim; + + private Position(double x, double y, double z, float yaw, float pitch, int dim) { + super(x, y, z); + this.yaw = yaw; + this.pitch = pitch; + this.dim = dim; + } + + public Position(double x, double y, double z, float yaw, float pitch, Dimension dim) { + this(x, y, z, yaw, pitch, UniverseRegistry.getId(dim)); + } + + public Position(double x, double y, double z, float yaw, float pitch, World world) { + this(x, y, z, yaw, pitch, UniverseRegistry.getId(world.dimension)); + } + + public double x() { + return this.xCoord; + } + + public double y() { + return this.yCoord; + } + + public double z() { + return this.zCoord; + } + + public float yaw() { + return this.yaw; + } + + public float pitch() { + return this.pitch; + } + + public Dimension getDimension() { + return UniverseRegistry.getDimension(this.dim); + } + + public boolean isValid() { + return this.getDimension() != null; + } + + public boolean equals(Object obj) { + if(this == obj) { + return true; + } + else if(!(obj instanceof Position)) { + return false; + } + else { + Position pos = (Position)obj; + return this.xCoord == pos.xCoord && this.yCoord == pos.yCoord && this.zCoord == pos.zCoord && this.yaw == pos.yaw && this.pitch == pos.pitch && this.dim == pos.dim; + } + } + + public String toString() { + return "(" + this.getDimension() + ", " + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ", " + this.yaw + ", " + this.pitch + ")"; + } } diff --git a/common/src/main/java/common/util/Quartet.java b/common/src/main/java/common/util/Quartet.java new file mode 100644 index 00000000..dfdfb474 --- /dev/null +++ b/common/src/main/java/common/util/Quartet.java @@ -0,0 +1,4 @@ +package common.util; + +public record Quartet(A first, B second, C third, D fourth) { +} diff --git a/common/src/main/java/common/util/WorldPos.java b/common/src/main/java/common/util/WorldPos.java index c23895cf..af65241a 100755 --- a/common/src/main/java/common/util/WorldPos.java +++ b/common/src/main/java/common/util/WorldPos.java @@ -1,19 +1,35 @@ package common.util; +import common.dimension.Dimension; +import common.init.UniverseRegistry; +import common.world.World; + public class WorldPos extends BlockPos { private final int dim; - public WorldPos(int x, int y, int z, int dim) { + private WorldPos(int x, int y, int z, int dim) { super(x, y, z); this.dim = dim; } - public WorldPos(BlockPos pos, int dim) { - this(pos.getX(), pos.getY(), pos.getZ(), dim); + public WorldPos(int x, int y, int z, Dimension dim) { + this(x, y, z, UniverseRegistry.getId(dim)); + } + + public WorldPos(int x, int y, int z, World world) { + this(x, y, z, UniverseRegistry.getId(world.dimension)); + } + + public WorldPos(BlockPos pos, Dimension dim) { + this(pos.getX(), pos.getY(), pos.getZ(), UniverseRegistry.getId(dim)); + } + + public WorldPos(BlockPos pos, World world) { + this(pos.getX(), pos.getY(), pos.getZ(), UniverseRegistry.getId(world.dimension)); } - public int getDimension() { - return this.dim; + public Dimension getDimension() { + return UniverseRegistry.getDimension(this.dim); } public boolean equals(Object obj) { @@ -34,6 +50,6 @@ public class WorldPos extends BlockPos { } public String toString() { - return this.dim + ";" + this.getX() + ";" + this.getY() + ";" + this.getZ(); + return "" + this.getDimension() + ";" + this.getX() + ";" + this.getY() + ";" + this.getZ(); } } diff --git a/common/src/main/java/common/world/AWorldServer.java b/common/src/main/java/common/world/AWorldServer.java index e91f4ecd..81089d6c 100644 --- a/common/src/main/java/common/world/AWorldServer.java +++ b/common/src/main/java/common/world/AWorldServer.java @@ -22,7 +22,7 @@ public abstract class AWorldServer extends World { } public abstract List getAllPlayers(); - public abstract AWorldServer getOtherWorld(int dimension); + public abstract AWorldServer getOtherWorld(Dimension dimension); public abstract void placeInDimension(Entity entity, AWorldServer oldWorld, AWorldServer world, BlockPos pos, PortalType portal); public abstract boolean addLoader(BlockPos pos); public abstract boolean removeLoader(BlockPos pos); diff --git a/server/src/main/java/server/Server.java b/server/src/main/java/server/Server.java index c256250c..4fddc01a 100755 --- a/server/src/main/java/server/Server.java +++ b/server/src/main/java/server/Server.java @@ -247,7 +247,6 @@ public final class Server implements IThreadListener, Executor { for(SVar svar : this.variables.values()) { svar.set(svar.def, svar.noDef, false); } - UniverseRegistry.clear(); } } Log.IO.info("Erstelle neue Welt und Konfiguration"); @@ -374,8 +373,8 @@ public final class Server implements IThreadListener, Executor { double posZ = tag.getDouble("PosZ"); float rotYaw = tag.getFloat("Yaw"); float rotPitch = tag.getFloat("Pitch"); - int dimension = tag.getInt("Dimension"); - return new Position(posX, posY, posZ, rotYaw, rotPitch, dimension); + Dimension dimension = UniverseRegistry.getDimension(tag.getString("Dimension")); + return dimension == null ? null : new Position(posX, posY, posZ, rotYaw, rotPitch, dimension); } public void saveAllWorlds(boolean message) { @@ -393,12 +392,12 @@ public final class Server implements IThreadListener, Executor { } private void unloadWorld(Dimension dim) { - WorldServer world = this.dimensions.get(dim.getDimensionId()); + WorldServer world = this.dimensions.get(UniverseRegistry.getId(dim)); if(world != null && world.players.isEmpty()) { world.saveAllChunks(); Region.finishWrite(); this.worlds.remove(world); - this.dimensions.remove(dim.getDimensionId()); + this.dimensions.remove(UniverseRegistry.getId(dim)); } } @@ -411,12 +410,12 @@ public final class Server implements IThreadListener, Executor { } User.loadDatabase(this.users); this.worlds.add(this.space = new WorldServer(this, wtime, Space.INSTANCE)); - this.dimensions.put(this.space.dimension.getDimensionId(), this.space); + this.dimensions.put(UniverseRegistry.getId(this.space.dimension), this.space); new File("players").mkdirs(); this.setTpsTarget(20.0f); for(Dimension dim : UniverseRegistry.getDimensions()) { if(WorldServer.needsLoading(dim)) { - this.getWorld(dim.getDimensionId()).loadForcedChunks(); + this.getWorld(dim).loadForcedChunks(); } WorldServer.loadWarps(dim, this.warps); } @@ -570,26 +569,25 @@ public final class Server implements IThreadListener, Executor { return this.space; } - public WorldServer getWorld(int dimension) { - WorldServer world = this.dimensions.get(dimension); + public WorldServer getWorld(Dimension dim) { + if(dim == null) + return null; + WorldServer world = this.dimensions.get(UniverseRegistry.getId(dim)); if(world == null) { - Dimension dim = UniverseRegistry.getDimension(dimension); - if(dim == null) - return null; world = new WorldServer(this, this.space.getDayTime(), dim); this.worlds.add(world); - this.dimensions.put(dimension, world); + this.dimensions.put(UniverseRegistry.getId(dim), world); } return world; } - public WorldServer getWorldNoLoad(int dimension) { - return this.dimensions.get(dimension); + public WorldServer getWorldNoLoad(Dimension dim) { + return dim == null ? null : this.dimensions.get(UniverseRegistry.getId(dim)); } public WorldServer getWorld(String alias) { Dimension dim = UniverseRegistry.getDimension(alias); - return dim == null ? null : this.getWorld(dim.getDimensionId()); + return dim == null ? null : this.getWorld(dim); } public List getWorlds() { @@ -698,7 +696,7 @@ public final class Server implements IThreadListener, Executor { int y = pos.getY(); while(world.getState(new BlockPos(pos.getX(), y, pos.getZ())).getBlock().getMaterial().blocksMovement() && y < 511) y++; - return new Position(pos.getX() + 0.5, (double)y, pos.getZ() + 0.5, -180.0f + world.rand.floatv() * 360.0f, 0.0f, world.dimension.getDimensionId()); + return new Position(pos.getX() + 0.5, (double)y, pos.getZ() + 0.5, -180.0f + world.rand.floatv() * 360.0f, 0.0f, world); } public void addUser(User user) { @@ -727,7 +725,7 @@ public final class Server implements IThreadListener, Executor { this.online.put(loginUser, conn); tag = conn.readCharacter(); - WorldServer world = tag == null ? this.space : this.getWorld(tag.getInt("Dimension")); + WorldServer world = tag == null ? this.space : this.getWorld(tag.getString("Dimension")); world = world == null ? this.space : world; EntityNPC player = conn.createPlayer(world, tag == null ? EntityRegistry.getEntityString(EntityHuman.class) : tag.getString("id")); if(tag != null) @@ -738,7 +736,7 @@ public final class Server implements IThreadListener, Executor { player.moveToBlockPosAndAngles(new BlockPos(0, 16384, 0), 0.0f, 0.0f); Log.NETWORK.info(loginUser + "[" + connection.getCutAddress() + "] hat sich mit Objekt-ID " - + player.getId() + " auf Level " + world.dimension.getDimensionId() + ": " + + player.getId() + " auf " + UniverseRegistry.getName(world.dimension) + ": " + String.format("%.2f %.2f %.2f", player.posX, player.posY, player.posZ) + " verbunden (" + (tag == null ? "Charakter-Editor" : "'" + player.getCommandName() + "'") + ")"); conn.sendPacket(new SPacketJoinGame(player.getId(), world.dimension, EntityRegistry.getEntityID(player), tag == null)); @@ -811,7 +809,7 @@ public final class Server implements IThreadListener, Executor { if(entity != null) { TagObject etag = new TagObject(); entity.writeTags(etag); - etag.setInt("Dimension", entity.worldObj.dimension.getDimensionId()); + etag.setString("Dimension", UniverseRegistry.getName(entity.worldObj.dimension)); etag.setString("id", EntityRegistry.getEntityString(entity)); conn.writeCharacter(etag); } @@ -878,7 +876,7 @@ public final class Server implements IThreadListener, Executor { nplayer.setPosition(nplayer.posX, nplayer.posY + 1.0D, nplayer.posZ); } } - conn.sendPacket(new SPacketRespawn(world.dimension, EntityRegistry.getEntityID(nplayer), conn.isInEditor())); + conn.sendPacket(new SPacketRespawn(world.dimension != oldWorld.dimension ? world.dimension : null, EntityRegistry.getEntityID(nplayer), conn.isInEditor())); conn.setPlayerLocation(nplayer.posX, nplayer.posY, nplayer.posZ, nplayer.rotYaw, nplayer.rotPitch); conn.sendPacket(new SPacketSetExperience(nplayer.experience, nplayer.experienceTotal, nplayer.experienceLevel)); this.updateTimeAndWeatherForPlayer(conn, world); @@ -898,7 +896,7 @@ public final class Server implements IThreadListener, Executor { old.unmount(); TagObject oldTag = new TagObject(); old.writeTags(oldTag); - oldTag.setInt("Dimension", old.worldObj.dimension.getDimensionId()); + oldTag.setString("Dimension", UniverseRegistry.getName(old.worldObj.dimension)); oldTag.setString("id", EntityRegistry.getEntityString(old)); WorldServer oldWorld = (WorldServer)old.getServerWorld(); @@ -907,7 +905,7 @@ public final class Server implements IThreadListener, Executor { oldWorld.removePlayer(old); oldWorld.removePlayerEntityDangerously(old); - WorldServer world = tag == null ? this.space : this.getWorld(tag.getInt("Dimension")); + WorldServer world = tag == null ? this.space : this.getWorld(tag.getString("Dimension")); world = world == null ? this.space : world; EntityNPC nplayer = conn.createPlayer(world, tag == null ? EntityRegistry.getEntityString(clazz) : tag.getString("id")); if(tag != null) @@ -920,7 +918,7 @@ public final class Server implements IThreadListener, Executor { world.loadChunk((int)nplayer.posX >> 4, (int)nplayer.posZ >> 4); world.addPlayer(nplayer); world.spawnEntityInWorld(nplayer); - conn.sendPacket(new SPacketRespawn(world.dimension, EntityRegistry.getEntityID(nplayer), conn.isInEditor())); + conn.sendPacket(new SPacketRespawn(world.dimension != oldWorld.dimension ? world.dimension : null, EntityRegistry.getEntityID(nplayer), conn.isInEditor())); conn.sendPacket(new SPacketSkin(nplayer.getId(), nplayer.getSkin())); // , nplayer.getModel())); conn.setPlayerLocation(nplayer.posX, nplayer.posY, nplayer.posZ, nplayer.rotYaw, nplayer.rotPitch); conn.sendPacket(new SPacketSetExperience(nplayer.experience, nplayer.experienceTotal, nplayer.experienceLevel)); @@ -935,7 +933,7 @@ public final class Server implements IThreadListener, Executor { return oldTag; } - public void transferToDimension(EntityNPC player, int dimension, BlockPos pos, float yaw, float pitch, PortalType portal) { + public void transferToDimension(EntityNPC player, Dimension dimension, BlockPos pos, float yaw, float pitch, PortalType portal) { WorldServer oldWorld = (WorldServer)player.getServerWorld(); // this.getWorld(player.dimension); WorldServer newWorld = this.getWorld(dimension); player.connection.sendPacket(new SPacketRespawn(newWorld.dimension, EntityRegistry.getEntityID(player), player.connection.isInEditor())); @@ -998,32 +996,6 @@ public final class Server implements IThreadListener, Executor { } } - public void sendPacket(Packet packet, int dimension) { - for(Player conn : this.players) { - if(conn.getEntity() != null && conn.getEntity().worldObj.dimension.getDimensionId() == dimension) { - conn.sendPacket(packet); - } - } - } - - public void sendNear(double x, double y, double z, double radius, int dimension, Packet packet) { - this.sendNearExcept(null, x, y, z, radius, dimension, packet); - } - - public void sendNearExcept(EntityNPC except, double x, double y, double z, double radius, int dimension, Packet packet) { - for(Player conn : this.players) { - EntityNPC player = conn.getEntity(); - if(player != null && player != except && player.worldObj.dimension.getDimensionId() == dimension) { - double dx = x - player.posX; - double dy = y - player.posY; - double dz = z - player.posZ; - if(dx * dx + dy * dy + dz * dz < radius * radius) { - conn.sendPacket(packet); - } - } - } - } - public void saveAllPlayerData(boolean message) { if(message) { Log.TICK.info("Speichere Spielerdaten"); diff --git a/server/src/main/java/server/command/DimensionParser.java b/server/src/main/java/server/command/DimensionParser.java index c3e20536..b5f9369a 100644 --- a/server/src/main/java/server/command/DimensionParser.java +++ b/server/src/main/java/server/command/DimensionParser.java @@ -16,15 +16,6 @@ public class DimensionParser extends CompletingParser { public Object parse(CommandEnvironment env, String input) { Dimension dim = UniverseRegistry.getDimension(input); - if(dim != null) - return dim; - int id = Integer.MIN_VALUE; - try { - id = Integer.parseInt(input); - } - catch(NumberFormatException e) { - } - dim = UniverseRegistry.getDimension(id); if(dim == null) throw new RunException("Unbekannte Dimension '%s'", input); return dim; @@ -34,7 +25,7 @@ public class DimensionParser extends CompletingParser { if(!this.useSender) return null; Position pos = env.getExecutor().getExecPos(); - return pos == null ? null : UniverseRegistry.getDimension(pos.dim()); + return pos == null ? null : pos.getDimension(); // if(dim == null) // throw new ScriptException("Unbekannte Dimension '%s'"); } diff --git a/server/src/main/java/server/command/WorldParser.java b/server/src/main/java/server/command/WorldParser.java index b397f73f..78ca3315 100644 --- a/server/src/main/java/server/command/WorldParser.java +++ b/server/src/main/java/server/command/WorldParser.java @@ -5,6 +5,7 @@ import java.util.List; import common.collect.Lists; import common.dimension.Dimension; +import common.init.UniverseRegistry; import server.world.WorldServer; public class WorldParser extends DimensionParser { @@ -17,7 +18,7 @@ public class WorldParser extends DimensionParser { public WorldServer parse(CommandEnvironment env, String input) { Dimension dim = (Dimension)super.parse(env, input); - WorldServer world = this.loadedOnly ? env.getServer().getWorldNoLoad(dim.getDimensionId()) : env.getServer().getWorld(dim.getDimensionId()); + WorldServer world = this.loadedOnly ? env.getServer().getWorldNoLoad(dim) : env.getServer().getWorld(dim); if(world == null) throw new RunException("Dimension '%s' ist nicht geladen", dim.getFormattedName(false)); return world; @@ -27,7 +28,7 @@ public class WorldParser extends DimensionParser { Dimension dim = (Dimension)super.getDefault(env); if(dim == null) return null; - return this.loadedOnly ? env.getServer().getWorldNoLoad(dim.getDimensionId()) : env.getServer().getWorld(dim.getDimensionId()); + return this.loadedOnly ? env.getServer().getWorldNoLoad(dim) : env.getServer().getWorld(dim); // if(world == null) // throw new ScriptException("Dimension '%s' ist nicht geladen", dim.getFormattedName(false)); // return world; @@ -37,7 +38,7 @@ public class WorldParser extends DimensionParser { if(this.loadedOnly) { List loaded = Lists.newArrayList(); for(WorldServer world : env.getServer().getWorlds()) { - loaded.add(world.dimension.getDimensionName()); + loaded.add(UniverseRegistry.getName(world.dimension)); } return loaded; } diff --git a/server/src/main/java/server/command/commands/CommandDeathspot.java b/server/src/main/java/server/command/commands/CommandDeathspot.java index dcdff13c..991c7ea5 100644 --- a/server/src/main/java/server/command/commands/CommandDeathspot.java +++ b/server/src/main/java/server/command/commands/CommandDeathspot.java @@ -4,7 +4,6 @@ import java.util.List; import common.entity.Entity; import common.entity.npc.EntityNPC; -import common.init.UniverseRegistry; import common.util.Position; import server.command.Command; import server.command.CommandEnvironment; @@ -28,7 +27,7 @@ public class CommandDeathspot extends Command { throw new RunException("%s hat keinen letzten Todespunkt", player.getCommandName()); for(Entity entity : entities) { entity.teleport(pos); - exec.log("%s zum Todespunkt von %s (%d, %d, %d in %s) teleportiert", entity.getCommandName(), player.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), UniverseRegistry.getDimension(pos.dim()).getFormattedName(false)); + exec.log("%s zum Todespunkt von %s (%d, %d, %d in %s) teleportiert", entity.getCommandName(), player.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), pos.getDimension().getFormattedName(false)); } return entities.size(); } diff --git a/server/src/main/java/server/command/commands/CommandLoad.java b/server/src/main/java/server/command/commands/CommandLoad.java index f59cbbe0..0a620ec0 100644 --- a/server/src/main/java/server/command/commands/CommandLoad.java +++ b/server/src/main/java/server/command/commands/CommandLoad.java @@ -53,7 +53,7 @@ public class CommandLoad extends Command { long orbit, long rotation, double offset, double gravity, double temperature, int brightness) { if(teleport && !exec.isPlayer()) throw new RunException("Nur Spieler können teleportiert werden"); - if(UniverseRegistry.getDimension(name) != null) + if(UniverseRegistry.isRegistered(name)) throw new RunException("Dimension '%s' existiert bereits", name); if(name.equals(this.loadingDim)) throw new RunException("Dimension '%s' wird gerade geladen", name); @@ -76,7 +76,7 @@ public class CommandLoad extends Command { if(teleport && pos != null) { Player player = env.getServer().getPlayer(((Player)exec).getUser()); if(player != null && player.getPresentEntity() != null) - player.getPresentEntity().teleport(CommandWorld.adjust(env.getServer().getWorld(planet.getDimensionId()), pos), planet.getDimensionId()); + player.getPresentEntity().teleport(CommandWorld.adjust(env.getServer().getWorld(planet), pos), planet); } })) == null) { this.loadingDim = null; @@ -91,6 +91,6 @@ public class CommandLoad extends Command { planet.setBiome(biome); exec.log(TextColor.GREEN + "Dimension '%s' wurde registriert", display); if(teleport && ((Player)exec).getPresentEntity() != null) - ((Player)exec).getPresentEntity().teleport(CommandWorld.adjust(env.getServer().getWorld(planet.getDimensionId()), ((Player)exec).getPresentEntity().getPosition()), planet.getDimensionId()); + ((Player)exec).getPresentEntity().teleport(CommandWorld.adjust(env.getServer().getWorld(planet), ((Player)exec).getPresentEntity().getPosition()), planet); } } diff --git a/server/src/main/java/server/command/commands/CommandOfflinetp.java b/server/src/main/java/server/command/commands/CommandOfflinetp.java index 7afdb7e0..86fcf3ec 100644 --- a/server/src/main/java/server/command/commands/CommandOfflinetp.java +++ b/server/src/main/java/server/command/commands/CommandOfflinetp.java @@ -4,7 +4,6 @@ import java.util.Collection; import java.util.List; import common.entity.Entity; -import common.init.UniverseRegistry; import common.util.Position; import server.command.Command; import server.command.CommandEnvironment; @@ -34,7 +33,7 @@ public class CommandOfflinetp extends Command { throw new RunException("Spieler '%s' konnte nicht gefunden werden", user); for(Entity entity : entities) { entity.teleport(pos); - exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), UniverseRegistry.getDimension(pos.dim()).getFormattedName(false)); + exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), pos.getDimension().getFormattedName(false)); } return entities.size(); } diff --git a/server/src/main/java/server/command/commands/CommandReturn.java b/server/src/main/java/server/command/commands/CommandReturn.java index 4f99203b..ffa13393 100644 --- a/server/src/main/java/server/command/commands/CommandReturn.java +++ b/server/src/main/java/server/command/commands/CommandReturn.java @@ -3,7 +3,6 @@ package server.command.commands; import java.util.List; import common.entity.npc.EntityNPC; -import common.init.UniverseRegistry; import common.util.Position; import server.command.Command; import server.command.CommandEnvironment; @@ -24,7 +23,7 @@ public class CommandReturn extends Command { Position pos = ((Player)player.connection).getLastTeleport(); if(pos != null) { player.teleport(pos); - exec.log("%s zum letzten Punkt (%d, %d, %d in %s) teleportiert", player.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), UniverseRegistry.getDimension(pos.dim()).getFormattedName(false)); + exec.log("%s zum letzten Punkt (%d, %d, %d in %s) teleportiert", player.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), pos.getDimension().getFormattedName(false)); done++; } } diff --git a/server/src/main/java/server/command/commands/CommandTele.java b/server/src/main/java/server/command/commands/CommandTele.java index 8baf2f2e..d79bdf44 100644 --- a/server/src/main/java/server/command/commands/CommandTele.java +++ b/server/src/main/java/server/command/commands/CommandTele.java @@ -26,7 +26,7 @@ public class CommandTele extends Command { public Object exec(CommandEnvironment env, Executor exec, Vec3 position, Dimension dim, Double yaw, Double pitch, List entities) { for(Entity entity : entities) { - entity.teleport(position.xCoord, position.yCoord, position.zCoord, yaw == null ? entity.rotYaw : yaw.floatValue(), pitch == null ? entity.rotPitch : pitch.floatValue(), dim.getDimensionId()); + entity.teleport(position.xCoord, position.yCoord, position.zCoord, yaw == null ? entity.rotYaw : yaw.floatValue(), pitch == null ? entity.rotPitch : pitch.floatValue(), dim); exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)position.xCoord, (int)position.yCoord, (int)position.zCoord, dim.getFormattedName(false)); } return entities.size(); diff --git a/server/src/main/java/server/command/commands/CommandTime.java b/server/src/main/java/server/command/commands/CommandTime.java index 33d6d55e..bc836bf4 100644 --- a/server/src/main/java/server/command/commands/CommandTime.java +++ b/server/src/main/java/server/command/commands/CommandTime.java @@ -70,7 +70,7 @@ public class CommandTime extends Command { public Object exec(CommandEnvironment env, Executor exec, String timeStr, boolean absolute) { Position pos = exec.getExecPos(); - WorldServer world = pos == null ? env.getServer().getSpace() : env.getServer().getWorld(pos.dim()); + WorldServer world = pos == null ? env.getServer().getSpace() : env.getServer().getWorld(pos.getDimension()); long time = absolute ? 0L : world.getDayTime(); long fwd = parseDayTime(world.dimension, timeStr); if(fwd >= 0L) { diff --git a/server/src/main/java/server/command/commands/CommandTp.java b/server/src/main/java/server/command/commands/CommandTp.java index cc4595b5..8c8fef96 100644 --- a/server/src/main/java/server/command/commands/CommandTp.java +++ b/server/src/main/java/server/command/commands/CommandTp.java @@ -3,7 +3,6 @@ package server.command.commands; import java.util.List; import common.entity.Entity; -import common.init.UniverseRegistry; import common.util.Position; import server.command.Command; import server.command.CommandEnvironment; @@ -23,7 +22,7 @@ public class CommandTp extends Command { Position pos = target.getPos(); for(Entity entity : entities) { entity.teleport(pos); - exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), UniverseRegistry.getDimension(pos.dim()).getFormattedName(false)); + exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), pos.getDimension().getFormattedName(false)); } return entities.size(); } diff --git a/server/src/main/java/server/command/commands/CommandWarp.java b/server/src/main/java/server/command/commands/CommandWarp.java index 11140492..15e10f11 100644 --- a/server/src/main/java/server/command/commands/CommandWarp.java +++ b/server/src/main/java/server/command/commands/CommandWarp.java @@ -4,7 +4,6 @@ import java.util.Collection; import java.util.List; import common.entity.Entity; -import common.init.UniverseRegistry; import common.util.Position; import server.command.Command; import server.command.CommandEnvironment; @@ -43,12 +42,12 @@ public class CommandWarp extends Command { pos = env.getServer().getWarps().get(warp); if(pos == null) throw new RunException("Warp '%s' existiert nicht", warp); - else if(env.getServer().getWorld(pos.dim()) == null) - throw new RunException("Warp '%s' hat kein Level (%s)", warp, pos.dim()); + else if(pos.getDimension() == null) + throw new RunException("Warp '%s' hat keine Dimension", warp); // } for(Entity entity : entities) { entity.teleport(pos); - exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), UniverseRegistry.getDimension(pos.dim()).getFormattedName(false)); + exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), (int)pos.x(), (int)pos.y(), (int)pos.z(), pos.getDimension().getFormattedName(false)); } return entities.size(); } diff --git a/server/src/main/java/server/command/commands/CommandWorld.java b/server/src/main/java/server/command/commands/CommandWorld.java index 21edf5e6..47ef3ab4 100644 --- a/server/src/main/java/server/command/commands/CommandWorld.java +++ b/server/src/main/java/server/command/commands/CommandWorld.java @@ -22,7 +22,7 @@ public class CommandWorld extends Command { public Object exec(CommandEnvironment env, Executor exec, WorldServer world, List entities) { for(Entity entity : entities) { BlockPos pos = adjust(world, entity.getPosition()); - entity.teleport(pos, world.dimension.getDimensionId()); + entity.teleport(pos, world); exec.log("%s nach %d, %d, %d in %s teleportiert", entity.getCommandName(), pos.getX(), pos.getY(), pos.getZ(), world.dimension.getFormattedName(false)); } return entities.size(); diff --git a/server/src/main/java/server/network/Player.java b/server/src/main/java/server/network/Player.java index 79db8561..296201a4 100755 --- a/server/src/main/java/server/network/Player.java +++ b/server/src/main/java/server/network/Player.java @@ -628,21 +628,21 @@ public class Player extends User implements ICrafting, Executor, IPlayer this.lastExperience = -1; } - public void travelToDimension(int dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) + public void travelToDimension(Dimension dimensionId, BlockPos pos, float yaw, float pitch, PortalType portal) { this.server.transferToDimension(this.entity, dimensionId, pos, yaw, pitch, portal); this.lastExperience = -1; this.lastHealth = -1.0F; } - public void teleport(double x, double y, double z, float yaw, float pitch, int dimension) { + public void teleport(double x, double y, double z, float yaw, float pitch, Dimension dimension) { this.teleportPos = this.entity.getPos(); x = ExtMath.clampd(x, -World.MAX_SIZE + 1, World.MAX_SIZE - 1); z = ExtMath.clampd(z, -World.MAX_SIZE + 1, World.MAX_SIZE - 1); // this.setLastTeleport(this.getLocation()); this.entity.unmount(); // this.mountEntity(null); - if(this.entity.worldObj.dimension.getDimensionId() != dimension) + if(this.entity.worldObj.dimension != dimension) this.travelToDimension(dimension, new BlockPos(x, y, z), yaw, pitch, null); this.setPlayerLocation(x, y, z, yaw, pitch); this.entity.setRotationYawHead(yaw); @@ -816,7 +816,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer public void playSound(SoundEvent name, float volume) { - this.server.sendNearExcept(this.entity, this.entity.posX, this.entity.posY, this.entity.posZ, volume > 1.0F ? (double)(16.0F * volume) : 16.0D, this.entity.worldObj.dimension.getDimensionId(), new SPacketSoundEffect(name, this.entity.posX, this.entity.posY, this.entity.posZ, volume)); + this.getEntityWorld().sendNearExcept(this.entity, this.entity.posX, this.entity.posY, this.entity.posZ, volume > 1.0F ? (double)(16.0F * volume) : 16.0D, new SPacketSoundEffect(name, this.entity.posX, this.entity.posY, this.entity.posZ, volume)); } @@ -1362,8 +1362,8 @@ public class Player extends User implements ICrafting, Executor, IPlayer } private String selectPoint(BlockPos position, boolean second) { - if(this.selectionDim == Integer.MIN_VALUE || this.selectionDim != this.entity.worldObj.dimension.getDimensionId()) { - this.selectionDim = this.entity.worldObj.dimension.getDimensionId(); + if(this.selectionDim == Integer.MIN_VALUE || this.selectionDim != UniverseRegistry.getId(this.entity.worldObj.dimension)) { + this.selectionDim = UniverseRegistry.getId(this.entity.worldObj.dimension); this.selPos1 = null; this.selPos2 = null; } @@ -1390,13 +1390,16 @@ public class Player extends User implements ICrafting, Executor, IPlayer msg += String.format("; Zwischenablage: %dx%dx%d (%d)", nx, ny, nz, nx * ny * nz); } if(this.edit == EditAction.SELECT && this.selectionDim != Integer.MIN_VALUE && (this.selPos1 != null || this.selPos2 != null)) { - msg += "; Bereich Level " + this.selectionDim + ": "; - msg += (this.selPos1 != null ? this.selPos1 : "*") + " -> " + (this.selPos2 != null ? this.selPos2 : "*"); - if(this.selPos1 != null && this.selPos2 != null) { - msg += " = " + (1 + Math.max(this.selPos1.getX(), this.selPos2.getX()) - Math.min(this.selPos1.getX(), this.selPos2.getX())) + - "x" + (1 + Math.max(this.selPos1.getY(), this.selPos2.getY()) - Math.min(this.selPos1.getY(), this.selPos2.getY())) + - "x" + (1 + Math.max(this.selPos1.getZ(), this.selPos2.getZ()) - Math.min(this.selPos1.getZ(), this.selPos2.getZ())) + " (" + this.getSelectionArea() + ")"; - } + Dimension dim = UniverseRegistry.getDimension(this.selectionDim); + if(dim != null) { + msg += "; Bereich " + dim.getFormattedName(false) + ": "; + msg += (this.selPos1 != null ? this.selPos1 : "*") + " -> " + (this.selPos2 != null ? this.selPos2 : "*"); + if(this.selPos1 != null && this.selPos2 != null) { + msg += " = " + (1 + Math.max(this.selPos1.getX(), this.selPos2.getX()) - Math.min(this.selPos1.getX(), this.selPos2.getX())) + + "x" + (1 + Math.max(this.selPos1.getY(), this.selPos2.getY()) - Math.min(this.selPos1.getY(), this.selPos2.getY())) + + "x" + (1 + Math.max(this.selPos1.getZ(), this.selPos2.getZ()) - Math.min(this.selPos1.getZ(), this.selPos2.getZ())) + " (" + this.getSelectionArea() + ")"; + } + } } if(this.edit == EditAction.TRANSFORM && (this.rotation != 0 || this.flipX || this.flipZ)) msg += "; " + this.getRotationInfo(); @@ -1487,7 +1490,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer } private boolean copyClipboard() { - if(this.selectionDim == Integer.MIN_VALUE || this.selectionDim != this.entity.worldObj.dimension.getDimensionId() || + if(this.selectionDim == Integer.MIN_VALUE || this.selectionDim != UniverseRegistry.getId(this.entity.worldObj.dimension) || this.selPos1 == null || this.selPos2 == null) return false; WorldServer source = this.getEntityWorld(); @@ -1591,7 +1594,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer if(info != null && info.isEmpty()) info = null; Alignment align = Alignment.getByName(tag.getString("Align")); - Dimension dimension = UniverseRegistry.getDimension(tag.getInt("Dimension")); + Dimension dimension = UniverseRegistry.getDimension(tag.getString("Dimension")); String dim = dimension == null ? "???" : dimension.getFormattedName(false); BlockPos pos = new BlockPos(tag.getDouble("PosX"), tag.getDouble("PosY"), tag.getDouble("PosZ")); String type = EntityRegistry.getEntityName(tag.getString("id")); @@ -2452,10 +2455,9 @@ public class Player extends User implements ICrafting, Executor, IPlayer this.charEditor = false; this.selected = this.characters.size(); this.characters.add(new TagObject()); - WorldServer world = this.server.getWorld(packetIn.getAuxData()); + WorldServer world = this.server.getWorld(UniverseRegistry.getDimension(packetIn.getAuxData())); world = world == null ? this.server.getSpace() : world; - WorldPos origin = new WorldPos(world.rand.range(-SVars.originRadius, SVars.originRadius), 64, world.rand.range(-SVars.originRadius, SVars.originRadius), - world.dimension.getDimensionId()); + WorldPos origin = new WorldPos(world.rand.range(-SVars.originRadius, SVars.originRadius), 64, world.rand.range(-SVars.originRadius, SVars.originRadius), world); this.entity.setOrigin(origin); Position pos = this.server.getRandomSpawnPosition(origin); this.entity.teleport(pos); @@ -2757,7 +2759,7 @@ public class Player extends User implements ICrafting, Executor, IPlayer }); for(Entity entity : list) { entity.teleport(this.entity.posX, this.entity.posY, this.entity.posZ, - this.entity.rotYaw, this.entity.rotPitch, this.entity.worldObj.dimension.getDimensionId()); + this.entity.rotYaw, this.entity.rotPitch, this.entity.worldObj); } } break; @@ -3065,11 +3067,11 @@ public class Player extends User implements ICrafting, Executor, IPlayer } public Position getLastTeleport() { - return this.teleportPos; + return this.teleportPos != null && this.teleportPos.isValid() ? this.teleportPos : null; } public Position getLastDeath() { - return this.deathPos; + return this.deathPos != null && this.deathPos.isValid() ? this.deathPos : null; } public String getEntityName() { diff --git a/server/src/main/java/server/world/Converter.java b/server/src/main/java/server/world/Converter.java index 06e6112b..e37627bb 100644 --- a/server/src/main/java/server/world/Converter.java +++ b/server/src/main/java/server/world/Converter.java @@ -10,14 +10,12 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.zip.GZIPInputStream; import java.util.zip.InflaterInputStream; -import common.biome.Biome; import common.block.Block; import common.block.artificial.BlockBed; import common.block.artificial.BlockBed.EnumPartType; @@ -1837,9 +1835,6 @@ public abstract class Converter { } } ntag.setList("Sections", sections); - byte[] biomes = new byte[256]; - Arrays.fill(biomes, (byte)(Biome.DEF_BIOME.id & 255)); - ntag.setByteArray("Biomes", biomes); } else { ntag.setIntArray("HeightMap", tag.getIntArray("HeightMap")); diff --git a/server/src/main/java/server/world/WorldServer.java b/server/src/main/java/server/world/WorldServer.java index 4dfa4b9b..ea1aaf75 100755 --- a/server/src/main/java/server/world/WorldServer.java +++ b/server/src/main/java/server/world/WorldServer.java @@ -183,6 +183,32 @@ public final class WorldServer extends AWorldServer { public static float clampGravity() { return ExtMath.clampf(SVars.gravity, -10.0f, 10.0f); } + + public void sendPacket(Packet packet) { + for(Player conn : this.server.getPlayers()) { + if(conn.getEntity() != null && conn.getEntity().worldObj == this) { + conn.sendPacket(packet); + } + } + } + + public void sendNear(double x, double y, double z, double radius, Packet packet) { + this.sendNearExcept(null, x, y, z, radius, packet); + } + + public void sendNearExcept(EntityNPC except, double x, double y, double z, double radius, Packet packet) { + for(Player conn : this.server.getPlayers()) { + EntityNPC player = conn.getEntity(); + if(player != null && player != except && player.worldObj == this) { + double dx = x - player.posX; + double dy = y - player.posY; + double dz = z - player.posZ; + if(dx * dx + dy * dy + dz * dz < radius * radius) { + conn.sendPacket(packet); + } + } + } + } private BiomeGenerator createBiomeGenerator(Random rand) { return this.dimension.getBiomeSize() > 0 ? new BiomeGenLayered(rand.longv(), this.dimension.getDefaultBiome(), this.dimension.isSemiFixed(), this.dimension.getBiomeSize(), this.dimension.getRiverSize(), @@ -289,10 +315,10 @@ public final class WorldServer extends AWorldServer { // this.time = time; this.daytime = dtime; this.updateViewRadius(); - this.chunkDir = new File(new File("chunk"), dim.getDimensionName()); + this.chunkDir = new File(new File("chunk"), UniverseRegistry.getName(dim)); this.chunkDir.mkdirs(); if(!SVars.seed.isEmpty()) - this.rand.setSeed((long)SVars.seed.hashCode() ^ ~((long)dim.getDimensionName().hashCode())); + this.rand.setSeed((long)SVars.seed.hashCode() ^ ~((long)UniverseRegistry.getName(dim).hashCode())); this.seed = this.rand.longv(); this.dimension.setSeed(this.seed); TagObject tag = null; @@ -308,7 +334,7 @@ public final class WorldServer extends AWorldServer { this.exterminated = tag.getBool("Exterminated"); this.time = tag.getLong("Time"); if(tag.hasObject("Generator")) { - this.dimension.fromTags(tag.getObject("Generator")); + this.dimension.readGenerator(tag.getObject("Generator")); if(this.dimension.getType().weather && !this.exterminated) this.weather = this.dimension.getWeather(); this.seed = this.dimension.getSeed(); @@ -871,7 +897,7 @@ public final class WorldServer extends AWorldServer { public static boolean needsLoading(Dimension dim) { TagObject tag = null; try { - File dat = new File(new File(new File("chunk"), dim.getDimensionName()), "loaders.cdt"); + File dat = new File(new File(new File("chunk"), UniverseRegistry.getName(dim)), "loaders.cdt"); if(dat.exists() && dat.isFile()) tag = TagObject.readGZip(dat); } @@ -884,7 +910,7 @@ public final class WorldServer extends AWorldServer { public static void loadWarps(Dimension dim, Map warps) { TagObject tag = null; try { - File dat = new File(new File(new File("chunk"), dim.getDimensionName()), "warps.cdt"); + File dat = new File(new File(new File("chunk"), UniverseRegistry.getName(dim)), "warps.cdt"); if(dat.exists() && dat.isFile()) tag = TagObject.readGZip(dat); } @@ -897,7 +923,7 @@ public final class WorldServer extends AWorldServer { for(int z = 0; z < list.size(); z++) { TagObject pos = list.get(z); warps.put(pos.getString("Name"), new Position(pos.getDouble("X"), pos.getDouble("Y"), pos.getDouble("Z"), - pos.getFloat("Yaw"), pos.getFloat("Pitch"), dim.getDimensionId())); + pos.getFloat("Yaw"), pos.getFloat("Pitch"), dim)); } } } @@ -905,11 +931,12 @@ public final class WorldServer extends AWorldServer { public static void saveWarps(Map warps) { Map> map = Maps.newHashMap(); for(Entry pos : warps.entrySet()) { - Dimension dim = UniverseRegistry.getDimension(pos.getValue().dim()); + Dimension dim = pos.getValue().getDimension(); if(dim != null) { - List list = map.get(pos.getValue().dim()); + int id = UniverseRegistry.getId(dim); + List list = map.get(id); if(list == null) - map.put(pos.getValue().dim(), list = Lists.newArrayList()); + map.put(id, list = Lists.newArrayList()); TagObject warp = new TagObject(); warp.setString("Name", pos.getKey()); warp.setDouble("X", pos.getValue().x()); @@ -921,8 +948,8 @@ public final class WorldServer extends AWorldServer { } } for(Dimension dim : UniverseRegistry.getDimensions()) { - List list = map.get(dim.getDimensionId()); - File file = new File(new File(new File("chunk"), dim.getDimensionName()), "warps.cdt"); + List list = map.get(UniverseRegistry.getId(dim)); + File file = new File(new File(new File("chunk"), UniverseRegistry.getName(dim)), "warps.cdt"); if(list == null) { file.delete(); } @@ -1000,7 +1027,7 @@ public final class WorldServer extends AWorldServer { // this.dataModified = false; TagObject data = new TagObject(); // data.setLong("Seed", this.seed); - data.setObject("Generator", this.dimension.toTags(true)); + data.setObject("Generator", this.dimension.writeGenerator()); data.setLong("Time", this.time); data.setBool("Exterminated", this.exterminated); data.setString("Weather", this.weather.getName()); @@ -1072,7 +1099,7 @@ public final class WorldServer extends AWorldServer { public void strikeLightning(double x, double y, double z, int color, int damage, boolean fire, EntityLiving summoner) { EntityLightning entity = new EntityLightning(this, x, y, z, color, damage, fire, summoner); this.effects.add(entity); - this.server.sendNear(entity.posX, entity.posY, entity.posZ, 512.0D, this.dimension.getDimensionId(), + this.sendNear(entity.posX, entity.posY, entity.posZ, 512.0D, new SPacketSpawnGlobalEntity(entity, 1, entity.color)); if(fire && SVars.fire) { BlockPos pos = new BlockPos(entity); @@ -1130,8 +1157,8 @@ public final class WorldServer extends AWorldServer { for(TickEvent blockeventdata : this.queue[i]) { if(this.fireBlockEvent(blockeventdata)) { - this.server.sendNear((double)blockeventdata.position().getX(), (double)blockeventdata.position().getY(), - (double)blockeventdata.position().getZ(), 64.0D, this.dimension.getDimensionId(), + this.sendNear((double)blockeventdata.position().getX(), (double)blockeventdata.position().getY(), + (double)blockeventdata.position().getZ(), 64.0D, new SPacketBlockAction(blockeventdata.position(), blockeventdata.block(), blockeventdata.id(), blockeventdata.parameter())); } @@ -1156,8 +1183,8 @@ public final class WorldServer extends AWorldServer { public void setWeather(Weather weather) { this.weather = weather; // this.dataModified = true; - this.server.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.SET_WEATHER, - weather.getID()), this.dimension.getDimensionId()); + this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.SET_WEATHER, + weather.getID())); } protected void updateWeather(boolean force) { @@ -1228,15 +1255,15 @@ public final class WorldServer extends AWorldServer { } if(prevRain != this.rain || force) { - this.server.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.RAIN_STRENGTH, this.rain), this.dimension.getDimensionId()); + this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.RAIN_STRENGTH, this.rain)); } if(prevDarkness != this.darkness || force) { - this.server.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.DARKNESS, this.darkness), this.dimension.getDimensionId()); + this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.DARKNESS, this.darkness)); } if(prevFog != this.fog || force) { - this.server.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.FOG_STRENGTH, this.fog), this.dimension.getDimensionId()); + this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.FOG_STRENGTH, this.fog)); } } @@ -1252,7 +1279,7 @@ public final class WorldServer extends AWorldServer { } if(prevTemp != this.temp || force) { - this.server.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.TEMPERATURE, this.temp), this.dimension.getDimensionId()); + this.sendPacket(new SPacketChangeGameState(SPacketChangeGameState.Action.TEMPERATURE, this.temp)); } } @@ -1612,7 +1639,7 @@ public final class WorldServer extends AWorldServer { this.loaderList.clear(); for(Iterator> iter = this.server.getWarps().entrySet().iterator(); iter.hasNext();) { Entry pos = iter.next(); - if(pos.getValue().dim() == this.dimension.getDimensionId()) + if(pos.getValue().getDimension() == this.dimension) iter.remove(); } Region.finishWrite(); @@ -1752,7 +1779,7 @@ public final class WorldServer extends AWorldServer { public void playSound(SoundEvent sound, double x, double y, double z, float volume) { - this.server.sendNear(x, y, z, volume > 1.0F ? (double)(16.0F * volume) : 16.0D, this.dimension.getDimensionId(), new SPacketSoundEffect(sound, x, y, z, volume)); + this.sendNear(x, y, z, volume > 1.0F ? (double)(16.0F * volume) : 16.0D, new SPacketSoundEffect(sound, x, y, z, volume)); } public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) @@ -1765,7 +1792,7 @@ public final class WorldServer extends AWorldServer { public void playAuxSFX(EntityNPC player, int sfxType, BlockPos blockPosIn, int data) { - this.server.sendNearExcept(player, (double)blockPosIn.getX(), (double)blockPosIn.getY(), (double)blockPosIn.getZ(), 64.0D, this.dimension.getDimensionId(), new SPacketEffect(sfxType, blockPosIn, data)); + this.sendNearExcept(player, (double)blockPosIn.getX(), (double)blockPosIn.getY(), (double)blockPosIn.getZ(), 64.0D, new SPacketEffect(sfxType, blockPosIn, data)); } // public void broadcastSound(int soundID, BlockPos pos, int data) @@ -2684,7 +2711,7 @@ public final class WorldServer extends AWorldServer { this.server.placeInDimension(entity, (WorldServer)oldWorld, (WorldServer)world, pos, portal); } - public AWorldServer getOtherWorld(int dimension) { + public AWorldServer getOtherWorld(Dimension dimension) { return this.server.getWorld(dimension); }