diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index aea1e0f5..d20ec780 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -1923,6 +1923,7 @@ public class ClientPlayer implements IClientPlayer public void handleCelestials(SPacketCelestials packet) { NetHandler.checkThread(packet, this, this.gm, this.world); + this.world.setExterminated(packet.getExterminated()); if(this.world.dimension.getType().celestials) { this.world.dimension.setSunColor(packet.getSunColor()); this.world.dimension.setMoonColors(packet.getMoonColors()); diff --git a/client/src/main/java/client/renderer/EntityRenderer.java b/client/src/main/java/client/renderer/EntityRenderer.java index 7ee8068d..53ede24d 100755 --- a/client/src/main/java/client/renderer/EntityRenderer.java +++ b/client/src/main/java/client/renderer/EntityRenderer.java @@ -1351,8 +1351,8 @@ public class EntityRenderer { if (shift > 0.0F) { - float[] sun = world.dimension.getType().days ? - RenderGlobal.calcSunriseSunsetColors(world.getCelestialAngle(partial), partial) : null; + float[] sun = world.dimension.getType().days && !world.dimension.isBaseDestroyed() ? + RenderGlobal.calcSunriseSunsetColors(world.getCelestialAngleRadians(partial), partial) : null; if (sun != null) { shift = shift * sun[3]; diff --git a/client/src/main/java/client/renderer/RenderGlobal.java b/client/src/main/java/client/renderer/RenderGlobal.java index e2c872d4..535c13d4 100755 --- a/client/src/main/java/client/renderer/RenderGlobal.java +++ b/client/src/main/java/client/renderer/RenderGlobal.java @@ -1201,8 +1201,8 @@ public class RenderGlobal GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO); ItemRenderer.disableStandardItemLighting(); - float[] afloat = this.theWorld.dimension.getType().days ? - RenderGlobal.calcSunriseSunsetColors(this.theWorld.getCelestialAngle(partialTicks), partialTicks) : null; + float[] afloat = this.theWorld.dimension.getType().days && !this.theWorld.dimension.isBaseDestroyed() ? + RenderGlobal.calcSunriseSunsetColors(this.theWorld.getCelestialAngleRadians(partialTicks), partialTicks) : null; if (afloat != null) { GlState.disableTexture2D(); @@ -1865,9 +1865,9 @@ public class RenderGlobal rand.setSeed(seed); } - public static float[] calcSunriseSunsetColors(float celestialAngle, float partialTicks) { + public static float[] calcSunriseSunsetColors(float radians, float partial) { float f = 0.4F; - float f1 = ExtMath.cos(celestialAngle * (float)Math.PI * 2.0F) - 0.0F; + float f1 = ExtMath.cos(radians) - 0.0F; float f2 = -0.0F; if(f1 >= f2 - f && f1 <= f2 + f) { diff --git a/client/src/main/java/client/world/ChunkEmpty.java b/client/src/main/java/client/world/ChunkEmpty.java index 8333ada0..a4b9d50b 100755 --- a/client/src/main/java/client/world/ChunkEmpty.java +++ b/client/src/main/java/client/world/ChunkEmpty.java @@ -59,7 +59,7 @@ public class ChunkEmpty extends ChunkClient { super(world, 0, 0); this.debug = debug; this.liquidY = world.dimension.getSeaLevel() - 1; - this.liquid = world.dimension.getLiquid(); + this.liquid = world.dimension.isExterminated() ? Blocks.air.getState() : world.dimension.getLiquid(); this.liquidBlock = this.liquid.getBlock(); this.dummyBlock = this.fillerBlock == Blocks.air ? Blocks.air : Blocks.bedrock; this.dummy = this.dummyBlock.getState(); diff --git a/client/src/main/java/client/world/WorldClient.java b/client/src/main/java/client/world/WorldClient.java index ee6adab0..eaf10899 100755 --- a/client/src/main/java/client/world/WorldClient.java +++ b/client/src/main/java/client/world/WorldClient.java @@ -39,7 +39,6 @@ public class WorldClient extends AWorldClient private static final int DISPLAY_RANGE = 16; private final Client gm; - private final ChunkClient emptyChunk; private final Set entityList = Sets.newHashSet(); private final Set spawnQueue = Sets.newHashSet(); private final Set previousActive = Sets.newHashSet(); @@ -47,7 +46,8 @@ public class WorldClient extends AWorldClient private final List chunkListing = Lists.newArrayList(); private final Set emptyChunkListing = Sets.newHashSet(); private final Set nextEmptyChunkListing = Sets.newHashSet(); -// public final Profiler profiler; + + private ChunkClient emptyChunk; protected int lastLightning; protected Vec3 lightColor = new Vec3(0xffffff); @@ -94,6 +94,18 @@ public class WorldClient extends AWorldClient if(this.gm.player != null && !this.gm.charEditor) this.markReload((int)this.gm.player.posX >> 4, (int)this.gm.player.posZ >> 4, this.gm.renderDistance + 4); } + + public void setExterminated(boolean exterminated) { + this.dimension.setExterminated(exterminated); + this.emptyChunk = new ChunkEmpty(this, this.gm.debugWorld); + this.markReload(); + for(Long id : this.emptyChunkListing) { + this.chunkMapping.add(id, this.emptyChunk); + int x = LongHashMap.getX(id); + int z = LongHashMap.getZ(id); + this.markBlockRangeForRenderUpdate(x << 4, -World.MAX_SIZE_Y, z << 4, (x << 4) + 15, World.MAX_SIZE_Y, (z << 4) + 15); + } + } public void tick() { @@ -668,8 +680,8 @@ public class WorldClient extends AWorldClient } public float getSunBrightness(float p_72971_1_) { - float f = this.getCelestialAngle(p_72971_1_); - float f1 = 1.0F - (ExtMath.cos(f * (float)Math.PI * 2.0F) * 2.0F + 0.2F); + float f = this.getCelestialAngleRadians(p_72971_1_); + float f1 = 1.0F - (ExtMath.cos(f) * 2.0F + 0.2F); f1 = ExtMath.clampf(f1, 0.0F, 1.0F); f1 = 1.0F - f1; f1 = (float)((double)f1 * (1.0D - (double)(this.getRainStrength() * 5.0F) / 16.0D)); @@ -741,12 +753,12 @@ public class WorldClient extends AWorldClient ExtMath.floord(entity.posZ)); Biome biome = this.getBiomeGenForCoords(pos); Vec3 vec; - if(biome.skyColor != 0xffffffff) - vec = new Vec3(biome.skyColor); + if(this.dimension.isExterminated()) + vec = new Vec3(0x101010); else vec = new Vec3(this.dimension.getSkyColor()); if(this.dimension.getType().days) { - float mult = ExtMath.clampf(ExtMath.cos(this.getCelestialAngle(partial) * (float)Math.PI * 2.0F) * 2.0F + 0.5F, + float mult = ExtMath.clampf(ExtMath.cos(this.getCelestialAngleRadians(partial)) * 2.0F + 0.5F, 0.0F, 1.0F); if(this.dimension.getSkyColor() == 0xffffffff) { float temp = ExtMath.clampf(((biome.getTemperature(pos) + 14.0f) / 40.0f + 0.15f) / 3.0F, @@ -797,8 +809,8 @@ public class WorldClient extends AWorldClient Vec3 color = new Vec3(this.dimension.getCloudColor()); Biome biome = this.getBiomeGenForCoords(new BlockPos(ExtMath.floord(entity.posX), ExtMath.floord(entity.posY), ExtMath.floord(entity.posZ))); - if(biome.cloudColor != 0xffffffff) - color = new Vec3(biome.cloudColor); + if(this.dimension.isExterminated()) + color = new Vec3(0x000000); float r = (float)color.xCoord; float g = (float)color.yCoord; float b = (float)color.zCoord; @@ -813,7 +825,7 @@ public class WorldClient extends AWorldClient } if(this.dimension.getType().days) { - float sun = ExtMath.clampf(ExtMath.cos(this.getCelestialAngle(partialTicks) * (float)Math.PI * 2.0F) * 2.0F + 0.5F, + float sun = ExtMath.clampf(ExtMath.cos(this.getCelestialAngleRadians(partialTicks)) * 2.0F + 0.5F, 0.0F, 1.0F); r = r * (sun * 0.9F + 0.1F); g = g * (sun * 0.9F + 0.1F); @@ -836,11 +848,11 @@ public class WorldClient extends AWorldClient Vec3 color = new Vec3(this.dimension.getFogColor()); Biome biome = this.getBiomeGenForCoords(new BlockPos(ExtMath.floord(entity.posX), ExtMath.floord(entity.posY), ExtMath.floord(entity.posZ))); - if(biome.fogColor != 0xffffffff) - color = new Vec3(biome.fogColor); + if(this.dimension.isExterminated()) + color = new Vec3(0x303030); if(!this.dimension.getType().days) return color; - float sun = ExtMath.clampf(ExtMath.cos(this.getCelestialAngle(partialTicks) * (float)Math.PI * 2.0F) * 2.0F + 0.5F, + float sun = ExtMath.clampf(ExtMath.cos(this.getCelestialAngleRadians(partialTicks)) * 2.0F + 0.5F, 0.0F, 1.0F); float r = (float)color.xCoord; float g = (float)color.yCoord; @@ -852,15 +864,15 @@ public class WorldClient extends AWorldClient } public float getStarBrightness(float partialTicks) { - float f = this.getCelestialAngle(partialTicks); - float f1 = 1.0F - (ExtMath.cos(f * (float)Math.PI * 2.0F) * 2.0F + 0.25F); + float f = this.getCelestialAngleRadians(partialTicks); + float f1 = 1.0F - (ExtMath.cos(f) * 2.0F + 0.25F); f1 = ExtMath.clampf(f1, 0.0F, 1.0F); return f1 * f1 * this.dimension.getStarBrightness(); } public float getDeepStarBrightness(float partialTicks) { - float f = this.getCelestialAngle(partialTicks); - float f1 = 1.0F - (ExtMath.cos(f * (float)Math.PI * 2.0F) * 2.0F + 0.25F); + float f = this.getCelestialAngleRadians(partialTicks); + float f1 = 1.0F - (ExtMath.cos(f) * 2.0F + 0.25F); f1 = ExtMath.clampf(f1, 0.0F, 1.0F); return f1 * f1 * this.dimension.getDeepStarBrightness(); } diff --git a/common/src/main/java/common/biome/Biome.java b/common/src/main/java/common/biome/Biome.java index 9ef237c9..b692d29a 100644 --- a/common/src/main/java/common/biome/Biome.java +++ b/common/src/main/java/common/biome/Biome.java @@ -23,7 +23,7 @@ public enum Biome implements Identifyable, Displayable { TAIGA(5, "taiga", "Taiga", 0x0b6659, -10.0f, 80.0f), SWAMPLAND(6, "swampland", "Sumpf", 0x07f9b2, 12.0f, 90.0f, 0xe0ffae, 0xffffffff, 6975545), RIVER(7, "river", "Fluss", 0x0000ff), - EXTERMINATED(8, "exterminated", "Ausgelöscht", 0x000000, 150.0f, 0.0f, 0x202020, 0x303030, 0x303030, 0x101010, 0x303030, 0x000000), + EXTERMINATED(8, "exterminated", "Ausgelöscht", 0x000000, 150.0f, 0.0f, 0x202020, 0x303030, 0x303030), SPACE(9, "space", "Leere des Weltraums", 0x000000, 0.0f, 0.0f), FROZENSEA(10, "frozenSea", "Vereister See", 0x9090a0, -20.0f), FROZENRIVER(11, "frozenRiver", "Vereister Fluss", 0xa0a0ff, -20.0f), @@ -102,9 +102,6 @@ public enum Biome implements Identifyable, Displayable { public final int waterColor; public final int grassColor; public final int foliageColor; - public final int skyColor; - public final int fogColor; - public final int cloudColor; static { for(Biome biome : values()) { @@ -161,7 +158,7 @@ public enum Biome implements Identifyable, Displayable { return biome; } - private Biome(int id, String name, String display, int color, float temperature, float humidity, int waterColor, int grassColor, int foliageColor, int skyColor, int fogColor, int cloudColor) { + private Biome(int id, String name, String display, int color, float temperature, float humidity, int waterColor, int grassColor, int foliageColor) { this.id = id; this.name = name; this.display = display; @@ -171,25 +168,18 @@ public enum Biome implements Identifyable, Displayable { this.waterColor = waterColor; this.grassColor = grassColor; this.foliageColor = foliageColor; - this.skyColor = skyColor; - this.fogColor = fogColor; - this.cloudColor = cloudColor; - } - - private Biome(int id, String name, String display, int color, float temperature, float humidity, int waterColor, int grassColor, int foliageColor) { - this(id, name, display, color, temperature, humidity, waterColor, grassColor, foliageColor, 0xffffffff, 0xffffffff, 0xffffffff); } private Biome(int id, String name, String display, int color, float temperature, float humidity) { - this(id, name, display, color, temperature, humidity, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff); + this(id, name, display, color, temperature, humidity, 0xffffff, 0xffffffff, 0xffffffff); } private Biome(int id, String name, String display, int color, float temperature) { - this(id, name, display, color, temperature, 50.0f, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff); + this(id, name, display, color, temperature, 50.0f, 0xffffff, 0xffffffff, 0xffffffff); } private Biome(int id, String name, String display, int color) { - this(id, name, display, color, 0.0f, 50.0f, 0xffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff); + this(id, name, display, color, 0.0f, 50.0f, 0xffffff, 0xffffffff, 0xffffffff); } public final float getTemperature(BlockPos pos) { diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index 121c6979..47498f3f 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -779,6 +779,10 @@ public abstract class Dimension extends Nameable { protected int[] calcMoonColors() { return new int[0]; } + + public boolean isBaseDestroyed() { + return false; + } public final int getSunColor() { return this.sunColor != 0xffffffff ? this.sunColor : this.calcSunColor(); diff --git a/common/src/main/java/common/dimension/Moon.java b/common/src/main/java/common/dimension/Moon.java index 7ba830cb..0e91dac5 100755 --- a/common/src/main/java/common/dimension/Moon.java +++ b/common/src/main/java/common/dimension/Moon.java @@ -31,4 +31,8 @@ public final class Moon extends Dimension { Planet planet = UniverseRegistry.getPlanet(this); return planet == null ? super.calcMoonColors() : new int[] {planet.getSkyColor() | (planet.isExterminated() ? 0x80000000 : 0)}; } + + public boolean isBaseDestroyed() { + return (this.getSunColor() & 0xff000000) != 0; + } } diff --git a/common/src/main/java/common/dimension/Planet.java b/common/src/main/java/common/dimension/Planet.java index caa4ee8f..aeb9b305 100755 --- a/common/src/main/java/common/dimension/Planet.java +++ b/common/src/main/java/common/dimension/Planet.java @@ -54,4 +54,8 @@ public final class Planet extends Dimension { } return colors; } + + public boolean isBaseDestroyed() { + return (this.getSunColor() & 0xff000000) != 0; + } } diff --git a/common/src/main/java/common/packet/SPacketCelestials.java b/common/src/main/java/common/packet/SPacketCelestials.java index 7f706bed..59dcd390 100644 --- a/common/src/main/java/common/packet/SPacketCelestials.java +++ b/common/src/main/java/common/packet/SPacketCelestials.java @@ -8,6 +8,7 @@ import common.network.Packet; import common.network.PacketBuffer; public class SPacketCelestials implements Packet { + private boolean exterminated; private int sunColor; private int[] moonColors; @@ -15,6 +16,7 @@ public class SPacketCelestials implements Packet { } public SPacketCelestials(Dimension dim) { + this.exterminated = dim.isExterminated(); this.sunColor = dim.getSunColor(); this.moonColors = dim.getMoonColors(); } @@ -24,6 +26,7 @@ public class SPacketCelestials implements Packet { } public void readPacketData(PacketBuffer buf) throws IOException { + this.exterminated = buf.readBoolean(); this.sunColor = buf.readInt(); this.moonColors = new int[buf.readVarInt()]; for(int z = 0; z < this.moonColors.length; z++) { @@ -32,12 +35,17 @@ public class SPacketCelestials implements Packet { } public void writePacketData(PacketBuffer buf) throws IOException { + buf.writeBoolean(this.exterminated); buf.writeInt(this.sunColor); buf.writeVarInt(this.moonColors.length); for(int z = 0; z < this.moonColors.length; z++) { buf.writeInt(this.moonColors[z]); } } + + public boolean getExterminated() { + return this.exterminated; + } public int getSunColor() { return this.sunColor; diff --git a/common/src/main/java/common/packet/SPacketRespawn.java b/common/src/main/java/common/packet/SPacketRespawn.java index f75cbbc5..5c1317ff 100755 --- a/common/src/main/java/common/packet/SPacketRespawn.java +++ b/common/src/main/java/common/packet/SPacketRespawn.java @@ -30,16 +30,16 @@ public class SPacketRespawn implements Packet { this.dimId = -2; } else { + this.dimType = dim.getType(); this.dimData = dim.writeData(); + if(this.dimType.celestials) { + this.sunColor = dim.getSunColor(); + this.moonColors = dim.getMoonColors(); + } if(dim.isCustom()) { - this.dimType = dim.getType(); this.dimName = UniverseRegistry.getName(dim); this.dimDisplay = dim.getCustomName(); this.dimFull = dim.getFormattedName(true); - if(this.dimType.celestials) { - this.sunColor = dim.getSunColor(); - this.moonColors = dim.getMoonColors(); - } this.dimId = -1; } else { @@ -56,13 +56,9 @@ public class SPacketRespawn implements Packet { public void readPacketData(PacketBuffer buf) throws IOException { this.dimId = buf.readVarInt(); - if(this.dimId >= -1) - this.dimData = buf.readTag(); - if(this.dimId == -1) { + if(this.dimId >= -1) { this.dimType = buf.readEnumValue(DimType.class); - this.dimName = buf.readString(1024); - this.dimDisplay = buf.readString(1024); - this.dimFull = buf.readString(4096); + this.dimData = buf.readTag(); if(this.dimType.celestials) { this.sunColor = buf.readInt(); this.moonColors = new int[buf.readVarInt()]; @@ -71,19 +67,20 @@ public class SPacketRespawn implements Packet { } } } + if(this.dimId == -1) { + this.dimName = buf.readString(1024); + this.dimDisplay = buf.readString(1024); + this.dimFull = buf.readString(4096); + } this.type = buf.readUnsignedShort(); this.editor = buf.readBoolean(); } public void writePacketData(PacketBuffer buf) throws IOException { buf.writeVarInt(this.dimId); - if(this.dimId >= -1) - buf.writeTag(this.dimData); - if(this.dimId == -1) { + if(this.dimId >= -1) { buf.writeEnumValue(this.dimType); - buf.writeString(this.dimName); - buf.writeString(this.dimDisplay); - buf.writeString(this.dimFull); + buf.writeTag(this.dimData); if(this.dimType.celestials) { buf.writeInt(this.sunColor); buf.writeVarInt(this.moonColors.length); @@ -92,6 +89,11 @@ public class SPacketRespawn implements Packet { } } } + if(this.dimId == -1) { + buf.writeString(this.dimName); + buf.writeString(this.dimDisplay); + buf.writeString(this.dimFull); + } buf.writeShort(this.type & 65535); buf.writeBoolean(this.editor); } @@ -101,14 +103,14 @@ public class SPacketRespawn implements Packet { return null; Dimension dim = this.dimId >= 0 ? UniverseRegistry.getDimension(this.dimId) : Dimension.create(this.dimType); dim.readData(this.dimData); - if(!dim.isCustom()) - return dim; - dim.setCustomName(this.dimDisplay); - dim.setDisplayName(this.dimFull); if(this.dimType.celestials) { dim.setSunColor(this.sunColor); dim.setMoonColors(this.moonColors); } + if(!dim.isCustom()) + return dim; + dim.setCustomName(this.dimDisplay); + dim.setDisplayName(this.dimFull); return dim; } diff --git a/common/src/main/java/common/world/Chunk.java b/common/src/main/java/common/world/Chunk.java index 67339045..94cb9432 100755 --- a/common/src/main/java/common/world/Chunk.java +++ b/common/src/main/java/common/world/Chunk.java @@ -56,7 +56,7 @@ public abstract class Chunk { this.world = world; this.xPos = x; this.zPos = z; - this.filler = world.dimension.getFiller(); + this.filler = world.dimension.isExterminated() ? Blocks.coal_block.getState() : world.dimension.getFiller(); this.fillerBlock = this.filler.getBlock(); for(int y = 0; y < this.entities.length; ++y) { this.entities[y] = new InheritanceMultiMap(Entity.class); diff --git a/common/src/main/java/common/world/World.java b/common/src/main/java/common/world/World.java index 7a7782ce..7b1295c8 100755 --- a/common/src/main/java/common/world/World.java +++ b/common/src/main/java/common/world/World.java @@ -890,7 +890,7 @@ public abstract class World implements IWorldAccess { } public int calculateSkylightSubtracted(boolean current) { - float f = !this.dimension.getType().days ? 0.5f : this.calculateCelestialAngle(current ? this.daytime : + float f = !this.dimension.getType().days || (current && this.dimension.isBaseDestroyed()) ? 0.5f : this.calculateCelestialAngle(current ? this.daytime : (this.dimension.getRotationalPeriod() / 4L), 1.0f); float f1 = 1.0F - (ExtMath.cos(f * (float)Math.PI * 2.0F) * 2.0F + 0.5F); f1 = ExtMath.clampf(f1, 0.0F, 1.0F); @@ -915,8 +915,7 @@ public abstract class World implements IWorldAccess { } public float getCelestialAngleRadians(float partialTicks) { - float f = this.getCelestialAngle(partialTicks); - return f * (float)Math.PI * 2.0F; + return (this.dimension.isBaseDestroyed() ? 0.5f : this.getCelestialAngle(partialTicks)) * (float)Math.PI * 2.0F; } public BlockPos getPrecipitationHeight(BlockPos pos) {