diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 63f9c815..079cbdb2 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -174,7 +174,9 @@ import common.util.Facing; import common.util.HitPosition; import common.util.LazyLoader; import common.util.Util; +import common.util.Var; import common.util.HitPosition.ObjectType; +import common.vars.Vars; import common.world.LightType; import common.world.State; import common.world.World; @@ -301,6 +303,7 @@ public class Client implements IThreadListener { private final Map bars = Maps.newTreeMap(); private final Thread clThread = Thread.currentThread(); private final Map cvars = Maps.newTreeMap(); + private final Map synced = Maps.newTreeMap(); private final Map debug = Maps.newTreeMap(); private final List console = Lists.newArrayList(); private final List chat = Lists.newArrayList(); @@ -327,7 +330,6 @@ public class Client implements IThreadListener { public boolean xrayActive; public boolean tileOverlay; public boolean itemCheat; - public boolean dayCycle = true; public boolean debugPlayer; public boolean cameraUsed; public boolean charEditor; @@ -337,7 +339,6 @@ public class Client implements IThreadListener { private int chunkLoadTimer; public int thirdPersonView; - public int timeFactor = 1; public int chunksUpdated; public int selectedCharacter = -1; @@ -350,7 +351,6 @@ public class Client implements IThreadListener { public float moveStrafe; public float moveForward; public float zoomLevel; - public float gravity = 1.0f; private long tmr_timer; private long tmr_start; @@ -625,9 +625,6 @@ public class Client implements IThreadListener { this.player.noclip = true; this.player.addEffect(new StatusEffect(Effect.FLYING, Integer.MAX_VALUE, 1)); this.player.setHeight(2.0f); - world.setGravity(this.gravity = 1.0f); - world.setTimeFactor(this.timeFactor = 1); - this.dayCycle = true; } public void unloadWorld() { @@ -700,6 +697,19 @@ public class Client implements IThreadListener { this.renderGlobal.onReload(); EntityTexManager.loadNpcTextures(); this.effectRenderer = new EffectRenderer(this.textureManager); + + for(Field field : Vars.class.getDeclaredFields()) { + if(field.isAnnotationPresent(Var.class)) { + if(!Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers())) + throw new IllegalArgumentException("Feld für Variable " + field + " muss statisch und änderbar sein!"); + Var value = field.getAnnotation(Var.class); + if(value.name().isEmpty()) + throw new IllegalArgumentException("Variablenname von " + field + " kann nicht leer sein!"); + if(this.synced.containsKey(value.name())) + throw new IllegalArgumentException("Variable " + value.name() + " existiert bereits!"); + this.synced.put(value.name(), field); + } + } } public void start() @@ -1115,6 +1125,21 @@ public class Client implements IThreadListener { // this.renderItem.renderItemOverlayIntoGUI(itemstack, xPos, 0, null); } } + + if(this.pointed != null && this.pointed.block != null) { + State state = this.world.getState(this.pointed.block); + if(state.getBlock() != Blocks.air) { + Item item = state.getBlock().getItem(this.world, this.pointed.block); + if(item != null) { + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(this.fb_x / 2 - 180 + 4 + 1), (float)(40 + 1), 0.0f); + GL11.glScalef(2.0f, 2.0f, 2.0f); + GlState.enableDepth(); + this.renderItem.renderItemAndEffectIntoGUI(new ItemStack(item), 0, 0); + } + } + } GL11.glPopMatrix(); ItemRenderer.disableStandardItemLighting(); @@ -1948,7 +1973,7 @@ public class Client implements IThreadListener { this.world.getDarkness() ) + "\n" + String.format("Zeitfaktor: %dx, Schwerkraft: %.2f m/s²", - this.timeFactor, this.world.gravity * 10.0 + Vars.timeFlow, this.world.gravity * 10.0 ) + "\n" + String.format("Letzte Zeitsynch.: + %d.%d s", ticked / 1000L, (ticked / 100L) % 10L @@ -3508,4 +3533,29 @@ public class Client implements IThreadListener { } }, "File Browser listener").start(); } + + public Object getSyncedVar(String name) { + Field field = this.synced.get(name); + if(field != null) { + try { + return field.get(null); + } + catch(IllegalArgumentException | IllegalAccessException e) { + } + } + return null; + } + + public void setSyncedVar(String name, Object value) { + Field field = this.synced.get(name); + if(field != null) { + try { + field.set(null, value); + } + catch(Throwable e) { + return; + } + Log.NETWORK.debug("Variable %s = %s", name, value); + } + } } diff --git a/client/src/main/java/client/network/ClientPlayer.java b/client/src/main/java/client/network/ClientPlayer.java index 6157c835..5136298c 100755 --- a/client/src/main/java/client/network/ClientPlayer.java +++ b/client/src/main/java/client/network/ClientPlayer.java @@ -76,7 +76,7 @@ import common.packet.SPacketWindowItems; import common.packet.SPacketWindowProperty; import common.packet.SPacketConfirmTransaction; import common.packet.SPacketUpdateSign; -import common.packet.SPacketUpdateTileEntity; +import common.packet.SPacketUpdateDevice; import common.packet.SPacketSignEditorOpen; import common.packet.SPacketPlayerListItem; import common.packet.SPacketPlayerAbilities; @@ -106,6 +106,7 @@ import common.packet.SPacketMessage; import common.packet.SPacketMultiBlockChange; import common.packet.SPacketPlayerPosLook; import common.packet.SPacketRespawn; +import common.packet.SPacketServerConfig; import common.packet.SPacketServerTick; import common.packet.SPacketSetExperience; import common.packet.SPacketSkin; @@ -116,13 +117,13 @@ import common.packet.SPacketTimeUpdate; import common.packet.SPacketTrades; import common.packet.SPacketUpdateDisplay; import common.packet.SPacketUpdateHealth; -import common.packet.SPacketWorld; import common.rng.Random; import common.sound.Sound; import common.tileentity.TileEntity; import common.tileentity.TileEntityDevice; import common.tileentity.TileEntityDisplay; import common.tileentity.TileEntitySign; +import common.util.Pair; import common.village.MerchantRecipeList; import common.world.Explosion; import common.world.Weather; @@ -215,6 +216,13 @@ public class ClientPlayer implements IClientPlayer // this.gameController.confirmSkin(false); } + public void handleServerConfig(SPacketServerConfig packet) { + NetHandler.checkThread(packet, this, this.gm); + for(Pair var : packet.getValues()) { + this.gm.setSyncedVar(var.first(), var.second()); + } + } + public void handleJoinGame(SPacketJoinGame packetIn) { NetHandler.checkThread(packetIn, this, this.gm); @@ -1334,7 +1342,7 @@ public class ClientPlayer implements IClientPlayer * Updates the metadata of instances of the following entitytypes: Mob spawners, command blocks, * beacons, skulls, flowerpot */ - public void handleUpdateTileEntity(SPacketUpdateTileEntity packetIn) + public void handleUpdateTileEntity(SPacketUpdateDevice packetIn) { NetHandler.checkThread(packetIn, this, this.gm, this.world); @@ -1904,14 +1912,6 @@ public class ClientPlayer implements IClientPlayer } } - public void handleWorld(SPacketWorld packetIn) { - NetHandler.checkThread(packetIn, this, this.gm, this.world); - this.world.setGravity(this.gm.gravity = packetIn.getGravity()); - this.world.setTimeFactor(this.gm.timeFactor = packetIn.getTimeFactor()); -// this.clientWorldController.setDifficulty(this.gameController.difficulty = packetIn.getDifficulty()); - this.gm.dayCycle = packetIn.hasDayCycle(); - } - public void handleDimName(SPacketDimensionName packetIn) { NetHandler.checkThread(packetIn, this, this.gm, this.world); if(this.world.dimension.isCustom()) { diff --git a/client/src/main/java/client/renderer/RenderGlobal.java b/client/src/main/java/client/renderer/RenderGlobal.java index 112a56f7..debc3a3a 100755 --- a/client/src/main/java/client/renderer/RenderGlobal.java +++ b/client/src/main/java/client/renderer/RenderGlobal.java @@ -33,6 +33,7 @@ import common.block.tile.BlockSign; import common.collect.Lists; import common.collect.Maps; import common.collect.Sets; +import common.dimension.DimType; import common.entity.Entity; import common.entity.npc.EntityNPC; import common.entity.projectile.EntityBox; @@ -108,14 +109,16 @@ public class RenderGlobal return this.time; } } - + private static final String MOON_TEX = "textures/world/moon_phases.png"; + private static final String PLANET_TEX = "textures/world/planet_phases.png"; private static final String SUN_TEX = "textures/world/sun.png"; private static final float[] SUN_COLOR = new float[4]; private final Client gm; private final TextureManager renderEngine; private final RenderManager renderManager; + private final Random rand = new Random(); private WorldClient theWorld; private Set chunksToUpdate = new LinkedHashSet(); private List renderInfos = new ArrayList(69696); @@ -1242,35 +1245,47 @@ public class RenderGlobal GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE, GL11.GL_ZERO); GL11.glPushMatrix(); float f16 = 1.0F - Math.max(this.theWorld.getRainStrength(), this.theWorld.getFogStrength()); - GlState.color(1.0F, 1.0F, 1.0F, f16); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(this.theWorld.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); - if(this.gm.world.dimension.getType().sun) { + if(this.gm.world.dimension.getType().celestials) { float size = 30.0F; this.renderEngine.bindTexture(SUN_TEX); - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos((double)(-size), 100.0D, (double)(-size)).tex(0.0D, 0.0D).endVertex(); - worldrenderer.pos((double)size, 100.0D, (double)(-size)).tex(1.0D, 0.0D).endVertex(); - worldrenderer.pos((double)size, 100.0D, (double)size).tex(1.0D, 1.0D).endVertex(); - worldrenderer.pos((double)(-size), 100.0D, (double)size).tex(0.0D, 1.0D).endVertex(); - Tessellator.draw(); - } - if(this.gm.world.dimension.getType().moon) { - float size = 20.0F; - this.renderEngine.bindTexture(MOON_TEX); - int i = this.theWorld.getMoonPhase(); - int k = i % 4; - int i1 = i / 4 % 2; - float f22 = (float)(k + 0) / 4.0F; - float f23 = (float)(i1 + 0) / 2.0F; - float f24 = (float)(k + 1) / 4.0F; - float f14 = (float)(i1 + 1) / 2.0F; - worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos((double)(-size), -100.0D, (double)size).tex((double)f24, (double)f14).endVertex(); - worldrenderer.pos((double)size, -100.0D, (double)size).tex((double)f22, (double)f14).endVertex(); - worldrenderer.pos((double)size, -100.0D, (double)(-size)).tex((double)f22, (double)f23).endVertex(); - worldrenderer.pos((double)(-size), -100.0D, (double)(-size)).tex((double)f24, (double)f23).endVertex(); - Tessellator.draw(); + int color = this.gm.world.dimension.getSunColor(); + if(color != 0xffffffff) { + Vec3 ncolor = new Vec3(color).normalize(); + GlState.color((float)ncolor.xCoord, (float)ncolor.yCoord, (float)ncolor.zCoord, f16); + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos((double)(-size), 100.0D, (double)(-size)).tex(0.0D, 0.0D).endVertex(); + worldrenderer.pos((double)size, 100.0D, (double)(-size)).tex(1.0D, 0.0D).endVertex(); + worldrenderer.pos((double)size, 100.0D, (double)size).tex(1.0D, 1.0D).endVertex(); + worldrenderer.pos((double)(-size), 100.0D, (double)size).tex(0.0D, 1.0D).endVertex(); + Tessellator.draw(); + } + size = 20.0F; + this.renderEngine.bindTexture(this.gm.world.dimension.getType() == DimType.MOON ? PLANET_TEX : MOON_TEX); + int[] colors = this.gm.world.dimension.getMoonColors(); + this.rand.setSeed(this.gm.world.dimension.getSeed()); + int mx = 0; + int mz = 0; + for(int z = 0; z < colors.length; z++) { + Vec3 ncolor = new Vec3(colors[z]).normalize(); + GlState.color((float)ncolor.xCoord, (float)ncolor.yCoord, (float)ncolor.zCoord, f16); + int i = this.theWorld.getMoonPhase(z); + int k = i % 4; + int i1 = i / 4 % 2; + float f22 = (float)(k + 0) / 4.0F; + float f23 = (float)(i1 + 0) / 2.0F; + float f24 = (float)(k + 1) / 4.0F; + float f14 = (float)(i1 + 1) / 2.0F; + worldrenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos((double)(-size + mx), -100.0D, (double)(size + mz)).tex((double)f24, (double)f14).endVertex(); + worldrenderer.pos((double)(size + mx), -100.0D, (double)(size + mz)).tex((double)f22, (double)f14).endVertex(); + worldrenderer.pos((double)(size + mx), -100.0D, (double)(-size + mz)).tex((double)f22, (double)f23).endVertex(); + worldrenderer.pos((double)(-size + mx), -100.0D, (double)(-size + mz)).tex((double)f24, (double)f23).endVertex(); + Tessellator.draw(); + mx = this.rand.range(-100, 100); + mz = this.rand.range(-100, 100); + } } GlState.disableTexture2D(); diff --git a/client/src/main/java/client/world/WorldClient.java b/client/src/main/java/client/world/WorldClient.java index 5ed45e98..ee6adab0 100755 --- a/client/src/main/java/client/world/WorldClient.java +++ b/client/src/main/java/client/world/WorldClient.java @@ -28,6 +28,7 @@ import common.util.ExtMath; import common.util.LongHashMap; import common.util.ParticleType; import common.util.Vec3; +import common.vars.Vars; import common.util.BlockPos.MutableBlockPos; import common.world.AWorldClient; import common.world.State; @@ -57,8 +58,7 @@ public class WorldClient extends AWorldClient this.emptyChunk = new ChunkEmpty(this, this.gm.debugWorld); this.calculateInitialSkylight(); this.calculateInitialWeather(); - this.setGravity(this.gm.gravity); - this.setTimeFactor(this.gm.timeFactor); + this.updatePhysics(); // this.setDifficulty(this.gm.difficulty); } @@ -97,12 +97,13 @@ public class WorldClient extends AWorldClient public void tick() { + this.updatePhysics(); this.markReload(); // this.info.tick(); - if (this.gm.dayCycle) + if (Vars.dayCycle) { - this.daytime += this.timeFactor; + this.daytime += Vars.timeFlow; } for (int i = 0; i < 10 && !this.spawnQueue.isEmpty(); ++i) diff --git a/client/src/main/resources/textures/world/moon_phases.png b/client/src/main/resources/textures/world/moon_phases.png index cdba8d15..d8786318 100755 Binary files a/client/src/main/resources/textures/world/moon_phases.png and b/client/src/main/resources/textures/world/moon_phases.png differ diff --git a/client/src/main/resources/textures/world/planet_phases.png b/client/src/main/resources/textures/world/planet_phases.png new file mode 100755 index 00000000..d8f0f7de Binary files /dev/null and b/client/src/main/resources/textures/world/planet_phases.png differ diff --git a/client/src/main/resources/textures/world/sun.png b/client/src/main/resources/textures/world/sun.png index 08de644b..25784d11 100755 Binary files a/client/src/main/resources/textures/world/sun.png and b/client/src/main/resources/textures/world/sun.png differ diff --git a/common/src/main/java/common/dimension/DimType.java b/common/src/main/java/common/dimension/DimType.java index 48d4086a..82c3e3e8 100755 --- a/common/src/main/java/common/dimension/DimType.java +++ b/common/src/main/java/common/dimension/DimType.java @@ -5,12 +5,12 @@ import java.util.Map; import common.collect.Maps; public enum DimType { - STAR("star", "Stern %s", true, false, false, false, false, false, true), - PLANET("planet", "Planet %s", true, true, true, true, true, true, true), - MOON("moon", "Mond %s", true, false, false, true, false, false, true), - SPACE("space", "%s", false, false, false, false, false, false, true), - SEMI("semi", "%s", false, false, true, false, false, true, true), - AREA("area", "%s", false, false, false, false, false, false, false); + STAR("star", "Stern %s", true, false, false, false, false, true), + PLANET("planet", "Planet %s", true, true, true, true, true, true), + MOON("moon", "Mond %s", true, false, false, true, false, true), + SPACE("space", "%s", false, false, false, false, false, true), + SEMI("semi", "%s", false, false, true, false, true, true), + AREA("area", "%s", false, false, false, false, false, false); private static final Map LOOKUP = Maps.newHashMap(); @@ -19,20 +19,17 @@ public enum DimType { public final boolean time; public final boolean days; public final boolean weather; - public final boolean sun; - public final boolean moon; + public final boolean celestials; public final boolean clouds; public final boolean sky; - private DimType(String name, String format, - boolean time, boolean days, boolean weather, boolean sun, boolean moon, boolean clouds, boolean sky) { + private DimType(String name, String format, boolean time, boolean days, boolean weather, boolean celestials, boolean clouds, boolean sky) { this.name = name; this.format = format; this.time = time; this.days = days; this.weather = weather; - this.sun = sun; - this.moon = moon; + this.celestials = celestials; this.clouds = clouds; this.sky = sky; } diff --git a/common/src/main/java/common/dimension/Dimension.java b/common/src/main/java/common/dimension/Dimension.java index bfbd0bdf..19362097 100755 --- a/common/src/main/java/common/dimension/Dimension.java +++ b/common/src/main/java/common/dimension/Dimension.java @@ -159,6 +159,8 @@ public abstract class Dimension extends Nameable { private ColorGenerator starColorFunc = null; private ColorGenerator deepstarColorFunc = null; private String display; // synced only + private int sunColor = 0xffffffff; + private int[] moonColors = null; // common private float gravity = 1.0f; @@ -739,6 +741,31 @@ public abstract class Dimension extends Nameable { public final boolean hasDenseFog() { return this.denseFog; } + + + protected int calcSunColor() { + return 0xffffffff; + } + + protected int[] calcMoonColors() { + return new int[0]; + } + + public final int getSunColor() { + return this.sunColor != 0xffffffff ? this.sunColor : this.calcSunColor(); + } + + public final int[] getMoonColors() { + return this.moonColors != null ? this.moonColors : this.calcMoonColors(); + } + + public final void setSunColor(int color) { + this.sunColor = color; + } + + public final void setMoonColors(int[] colors) { + this.moonColors = colors; + } public final State getFiller() { diff --git a/common/src/main/java/common/dimension/Moon.java b/common/src/main/java/common/dimension/Moon.java index 0998bb45..e77214c6 100755 --- a/common/src/main/java/common/dimension/Moon.java +++ b/common/src/main/java/common/dimension/Moon.java @@ -1,5 +1,7 @@ package common.dimension; +import common.init.UniverseRegistry; + public final class Moon extends Dimension { Moon() { super(true); @@ -16,4 +18,17 @@ public final class Moon extends Dimension { public final DimType getType() { return DimType.MOON; } + + protected int calcSunColor() { + Planet planet = UniverseRegistry.getPlanet(this); + if(planet == null) + return super.calcSunColor(); + Star star = UniverseRegistry.getStar(planet); + return star == null ? super.calcSunColor() : star.getSkyColor(); + } + + protected int[] calcMoonColors() { + Planet planet = UniverseRegistry.getPlanet(this); + return planet == null ? super.calcMoonColors() : new int[] {planet.getSkyColor()}; + } } diff --git a/common/src/main/java/common/dimension/Planet.java b/common/src/main/java/common/dimension/Planet.java index 7ad95f03..d2447aa0 100755 --- a/common/src/main/java/common/dimension/Planet.java +++ b/common/src/main/java/common/dimension/Planet.java @@ -1,11 +1,11 @@ package common.dimension; -import java.util.Set; - -import common.collect.Sets; +import java.util.List; +import common.collect.Lists; +import common.init.UniverseRegistry; public final class Planet extends Dimension { - private final Set moons = Sets.newHashSet(); + private final List moons = Lists.newArrayList(); Planet() { super(true); @@ -41,4 +41,17 @@ public final class Planet extends Dimension { public final DimType getType() { return DimType.PLANET; } + + protected int calcSunColor() { + Star star = UniverseRegistry.getStar(this); + return star == null ? super.calcSunColor() : star.getSkyColor(); + } + + protected int[] calcMoonColors() { + int[] colors = new int[this.moons.size()]; + for(int z = 0; z < colors.length; z++) { + colors[z] = this.moons.get(z).getSkyColor(); + } + return colors; + } } diff --git a/common/src/main/java/common/init/UniverseRegistry.java b/common/src/main/java/common/init/UniverseRegistry.java index 200c7907..feec3db9 100755 --- a/common/src/main/java/common/init/UniverseRegistry.java +++ b/common/src/main/java/common/init/UniverseRegistry.java @@ -302,6 +302,14 @@ public abstract class UniverseRegistry { return dim == null ? null : NAMES.get(dim); } + public static Star getStar(Planet planet) { + return PLANET_MAP.get(planet); + } + + public static Planet getPlanet(Moon moon) { + return MOON_MAP.get(moon); + } + public static Dimension getDimension(String name) { return NAME_MAP.get(name); } diff --git a/common/src/main/java/common/network/IClientPlayer.java b/common/src/main/java/common/network/IClientPlayer.java index 13728306..45db1c07 100644 --- a/common/src/main/java/common/network/IClientPlayer.java +++ b/common/src/main/java/common/network/IClientPlayer.java @@ -22,7 +22,7 @@ import common.packet.SPacketWindowItems; import common.packet.SPacketWindowProperty; import common.packet.SPacketConfirmTransaction; import common.packet.SPacketUpdateSign; -import common.packet.SPacketUpdateTileEntity; +import common.packet.SPacketUpdateDevice; import common.packet.SPacketSignEditorOpen; import common.packet.SPacketPlayerListItem; import common.packet.SPacketPlayerAbilities; @@ -52,6 +52,7 @@ import common.packet.SPacketMessage; import common.packet.SPacketMultiBlockChange; import common.packet.SPacketPlayerPosLook; import common.packet.SPacketRespawn; +import common.packet.SPacketServerConfig; import common.packet.SPacketServerTick; import common.packet.SPacketSetExperience; import common.packet.SPacketSkin; @@ -62,7 +63,6 @@ import common.packet.SPacketTimeUpdate; import common.packet.SPacketTrades; import common.packet.SPacketUpdateDisplay; import common.packet.SPacketUpdateHealth; -import common.packet.SPacketWorld; import common.sound.Sound; public interface IClientPlayer extends NetHandler { @@ -116,7 +116,7 @@ public interface IClientPlayer extends NetHandler { void handleSignEditorOpen(SPacketSignEditorOpen packet); void handleUpdateSign(SPacketUpdateSign packet); void handleUpdateDisplay(SPacketUpdateDisplay packet); - void handleUpdateTileEntity(SPacketUpdateTileEntity packet); + void handleUpdateTileEntity(SPacketUpdateDevice packet); void handleWindowProperty(SPacketWindowProperty packet); void handleEntityEquipment(SPacketEntityEquipment packet); void handleCloseWindow(SPacketCloseWindow packet); @@ -138,7 +138,7 @@ public interface IClientPlayer extends NetHandler { void handleParticles(SPacketParticles packet); void handleSkin(SPacketSkin packet); void handleTrades(SPacketTrades packet); - void handleWorld(SPacketWorld packet); void handleDimName(SPacketDimensionName packet); void handleForm(SPacketDisplayForm packet); + void handleServerConfig(SPacketServerConfig packet); } \ No newline at end of file diff --git a/common/src/main/java/common/network/PacketRegistry.java b/common/src/main/java/common/network/PacketRegistry.java index 42d524fb..b4b68bfd 100755 --- a/common/src/main/java/common/network/PacketRegistry.java +++ b/common/src/main/java/common/network/PacketRegistry.java @@ -59,7 +59,7 @@ import common.packet.SPacketWindowItems; import common.packet.SPacketWindowProperty; import common.packet.SPacketConfirmTransaction; import common.packet.SPacketUpdateSign; -import common.packet.SPacketUpdateTileEntity; +import common.packet.SPacketUpdateDevice; import common.packet.SPacketSignEditorOpen; import common.packet.SPacketPlayerListItem; import common.packet.SPacketPlayerAbilities; @@ -89,6 +89,7 @@ import common.packet.SPacketMessage; import common.packet.SPacketMultiBlockChange; import common.packet.SPacketPlayerPosLook; import common.packet.SPacketRespawn; +import common.packet.SPacketServerConfig; import common.packet.SPacketServerTick; import common.packet.SPacketSetExperience; import common.packet.SPacketSkin; @@ -99,7 +100,6 @@ import common.packet.SPacketTimeUpdate; import common.packet.SPacketTrades; import common.packet.SPacketUpdateDisplay; import common.packet.SPacketUpdateHealth; -import common.packet.SPacketWorld; public enum PacketRegistry { HANDSHAKE {{ @@ -169,14 +169,13 @@ public enum PacketRegistry { this.server(SPacketConfirmTransaction.class); this.server(SPacketUpdateSign.class); this.server(SPacketUpdateDisplay.class); - this.server(SPacketUpdateTileEntity.class); + this.server(SPacketUpdateDevice.class); this.server(SPacketSignEditorOpen.class); this.server(SPacketPlayerListItem.class); this.server(SPacketPlayerAbilities.class); this.server(SPacketTabComplete.class); this.server(SPacketSkin.class); this.server(SPacketDisconnect.class); - this.server(SPacketWorld.class); this.server(SPacketCamera.class); this.server(SPacketBiome.class); this.server(SPacketUpdateEntityTags.class); @@ -186,6 +185,7 @@ public enum PacketRegistry { this.server(SPacketServerTick.class); this.server(SPacketLoading.class); this.server(SPacketDisplayForm.class); + this.server(SPacketServerConfig.class); this.client(CPacketKeepAlive.class); this.client(CPacketMessage.class); diff --git a/common/src/main/java/common/packet/SPacketRespawn.java b/common/src/main/java/common/packet/SPacketRespawn.java index 3eb6001d..3094288d 100755 --- a/common/src/main/java/common/packet/SPacketRespawn.java +++ b/common/src/main/java/common/packet/SPacketRespawn.java @@ -18,6 +18,8 @@ public class SPacketRespawn implements Packet { private String dimName; private String dimDisplay; private String dimFull; + private int sunColor; + private int[] moonColors; private int type; private boolean editor; @@ -37,6 +39,10 @@ public class SPacketRespawn implements Packet { 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 { @@ -61,6 +67,13 @@ public class SPacketRespawn implements Packet { this.dimName = buf.readString(1024); this.dimDisplay = buf.readString(1024); this.dimFull = buf.readString(4096); + if(this.dimType.celestials) { + this.sunColor = buf.readInt(); + this.moonColors = new int[buf.readVarInt()]; + for(int z = 0; z < this.moonColors.length; z++) { + this.moonColors[z] = buf.readInt(); + } + } } this.type = buf.readUnsignedShort(); this.editor = buf.readBoolean(); @@ -76,6 +89,13 @@ public class SPacketRespawn implements Packet { buf.writeString(this.dimName); buf.writeString(this.dimDisplay); buf.writeString(this.dimFull); + if(this.dimType.celestials) { + buf.writeInt(this.sunColor); + buf.writeVarInt(this.moonColors.length); + for(int z = 0; z < this.moonColors.length; z++) { + buf.writeInt(this.moonColors[z]); + } + } } buf.writeShort(this.type & 65535); buf.writeBoolean(this.editor); @@ -91,6 +111,10 @@ public class SPacketRespawn implements Packet { dim.fromTags(this.dimData); dim.setCustomName(this.dimDisplay); dim.setDisplayName(this.dimFull); + if(this.dimType.celestials) { + dim.setSunColor(this.sunColor); + dim.setMoonColors(this.moonColors); + } return dim; } diff --git a/common/src/main/java/common/packet/SPacketServerConfig.java b/common/src/main/java/common/packet/SPacketServerConfig.java new file mode 100644 index 00000000..db474e67 --- /dev/null +++ b/common/src/main/java/common/packet/SPacketServerConfig.java @@ -0,0 +1,83 @@ +package common.packet; + +import java.io.IOException; +import java.util.List; + +import common.collect.Lists; +import common.network.IClientPlayer; +import common.network.Packet; +import common.network.PacketBuffer; +import common.util.Pair; + +public class SPacketServerConfig implements Packet { + private List> values; + + public SPacketServerConfig() { + } + + public SPacketServerConfig(List> values) { + this.values = values; + } + + public SPacketServerConfig(String var, Object value) { + this.values = Lists.newArrayList(new Pair(var, value)); + } + + public void readPacketData(PacketBuffer buf) throws IOException { + this.values = Lists.newArrayList(); + int n = buf.readVarInt(); + for(int z = 0; z < n; z++) { + String var = buf.readString(64); + Object value; + switch(buf.readByte()) { + case 0: + default: + value = false; + break; + case 1: + value = true; + break; + case 2: + value = buf.readVarInt(); + break; + case 3: + value = buf.readFloat(); + break; + case 4: + value = buf.readString(1024); + break; + } + this.values.add(new Pair(var, value)); + } + } + + public void writePacketData(PacketBuffer buf) throws IOException { + buf.writeVarInt(this.values.size()); + for(Pair var : this.values) { + buf.writeString(var.first()); + if(var.second() instanceof Boolean bool) { + buf.writeByte(bool ? 1 : 0); + } + else if(var.second() instanceof Integer i) { + buf.writeByte(2); + buf.writeVarInt(i); + } + else if(var.second() instanceof Float f) { + buf.writeByte(3); + buf.writeFloat(f); + } + else if(var.second() instanceof String str) { + buf.writeByte(4); + buf.writeString(str); + } + } + } + + public void processPacket(IClientPlayer handler) { + handler.handleServerConfig(this); + } + + public List> getValues() { + return this.values; + } +} diff --git a/common/src/main/java/common/packet/SPacketUpdateTileEntity.java b/common/src/main/java/common/packet/SPacketUpdateDevice.java similarity index 91% rename from common/src/main/java/common/packet/SPacketUpdateTileEntity.java rename to common/src/main/java/common/packet/SPacketUpdateDevice.java index 86cfdcb9..05ecd83d 100755 --- a/common/src/main/java/common/packet/SPacketUpdateTileEntity.java +++ b/common/src/main/java/common/packet/SPacketUpdateDevice.java @@ -12,17 +12,17 @@ import common.tileentity.TileEntity; import common.util.BlockPos; import common.world.State; -public class SPacketUpdateTileEntity implements Packet +public class SPacketUpdateDevice implements Packet { private BlockPos blockPos; private Block type; private TagObject tag; - public SPacketUpdateTileEntity() + public SPacketUpdateDevice() { } - public SPacketUpdateTileEntity(TileEntity tile) + public SPacketUpdateDevice(TileEntity tile) { this.blockPos = tile.getPos(); this.type = tile.getBlockType(); diff --git a/common/src/main/java/common/packet/SPacketWorld.java b/common/src/main/java/common/packet/SPacketWorld.java deleted file mode 100755 index 6b795172..00000000 --- a/common/src/main/java/common/packet/SPacketWorld.java +++ /dev/null @@ -1,51 +0,0 @@ -package common.packet; - -import java.io.IOException; - -import common.network.IClientPlayer; -import common.network.Packet; -import common.network.PacketBuffer; - -public class SPacketWorld implements Packet { - private float gravity; - private int timeFactor; - private boolean dayCycle; - - public SPacketWorld() { - } - - public SPacketWorld(float gravity, boolean dayCycle, int timeFactor) { - this.gravity = gravity; - this.timeFactor = timeFactor; - this.dayCycle = dayCycle; - } - - public void processPacket(IClientPlayer handler) { - handler.handleWorld(this); - } - - public void readPacketData(PacketBuffer buf) throws IOException { - this.gravity = buf.readFloat(); - this.timeFactor = buf.readVarInt(); - int flags = buf.readUnsignedByte(); - this.dayCycle = (flags & 1) > 0; - } - - public void writePacketData(PacketBuffer buf) throws IOException { - buf.writeFloat(this.gravity); - buf.writeVarInt(this.timeFactor); - buf.writeByte(this.dayCycle ? 1 : 0); - } - - public float getGravity() { - return this.gravity; - } - - public int getTimeFactor() { - return this.timeFactor; - } - - public boolean hasDayCycle() { - return this.dayCycle; - } -} diff --git a/common/src/main/java/common/tileentity/TileEntityDevice.java b/common/src/main/java/common/tileentity/TileEntityDevice.java index 0b1fe6e4..e535a9c4 100755 --- a/common/src/main/java/common/tileentity/TileEntityDevice.java +++ b/common/src/main/java/common/tileentity/TileEntityDevice.java @@ -8,7 +8,7 @@ import common.inventory.ContainerTile; import common.inventory.InventoryPlayer; import common.item.ItemStack; import common.network.Packet; -import common.packet.SPacketUpdateTileEntity; +import common.packet.SPacketUpdateDevice; import common.rng.Random; import common.tags.TagObject; import java.util.List; @@ -326,7 +326,7 @@ public abstract class TileEntityDevice extends TileEntityLockable implements IHo public Packet getDescriptionPacket() { - return new SPacketUpdateTileEntity(this); + return new SPacketUpdateDevice(this); } public int getColor() { diff --git a/common/src/main/java/common/vars/Vars.java b/common/src/main/java/common/vars/Vars.java index 205ef9db..9816d972 100755 --- a/common/src/main/java/common/vars/Vars.java +++ b/common/src/main/java/common/vars/Vars.java @@ -187,6 +187,10 @@ public abstract class Vars { public static boolean itemFallDamage = true; @Var(name = "signEditing") public static boolean editSigns = true; + @Var(name = "daylightCycle") + public static boolean dayCycle = true; + @Var(name = "dropPlayerSkulls") + public static boolean skullDrop = true; @Var(name = "keepInventory") public static boolean keepInventory = false; @@ -255,7 +259,16 @@ public abstract class Vars { public static int spawnMoreZombie = 25; @Var(name = "explosionBlocksPerTick", min = 100, max = 100000) public static int maxExplosionIters = 1024; + @Var(name = "viewDistance", min = 2, max = 16) + public static int distance = 8; + @Var(name = "timeFlow", min = 1) + public static int timeFlow = 1; + @Var(name = "gravity", min = -10.0f, max = 10.0f) + public static float gravity = 1.0f; @Var(name = "knockback") public static float knockback = 1.0f; + + @Var(name = "baseSeed", nonDefault = true) + public static String seed = ""; } diff --git a/common/src/main/java/common/world/World.java b/common/src/main/java/common/world/World.java index 730bc1fb..116ecd28 100755 --- a/common/src/main/java/common/world/World.java +++ b/common/src/main/java/common/world/World.java @@ -38,6 +38,7 @@ import common.util.HitPosition; import common.util.IntHashMap; import common.util.ParticleType; import common.util.Vec3; +import common.vars.Vars; public abstract class World implements IWorldAccess { public static final float[][] BRIGHTNESS = new float[16][16]; @@ -60,7 +61,6 @@ public abstract class World implements IWorldAccess { public final boolean client; public double gravity = 1.0; - protected long timeFactor = 1L; public final Random rand = new Random(); public final List entities = Lists.newArrayList(); protected final List unloaded = Lists.newArrayList(); @@ -126,8 +126,8 @@ public abstract class World implements IWorldAccess { this.weather = dim.getWeather(); } - public void setGravity(float gravity) { - this.gravity = (double)this.dimension.getGravity() * 0.1 * gravity; + public void updatePhysics() { + this.gravity = (double)this.dimension.getGravity() * 0.1 * Vars.gravity; if(Math.abs(this.gravity) < 0.075) this.gravity = Math.signum(this.gravity) * 0.075; } @@ -902,15 +902,16 @@ public abstract class World implements IWorldAccess { } public float getCelestialAngle(float partialTicks) { - return !this.dimension.getType().days ? 0.5f : this.calculateCelestialAngle(this.daytime, partialTicks); + return !this.dimension.getType().days ? 0.5f : this.calculateCelestialAngle(this.daytime, Vars.dayCycle ? partialTicks : 0.0f); } - public int getMoonPhase() { - return (int)(this.daytime / this.dimension.getRotationalPeriod() % 8L + 8L) % 8; + public int getMoonPhase(int moon) { + this.rand.setSeed((this.dimension.getSeed() + moon) ^ (moon << 12)); + return (int)(this.daytime / this.dimension.getRotationalPeriod() % 8L + 8L + this.rand.zrange(8)) % 8; } public float getCurrentMoonPhaseFactor() { - return MOON_PHASES[this.getMoonPhase()]; + return MOON_PHASES[this.getMoonPhase(0)]; } public float getCelestialAngleRadians(float partialTicks) { @@ -1955,12 +1956,6 @@ public abstract class World implements IWorldAccess { // return null; // } - public void setTimeFactor(int factor) { - this.timeFactor = Math.max((long)factor, 1L); -// if(this.timeFactor > Constants.EARTH_DAY) -// this.timeFactor = (this.timeFactor - (this.timeFactor % Constants.EARTH_DAY)) + 1L; - } - public void setEntityState(Entity entityIn, byte state) { } diff --git a/server/src/main/java/server/Server.java b/server/src/main/java/server/Server.java index de6efe05..b2b02707 100755 --- a/server/src/main/java/server/Server.java +++ b/server/src/main/java/server/Server.java @@ -21,6 +21,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Map.Entry; import java.util.Queue; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -77,15 +78,16 @@ import common.packet.SPacketDisconnect; import common.packet.SPacketHeldItemChange; import common.packet.SPacketJoinGame; import common.packet.SPacketRespawn; +import common.packet.SPacketServerConfig; import common.packet.SPacketSetExperience; import common.packet.SPacketSkin; import common.packet.SPacketTimeUpdate; -import common.packet.SPacketWorld; import common.tags.TagObject; import common.util.BlockPos; import common.util.EncryptUtil; import common.util.ExtMath; import common.util.LazyLoader; +import common.util.Pair; import common.util.PortalType; import common.util.Position; import common.util.Util; @@ -274,18 +276,10 @@ public final class Server implements IThreadListener, Executor { throw new IllegalArgumentException("Variablenname von " + field + " kann nicht leer sein!"); if(this.variables.containsKey(value.name())) throw new IllegalArgumentException("Variable " + value.name() + " existiert bereits!"); - this.variables.put(value.name(), new SVar(field, value)); + this.variables.put(value.name(), new SVar(field, value, clazz == Vars.class)); } } } - this.setCallback(new Runnable() { - public void run() { - for(WorldServer world : Server.this.getWorlds()) { - world.updatePhysics(); - } - Server.this.sendPacket(new SPacketWorld(WorldServer.clampGravity(), SVars.dayCycle, SVars.timeFlow)); - } - }, "daylightCycle", "timeFlow", "gravity"); this.setCallback(new Runnable() { public void run() { for(WorldServer world : Server.this.getWorlds()) { @@ -495,14 +489,14 @@ public final class Server implements IThreadListener, Executor { public void preload(WorldServer world, int bx, int bz) { int done = 0; - int total = SVars.distance * 2 + 1; + int total = Vars.distance * 2 + 1; total *= total; Log.TICK.info("Generiere und lade Welt"); bx = bx >> 4; bz = bz >> 4; long last = System.currentTimeMillis(); - for(int x = -SVars.distance; x <= SVars.distance; x++) { - for(int z = -SVars.distance; z <= SVars.distance; z++) { + for(int x = -Vars.distance; x <= Vars.distance; x++) { + for(int z = -Vars.distance; z <= Vars.distance; z++) { long time = System.currentTimeMillis(); if(time - last > 1000L) { Log.TICK.info("Bereite Spawnbereich vor" + ": " + (done * 100 / total) + "%"); @@ -739,10 +733,14 @@ public final class Server implements IThreadListener, Executor { + 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() + "'") + ")"); + List> vars = Lists.newArrayList(); + for(Entry var : this.variables.entrySet()) { + if(var.getValue().sync) + vars.add(new Pair(var.getKey(), var.getValue().getRaw())); + } + conn.sendPacket(new SPacketServerConfig(vars)); conn.sendPacket(new SPacketJoinGame(player.getId(), world.dimension, EntityRegistry.getEntityID(player), tag == null)); conn.sendPacket(new SPacketHeldItemChange(player.inventory.currentItem)); - conn.sendPacket(new SPacketWorld(WorldServer.clampGravity(), - SVars.dayCycle, SVars.timeFlow)); this.sendPacket(new SPacketPlayerListItem(false, conn)); world.spawnEntityInWorld(player); diff --git a/server/src/main/java/server/command/commands/CommandSv.java b/server/src/main/java/server/command/commands/CommandSv.java index d654e7de..69fab3ff 100644 --- a/server/src/main/java/server/command/commands/CommandSv.java +++ b/server/src/main/java/server/command/commands/CommandSv.java @@ -5,6 +5,7 @@ import java.util.Map.Entry; import common.collect.Lists; import common.color.TextColor; +import common.packet.SPacketServerConfig; import server.command.ArgumentSplitter; import server.command.Command; import server.command.CommandEnvironment; @@ -93,6 +94,8 @@ public class CommandSv extends Command { } } sv.set(value, false, true); + if(sv.sync) + env.getServer().sendPacket(new SPacketServerConfig(variable, sv.getRaw())); } exec.log(this.formatVariable(variable, sv, value == null ? "=" : "->", false)); return sv.noDef && sv.def.equals(sv.get()) ? null : sv.get(); diff --git a/server/src/main/java/server/network/Player.java b/server/src/main/java/server/network/Player.java index dbdf327d..6561dcb6 100755 --- a/server/src/main/java/server/network/Player.java +++ b/server/src/main/java/server/network/Player.java @@ -116,6 +116,7 @@ import common.util.PortalType; import common.util.Position; import common.util.Vec3i; import common.util.WorldPos; +import common.vars.Vars; import common.village.MerchantRecipeList; import common.world.BlockArray; import common.world.State; @@ -281,11 +282,11 @@ public class Player extends User implements Executor, IPlayer this.deathPos = this.entity.getPos(); this.entity.sendDeathMessage(); - if (!SVars.keepInventory && SVars.playerDrop) + if (!Vars.keepInventory && Vars.playerDrop) { this.entity.inventory.dropAllItems(); } - if(SVars.skullDrop) { + if(Vars.skullDrop) { ItemStack stack = new ItemStack(Items.skull); this.entity.dropItem(stack, true, false); } @@ -466,7 +467,7 @@ public class Player extends User implements Executor, IPlayer { this.lastExperience = -1; this.lastHealth = -1.0F; - if(SVars.keepInventory) + if(Vars.keepInventory) this.entity.inventory.copyInventory(oldPlayer.inventory); this.entity.experienceLevel = oldPlayer.experienceLevel; this.entity.experienceTotal = oldPlayer.experienceTotal; diff --git a/server/src/main/java/server/vars/SVar.java b/server/src/main/java/server/vars/SVar.java index deaa95ab..a1bca212 100644 --- a/server/src/main/java/server/vars/SVar.java +++ b/server/src/main/java/server/vars/SVar.java @@ -9,18 +9,20 @@ public class SVar { public final ValueType type; public final String def; public final boolean noDef; + public final boolean sync; private final Field field; private final float min; private final float max; private Runnable callback; - public SVar(Field field, Var value) { + public SVar(Field field, Var value, boolean sync) { this.type = field.getType() == int.class ? ValueType.INTEGER : (field.getType() == boolean.class ? ValueType.BOOLEAN : (field.getType() == String.class ? ValueType.STRING : (field.getType() == float.class ? ValueType.FLOAT : null))); if(this.type == null) throw new IllegalArgumentException(value.name() + ": Unbekannter Variablen-Typ - " + field.getType()); this.field = field; + this.sync = sync; this.def = this.get(); this.noDef = value.nonDefault(); this.min = (this.type == ValueType.INTEGER || this.type == ValueType.FLOAT) @@ -39,6 +41,15 @@ public class SVar { } } + public Object getRaw() { + try { + return this.field.get(null); + } + catch(IllegalArgumentException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + public void setCallback(Runnable callback) { this.callback = callback; } diff --git a/server/src/main/java/server/vars/SVars.java b/server/src/main/java/server/vars/SVars.java index b306cd83..6c82e006 100644 --- a/server/src/main/java/server/vars/SVars.java +++ b/server/src/main/java/server/vars/SVars.java @@ -1,9 +1,8 @@ package server.vars; import common.util.Var; -import common.vars.Vars; -public abstract class SVars extends Vars { +public abstract class SVars { @Var(name = "tickSpawning") public static boolean tickSpawn = true; @Var(name = "genSpawning") @@ -20,10 +19,6 @@ public abstract class SVars extends Vars { public static boolean spawnStrongholdMobs = true; @Var(name = "spawnHutMages") public static boolean spawnHutMage = true; - @Var(name = "daylightCycle") - public static boolean dayCycle = true; - @Var(name = "dropPlayerSkulls") - public static boolean skullDrop = true; @Var(name = "checkRespawn") public static boolean checkBed = true; @Var(name = "registration") @@ -70,14 +65,10 @@ public abstract class SVars extends Vars { public static int playerLimit = 0; @Var(name = "compressAbove") public static int compression = 256; - @Var(name = "timeFlow") - public static int timeFlow = 1; @Var(name = "emptyTicks") public static int unloadTicks = 1200; @Var(name = "weatherChance") public static int weatherChance = 48000; - @Var(name = "viewDistance", min = 2, max = 16) - public static int distance = 8; @Var(name = "maxSpawns") public static int maxMobs = 120; @Var(name = "connectionTimeout", min = 10, max = 300) @@ -89,11 +80,6 @@ public abstract class SVars extends Vars { @Var(name = "spawnDungeonMobs") public static int spawnDungeonMobs = 4; - @Var(name = "gravity") - public static float gravity = 1.0f; - @Var(name = "password", nonDefault = true) public static String password = ""; - @Var(name = "baseSeed", nonDefault = true) - public static String seed = ""; } diff --git a/server/src/main/java/server/world/WorldServer.java b/server/src/main/java/server/world/WorldServer.java index c2ba064e..4f4ec5a4 100755 --- a/server/src/main/java/server/world/WorldServer.java +++ b/server/src/main/java/server/world/WorldServer.java @@ -67,6 +67,7 @@ import common.util.ParticleType; import common.util.PortalType; import common.util.Position; import common.util.Vec3; +import common.vars.Vars; import common.village.Village; import common.world.BlockArray; import common.world.Explosion; @@ -181,7 +182,7 @@ public final class WorldServer extends AWorldServer { private long time; public static float clampGravity() { - return ExtMath.clampf(SVars.gravity, -10.0f, 10.0f); + return ExtMath.clampf(Vars.gravity, -10.0f, 10.0f); } public void sendPacket(Packet packet) { @@ -317,8 +318,8 @@ public final class WorldServer extends AWorldServer { this.updateViewRadius(); 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)UniverseRegistry.getName(dim).hashCode())); + if(!Vars.seed.isEmpty()) + this.rand.setSeed((long)Vars.seed.hashCode() ^ ~((long)UniverseRegistry.getName(dim).hashCode())); this.seed = this.rand.longv(); this.dimension.setSeed(this.seed); TagObject tag = null; @@ -348,7 +349,7 @@ public final class WorldServer extends AWorldServer { // ... } else { - Log.TICK.info("Startwert für %s: %d" + (SVars.seed.isEmpty() ? "" : " von Basiswert '%s'"), this.dimension.getFormattedName(false), this.seed, SVars.seed); + Log.TICK.info("Startwert für %s: %d" + (Vars.seed.isEmpty() ? "" : " von Basiswert '%s'"), this.dimension.getFormattedName(false), this.seed, Vars.seed); } if(this.exterminated) this.weather = Weather.CLEAR; @@ -379,17 +380,13 @@ public final class WorldServer extends AWorldServer { public Server getServer() { return this.server; } - - public void updatePhysics() { - this.setTimeFactor(SVars.timeFlow); - this.setGravity(clampGravity()); - } public void tick() { + this.updatePhysics(); this.updateWeather(false); this.biomeGen.cleanupCache(); // this.profiler.start("mobSpawner"); - if(this.mobs && SVars.mobs && SVars.tickSpawn) { + if(this.mobs && Vars.mobs && SVars.tickSpawn) { Spawner.spawn(this); } // this.profiler.next("chunkSource"); @@ -413,8 +410,8 @@ public final class WorldServer extends AWorldServer { // this.info.tick(); this.time += 1L; // this.dataModified = true; - if(SVars.dayCycle) // { - this.daytime += this.timeFactor; + if(Vars.dayCycle) // { + this.daytime += Vars.timeFlow; // if(this.dimension.getType().dayCycle) // this.season = this.getSeasonByTime(); // } @@ -520,7 +517,7 @@ public final class WorldServer extends AWorldServer { } protected void updateBlocks() { - this.setActivePlayerChunksAndCheckLight(SVars.distance); + this.setActivePlayerChunksAndCheckLight(Vars.distance); int dtics = 0; int rtics = 0; @@ -574,7 +571,7 @@ public final class WorldServer extends AWorldServer { this.getState(blockpos1).getBlock().fillWithRain(this, blockpos1); } - if(SVars.igniteChance > 0 && SVars.fire && !this.isRaining() && + if(SVars.igniteChance > 0 && Vars.fire && !this.isRaining() && this.rand.chance(this.hasDownfall() ? Math.max(1, SVars.igniteChance / 3) : SVars.igniteChance) && this.canPlaceFireAt(blockpos2)) { this.setState(blockpos2, Blocks.fire.getState()); @@ -1006,7 +1003,7 @@ public final class WorldServer extends AWorldServer { this.effects.add(entity); this.sendNear(entity.posX, entity.posY, entity.posZ, 512.0D, new SPacketSpawnGlobalEntity(entity, 1, entity.color)); - if(fire && SVars.fire) { + if(fire && Vars.fire) { BlockPos pos = new BlockPos(entity); if(this.isAreaLoaded(pos, 10)) { if(this.getState(pos).getBlock() == Blocks.air && Blocks.fire.canPlaceBlockAt(this, pos)) @@ -1460,7 +1457,7 @@ public final class WorldServer extends AWorldServer { liquid.generate(this, this.grng, pos); } } - if(this.mobs && SVars.mobs && SVars.genSpawn) { + if(this.mobs && Vars.mobs && SVars.genSpawn) { Spawner.generate(this, biome, bx + 8, bz + 8, 16, 16, this.grng); } // if(this.snow) { @@ -1958,7 +1955,7 @@ public final class WorldServer extends AWorldServer { } public void updateViewRadius() { - int radius = ExtMath.clampi(SVars.distance, 3, 128); + int radius = ExtMath.clampi(Vars.distance, 3, 128); if(radius != this.viewRadius) { int diff = radius - this.viewRadius; @@ -1992,7 +1989,7 @@ public final class WorldServer extends AWorldServer { this.viewRadius = radius; } - this.trackDistance = SVars.distance * 16 - 16; + this.trackDistance = Vars.distance * 16 - 16; } public void trackEntity(Entity entityIn) { diff --git a/server/src/main/java/server/worldgen/FeatureDungeons.java b/server/src/main/java/server/worldgen/FeatureDungeons.java index 0ef84fab..ae449201 100755 --- a/server/src/main/java/server/worldgen/FeatureDungeons.java +++ b/server/src/main/java/server/worldgen/FeatureDungeons.java @@ -16,6 +16,7 @@ import common.tileentity.TileEntity; import common.tileentity.TileEntityChest; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.World; import server.vars.SVars; import server.world.WorldServer; @@ -154,7 +155,7 @@ public class FeatureDungeons } } - if(SVars.mobs && SVars.spawnDungeonMobs > 0) { + if(Vars.mobs && SVars.spawnDungeonMobs > 0) { for(int z = 0; z < SVars.spawnDungeonMobs; z++) { EntityLiving entity = this.pickMobSpawner(rand, worldIn); entity.setLocationAndAngles((double)position.getX() + rand.doublev(), (double)position.getY(), (double)position.getZ() + rand.doublev(), worldIn.rand.floatv() * 360.0F, 0.0F); diff --git a/server/src/main/java/server/worldgen/structure/StructureBridge.java b/server/src/main/java/server/worldgen/structure/StructureBridge.java index 3e3b78bd..55476c0a 100755 --- a/server/src/main/java/server/worldgen/structure/StructureBridge.java +++ b/server/src/main/java/server/worldgen/structure/StructureBridge.java @@ -10,6 +10,7 @@ import common.rng.Random; import common.tags.TagObject; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.State; import server.vars.SVars; import server.world.WorldServer; @@ -1366,7 +1367,7 @@ public class StructureBridge this.fillWithBlocks(worldIn, structureBoundingBoxIn, 1, 6, 8, 5, 7, 8, Blocks.blood_brick_fence.getState(), Blocks.blood_brick_fence.getState(), false); this.fillWithBlocks(worldIn, structureBoundingBoxIn, 2, 8, 8, 4, 8, 8, Blocks.blood_brick_fence.getState(), Blocks.blood_brick_fence.getState(), false); - if (!this.hasSpawner && SVars.mobs && SVars.spawnBridgeMobs) + if (!this.hasSpawner && Vars.mobs && SVars.spawnBridgeMobs) { BlockPos blockpos = new BlockPos(this.getXWithOffset(3, 5), this.getYWithOffset(5), this.getZWithOffset(3, 5)); diff --git a/server/src/main/java/server/worldgen/structure/StructureMineshaft.java b/server/src/main/java/server/worldgen/structure/StructureMineshaft.java index 1f272416..856c9ba4 100755 --- a/server/src/main/java/server/worldgen/structure/StructureMineshaft.java +++ b/server/src/main/java/server/worldgen/structure/StructureMineshaft.java @@ -16,6 +16,7 @@ import common.rng.WeightedList; import common.tags.TagObject; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.State; import server.vars.SVars; import server.world.WorldServer; @@ -363,7 +364,7 @@ public class StructureMineshaft this.generateChestContents(worldIn, structureBoundingBoxIn, randomIn, 0, 0, k1 + 1, RngLoot.addToList(LootConstants.MINESHAFT_CHEST, ItemEnchantedBook.getRandom(randomIn)), 3 + randomIn.zrange(4)); } - if (this.hasSpiders && !this.spawnerPlaced && SVars.mobs && SVars.spawnMineshaftMobs) + if (this.hasSpiders && !this.spawnerPlaced && Vars.mobs && SVars.spawnMineshaftMobs) { int l1 = this.getYWithOffset(0); int i2 = k1 - 1 + randomIn.zrange(3); diff --git a/server/src/main/java/server/worldgen/structure/StructureScattered.java b/server/src/main/java/server/worldgen/structure/StructureScattered.java index 70740ffb..e7666445 100755 --- a/server/src/main/java/server/worldgen/structure/StructureScattered.java +++ b/server/src/main/java/server/worldgen/structure/StructureScattered.java @@ -15,6 +15,7 @@ import common.rng.Random; import common.tags.TagObject; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.State; import server.vars.SVars; import server.world.WorldServer; @@ -669,7 +670,7 @@ public class StructureScattered } } - if (!this.hasMage && SVars.mobs && SVars.spawnHutMage) + if (!this.hasMage && Vars.mobs && SVars.spawnHutMage) { int l1 = this.getXWithOffset(2, 5); int i2 = this.getYWithOffset(2); diff --git a/server/src/main/java/server/worldgen/structure/StructureStronghold.java b/server/src/main/java/server/worldgen/structure/StructureStronghold.java index 491e76bb..ab7a19cb 100755 --- a/server/src/main/java/server/worldgen/structure/StructureStronghold.java +++ b/server/src/main/java/server/worldgen/structure/StructureStronghold.java @@ -17,6 +17,7 @@ import common.rng.Random; import common.tags.TagObject; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.State; import server.vars.SVars; import server.world.WorldServer; @@ -902,7 +903,7 @@ public class StructureStronghold // this.setBlockState(worldIn, Blocks.end_portal_frame.getStateFromMeta(j1).withProperty(BlockPortalFrame.ORB, Boolean.valueOf(randomIn.floatv() > 0.9F)), 7, 3, 10, structureBoundingBoxIn); // this.setBlockState(worldIn, Blocks.end_portal_frame.getStateFromMeta(j1).withProperty(BlockPortalFrame.ORB, Boolean.valueOf(randomIn.floatv() > 0.9F)), 7, 3, 11, structureBoundingBoxIn); - if (!this.hasSpawner && SVars.mobs && SVars.spawnStrongholdMobs) + if (!this.hasSpawner && Vars.mobs && SVars.spawnStrongholdMobs) { i = this.getYWithOffset(3); BlockPos blockpos = new BlockPos(this.getXWithOffset(5, 6), i, this.getZWithOffset(5, 6)); diff --git a/server/src/main/java/server/worldgen/structure/StructureVillage.java b/server/src/main/java/server/worldgen/structure/StructureVillage.java index 230ec182..db72caec 100755 --- a/server/src/main/java/server/worldgen/structure/StructureVillage.java +++ b/server/src/main/java/server/worldgen/structure/StructureVillage.java @@ -18,6 +18,7 @@ import common.rng.Random; import common.tags.TagObject; import common.util.BlockPos; import common.util.Facing; +import common.vars.Vars; import common.world.State; import server.vars.SVars; import server.world.WorldServer; @@ -1603,7 +1604,7 @@ public class StructureVillage protected void spawnVillagers(WorldServer worldIn, StructureBoundingBox p_74893_2_, int p_74893_3_, int p_74893_4_, int p_74893_5_, int p_74893_6_) { - if (this.villagersSpawned < p_74893_6_ && SVars.mobs && SVars.spawnVillager) + if (this.villagersSpawned < p_74893_6_ && Vars.mobs && SVars.spawnVillager) { for (int i = this.villagersSpawned; i < p_74893_6_; ++i) { @@ -1920,7 +1921,7 @@ public class StructureVillage protected void spawnVillager(WorldServer worldIn, StructureBoundingBox p_74893_2_, int x, int y, int z) { - if (!this.villagerSpawned && SVars.mobs && SVars.spawnCageMobs) + if (!this.villagerSpawned && Vars.mobs && SVars.spawnCageMobs) { int j = this.getXWithOffset(x, z); int k = this.getYWithOffset(y);