From aee94aa14d2e35dc30b01ddfa085d310bf38c4ee Mon Sep 17 00:00:00 2001 From: Sen Date: Fri, 11 Jul 2025 23:01:59 +0200 Subject: [PATCH] add variable sync --- client/src/main/java/client/Client.java | 64 ++++++++++++-- .../java/client/network/ClientPlayer.java | 22 ++--- .../java/client/renderer/RenderGlobal.java | 67 ++++++++------ .../main/java/client/world/WorldClient.java | 9 +- .../resources/textures/world/moon_phases.png | Bin 1531 -> 6821 bytes .../textures/world/planet_phases.png | Bin 0 -> 6684 bytes .../src/main/resources/textures/world/sun.png | Bin 675 -> 5691 bytes .../main/java/common/dimension/DimType.java | 21 ++--- .../main/java/common/dimension/Dimension.java | 27 ++++++ .../src/main/java/common/dimension/Moon.java | 15 ++++ .../main/java/common/dimension/Planet.java | 21 ++++- .../java/common/init/UniverseRegistry.java | 8 ++ .../java/common/network/IClientPlayer.java | 8 +- .../java/common/network/PacketRegistry.java | 8 +- .../java/common/packet/SPacketRespawn.java | 24 +++++ .../common/packet/SPacketServerConfig.java | 83 ++++++++++++++++++ ...leEntity.java => SPacketUpdateDevice.java} | 6 +- .../main/java/common/packet/SPacketWorld.java | 51 ----------- .../common/tileentity/TileEntityDevice.java | 4 +- common/src/main/java/common/vars/Vars.java | 13 +++ common/src/main/java/common/world/World.java | 21 ++--- server/src/main/java/server/Server.java | 28 +++--- .../server/command/commands/CommandSv.java | 3 + .../src/main/java/server/network/Player.java | 7 +- server/src/main/java/server/vars/SVar.java | 13 ++- server/src/main/java/server/vars/SVars.java | 16 +--- .../main/java/server/world/WorldServer.java | 33 ++++--- .../java/server/worldgen/FeatureDungeons.java | 3 +- .../worldgen/structure/StructureBridge.java | 3 +- .../structure/StructureMineshaft.java | 3 +- .../structure/StructureScattered.java | 3 +- .../structure/StructureStronghold.java | 3 +- .../worldgen/structure/StructureVillage.java | 5 +- 33 files changed, 392 insertions(+), 200 deletions(-) create mode 100755 client/src/main/resources/textures/world/planet_phases.png create mode 100644 common/src/main/java/common/packet/SPacketServerConfig.java rename common/src/main/java/common/packet/{SPacketUpdateTileEntity.java => SPacketUpdateDevice.java} (91%) delete mode 100755 common/src/main/java/common/packet/SPacketWorld.java 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 cdba8d153f5d366c1e1920f022a486499ac710c8..d8786318c16d5d84054fb87dce18e2ab5bfac561 100755 GIT binary patch literal 6821 zcmeHLc{o&U8y{_!NS34p(~yYSXE0+AF)_#zWvMYUm@uQ6!B{5hMM<`7$*%0Blx!7A zs8q_DB(GFNvXwo)GwSWF>-(izW8~jW+z1>mn5$=$h?QdjgO(}h# zqWk)u#bJ#m(;a(bao6gWBpX(cO(>y~ZO?viPd4bnn|r%?h8qgFR{< z7^Uj5u|<5>!)uq1HVLQKslj~C89aB`jjUbMA*1KL&rJe1*KX5nndpy7j#nQq{nSqD zq_~Y~a!js$tOzGE6BVuaNp;nz8O5?db8$3`H79YsM7tr%L(bD7B}hT`Ko@&vlF*3? zr1~gk_cpiQt{}f!$2e&3lF;NG0*l37{*v>^QAMiD`D!>s-c-2hARTs2~8rueeUoG26N9X65|7y(;aGBBl~UbZW7Mdf_f{#Dr z+>mE&^@8ZTTRJX20h4TeN9Pq>c7$!gshG*h*rjtvjLhEJBw<|r;F{Q({maGu#@o*g zW*86d@GpICeN}YdMdv2;C0UKT!qo~5R);hj>r(XWOT((JT3fkjtUGZ?D<*s!QjYNa z)%D5dtn9Nvtgb)WT_llyd)KAwOSZM*Ql!|9@1B9P>R6*O+44nmdW>eT+gXx3Vg!WN z`a}h_*_yr~#3C9$#wkdkd_y(ab&kRgbrJE`lbNk$xlyXAeD~asIa`}5?6z(@m4y&o zbQV#dPQ1S+o5nrgWPf9(t$J#IXjwtiX^YSi=j^g7M=jjQhs5-HttaT{`hy|cpBiBF z4~ewm%@jN6&TG#)EUI}0a#as2k?0dID9>Jq9^_nz5XpI+E?k{rdtQ2Mb2Z#3Me~^E zCJT!Jr(>hag8S`+j$Vd*IvwolGx@w>Ak+G*U!G{N@t3|7oyD}_w&wRzTArUPmb+ii zKf%{3$cQ99ZGIDIoIkgI;OwYkn#-7i`lCF%u9vN@mppeN)yf>q&qxe4%xt}m%z6Lx z=B-wOp2oO2t)zvx27OLb=YEprmW-fAjj{pzRi!9{4YUL57p3wIH##>tJkFa8Zt#a+ zFz1ZnMb?ql!W$mjS2p~ys6SUd8J*tAgbk~>^#(@1t2E6~#ptDkeMmZCSTHfEd3+gr zr(Q7oJ?eaHK@4`Y>K-Xs$I9rElr86D2A_70WL7f9`Yl_IY~KUT9y^Qj^uQoCwV{TTovt?z?7H-@d~z@qxuAI|gZx zEBnE?ic@J4tJ}98Z@f}D6W6ds7kMQ6^&U9NwfP!#+GW@F-qQ<7a!gL;CcX=@h^tYh z;bm0!uYXD*+HP#_GZ8WiM4T8WV7O8{``v7%lWKfphlAU?sxOvne)0_wQ0Wj5Py+K$ zzd@hx0&m|EXSkmq7N~NWe;C@z6>2U{FE0}xSJR?Z3X|u8&9qF15Cbt)OWQh5)xMo) z*vKu#j_9JluFnw-Zup!Tk-?bixEIVPxb!?XclItGxb1Uj!0p|hXoe>!-Wdt zczFZ2e-KDZm*Y($dr;Y67pfbLt_>NxRSN;rDB2J^ED=HUHlVuGOahox>i}~ba)1XJ zM}g?-2x)Qf0D%{kO#*YgJn1YvM;o%jiwD}gZa4(I0%3b-L+pu`U;_q|3dX=NFa*?y zL-R#JbcDcKOo}Vs%5d*@3gAi`;?8D!7n@wZT!8}fq3&V%44S@jT;J^Iy@+K00(9>DpRRHvWb4cEB zBn$!f@`C?t!D1Wv0wmuZ`i~YY8{jDkZbfA=e3)dakuR0bmj9W8LjGaz?Zfn335P<4 zQ$49(0F(vHiu`3tV*=6ghXqdpH=39CiWMOCFGx1c^>49$@r^gK63)+#0OmhGu>!kZsYVUTGQ{7MsvK)RwR6dV+R#*(2Jv>FOZ!l2Pm5>^AH zrmjvwpzhmNF-M%#sy1(;?NohD2{@1Q3Lu=8VJM+ z6@`r7%V2tufaRolk=&?oZ@Syc08endz9m5$f`Wa6uJl-XlGv_*fi}d9M)%?T4Yi?p zQLWh|o|;H?EDD81tE(Y3(CRo0=5NpeDw73dB99Y^fT6#Q@RkJ+1Oo_5;^iqouwntk zf;V7NNo)qwhQaXEhVUE!^DKW16M^kSA+bq@BsLWwMWC>FggPFHv_azV2pk@TR6(Hd z-y`MG5g8PktN(vP^EMAy3%~)R07okVw|0@dSty8hKq`wyu=LSr#VG)V(WLEwM{P*X=kH4r2hAStLM zbqdavtWHwE3GV)@~>z=cPeic0KuRLb?Cnf2LB!~ zoL4jcidYN&Z<=VW0DdYmfZew~pm+hb5dNbWe%FjwcK(l_?`!dYoB^QzJ;^`P_qSZX z<@!eo{3G!1?D{R&KT_Zyfq!S$|4c5Szh9@Qbl@q-4|rMHA7z*cylAa+F*P;>UF3Za z?X=+i3oGbta*zcAZMerf_%jP~V30ax_(! zKB6Ujm)5;`{9NvM?88XWBcC^XYOOMO`V31pkJFSC_)~LDcQt2XJNw}q3H#%#`A%9a zzfqVpo#4K;ydO1rQT0%QSsVyrk@z+sQlZ`TLY{Hp`11Q*d`e5{c@OjdsM&*^V(gt& zND(DoNwk_xDXv?7X1CZg?j_Lor`x*pXP1--;<=J`1Z{A=c>1za@vKKmKLp++L{{o)Uc)K$DdwpKKyRX_g32nwoc~UWy0QK6jK=Nm|$wc@o{i(I^t`Tf-^n8t6_=&AA z>SBxg6A*nv0jf&~VbgJukHjFXF}0`M7Wf#&19N`fv;Y2|3!et{mzc<}#^HPB_PmfZ zzmQi*yHGMxT~a?-P_&z^-wxhhU!7<%BazIAu~9vq_0G0tfOvjc96qza?VD*|7?^kf zk7}&pel|OvG1z!iDp^iC@75g1GHEABBl!eEcM6-^#Sf}$GUQ!k3?Op+Xd9RcL`5N-i$FnjH|D@=Qn8`cxpuJ?OXFG=c^(f z@ovIvZiF(%trzarITy|)MW)8dX^amQ_oDk3W@(&E4~{zBf!>cZ4&Yf1X5W~a(?N$xaG3b>(9-D3Ps1gZYVA7`oh;dk*lLOy!w*P-D!_=weT-|R&wCEh2>D7 zW%1sW8`92i!UZ`t2M7E6AJY-j)z#f7Uz;H-0a7}XQ{wR$6loi*x0s{!=(=k2^|6H~ zu2T~eV(EvwzWCnq>hZnf+|qx`X`_ABsBf#&e#s!JahLDmhsd#4x#v9<(A{okBdYF*4)a>I2_EM zIb8f^63M^dtzlV8D4P!{mI=_ReQp2xSfS%-QBc!BoT9#@PM_w-nZQHB;C)=shBLkS zr{}&*A1&XQ8UEf|`T?+-Tn#7zQH_A{B2GvFr!-hoKZv)j1L@+WpEZKA9JNRCr$PTuXA(KoIr+BY%_FPDm)A5+GEuV9POBv1JDrU_}*opo#@2V9l08Z~^w* z1KxCNMq`a6kL{7ilsh$*k}c&)d9SBuB)y(SW5Z9g(b(8FVSiNZ-w2Ka_WAk$@SQ7e zwi*?!K%Q#81izFYiyC6Q*=nOTn)ux*Y_yAyA(7U^a8D!ncJSr-(fc&@n)hz2-D|c~ zYqk5P>2L6T7uv8AjturW1izXe4ql3SLp_t;?hM-9VW*e0yIG@;L+ru=0}G=(T7;>A+&Ak zd&7A@Iah6Tp&D)DOC^bsp)=sF01!vyQ~<#*;YTMQWOD?vW`7KRnfk$aF&Hn0lS|X^ z5nmb^I=!*#3MwN(1B}>41I|KeaufU#euy9rPb3qHeSgJ%KRH9ZGxf>rdNjXDW~$M~ zHNM0y>JVo*m^Gjw!R`c^0D@o6Poqh*Nknds^8UzTe>I$3f%Ng&qw)FU$;A^iY~Ull z#IC`3WoaBI7eJ+{{P6K_=}1{(ty}qdM@{1qd^V2r~%tZE)c<)KG8B5O5l5 zUS^$k1PQlvg0RQ-fUeE|GMg@4V@c$7Kg%8Xy8AOIUU5gW|{8ovxaz=6!pKA07Q zUq4^GG12JM@P7!5+1XKex4+sYgT#OK)OvI%yQd*gf9)5`?#vtMtvrxywkuz&u*6##~K zw1C%dGAFyox4}PF0Rq+^8tK6jb5gKl~uf zvmn1gY;*mAn}T>84vTLz;Gx+2`j2uN%Aw>pjoV_HYscx);O}@Nb~^t3bRmr`3(fuc zk@|qhOD#x!K(^pZoQHAgdSgDaoJ_pscI1Uj{1-A-k&G-^cJL+Fq&^_>qJvT&5P#WC zsSk*}@T}Aa#9w+@>H`W4ag{4zTg5D;>zfzY%l9-(?~Qm^e|_El{eAKO0sN;ZTK{N(IT1X)wMM9GfF@T_;KnTeRgp!0LR6(!}Dk>I4syI4; zf(l9(1x1>OC>B79sDRXws)Qok6LcJ1-?!FXv(~-;Ox8(qc6r{tpS|CG&dD+R9hNfE zO41MrM8?|6%n|&K1`p$9OTbU}f_@DMMCwkslZ(KS76Rq+I82s502PFB0Voj4VnQIH zZ5fGv!QDjJ!wY=*e2G4^ikUj(+5z8JVg*^+e7Do{l;mt>C z#Fos*=1^?A=7jbpCKHB^?~&9+O8S2R7C z0xQDAF{13ukI-uIUQ5>~ttRZ&c?{LIP}|Sbsj`1@$-(&?6TYV~ z+?!K*jcP3&HX65ltko_!`m&sTjWLCp$$r-gi)xZjCMi>JEB6dN-yY}gP9aS__v0KI zT_4zQr5cAG^x4Tw?60-cdx{?Ne~d6?RcC15xLco{6JQ!3Rova27W@Wi=`?iN_iUzp zO6vNwlpik<{c!Gq(iMVH)~Nbc-&B*tl75lw|_W& z<4h4S4tJC2yS6!9i?boDUyB~CLhBS2?y-IXPIy3eX!E)Bf&d$VN2 z*7ygt6Wi>vl8pZ(-de@9yX+?{Se~9YD66VdWDzK>1|J~ds`PJ`s0pw!ygMq{vN24k zur8= z{1gUPF6;i#w)qBnRxv-^euW_PEYH3DLtB-NUffMxTjQW!()jScX_8Oe{Mt0-4O7P6 zTC##ycXUQ-rOSNXOwfe8HW&S4<5hQH>-!UEy+NC&SQ#es+2*>dEVRv|N7fysY3U^4 zn4GXDtmVZ6?Y!G3?gU>wDO0&;3ZEeJ=zdWmW~6gxvY*atQjd~;#pl+-N~I3>lp?6* zme2L^0?$cJ8SnP^(9=av!lM%NAOS_ex3HX)4}vQ+4tA>ebhdA?^;3Z z>FD##)&~WD(Z*J-3Nu>u;MD4@Mh*9+4rNUV=C#kS2Gf-n4iyr0h^wz0Pu8o%Zyr~1 zBlvT~aKV~qZ91?zC#U!L6`ek}H;0dyb`EmyS8UfbShD$Daj5V}-AHr^=eN>_n~Uzm zbD^sDiRx`<-dm3#cOq=9Tk!_BE7jemYlEJt9@b2JzG1706tLMV_-N+2gSVaHfgJil z-b=ZYMjw3J3UqFI=MOK5s=}P!GgM?|d+5@doJWb4bMcvtD*OouiJYfb3suJa0@d=1cFRiKFH^nw#OaLTs)Us4Yf0f%0%&G@>i&_3wZu%<$I95? zC}?fepEVz&>TX3)qdkV=W@nd7?ulZbXc*et|7K`|7gl|Gqz^y&F1av~wy~)|2GhS) z-qCynwN|CowLe#u*&M_A|v+R#g_#@5Gm)fqk z>o(LayY&KV8?IHl57FB-jGXf9%^u$P$kgnm$0v`$xSaC~)s%X5-JNTof9#<+RY-Df&UKs!0iyXIwdau=ciu9Wy(^ zKdv^3-0fjtdKoW;S=ZD^^Ry}k+Ok5Ktj;eE`95e~M3cXPOZk-J^LOpWyPjF#Z(JT_ zLr$he&#O(`zNEa(sPpZ*x+*i*^C=^gB{NwwtiVavi~a9Ua8CA+2TEOID1oTu0W#%=lo#r z*1`D|m@MrUh zp(NNME)o1K5+h*HMH7J^3Fbn!hi>Qa04PQmql<)_hq8jvFhgmm0gu5XI+|I0g85MMFO06v|^;tE(C zHdKU3^Wp>vNH7?vhyER30GCYu4$tO)V*%s?5lZ7CP`XG&Kmg)L55B-W7zFti(0}#d zJApSt2uFa=3F6TK^I(82Q2h~tLI3X04dVGPro*5k0Dm9=H06VM9Qp?+Yc^j%W77c<6bP=% z0&#G3JPM0M5#Rt0pusUX9374au=;Q$;N_(Ug6R`*`aeKWcr36hY5qS(C4yprQ2I1I z91VqK!qI3w6dXfG;ot;)CKIj)V9`th4M!v3=!;McI?;l|3!s7JWChT?0R)%ry{Hfo zPBgK%Cc)6U$bTgE{xks-bRfa(SnQzCe-uuv0AQzpCSntX!=lkxJscLVkHcWmdjA;h z0(g9|6GfOPq^=%jQ6nk~5ljXomL}>`5MWUb=0e=g184#c&xynFC&5G^K}DY5)nsrx zF=zss8BG9yphz^9h{O?5C?^zwh$IkEcx@z_i2T8x!(cJP{x@sU=7Ab~Ex8qo53V1! zDEhjib^?K4&%U1evlh1!6uP)6h&1}w6!^4YfUy`Si1k%P_o1=90dRVJYuCT!tpCyq z07DOj2lNPVeIydB9|4Vnd(n^poWP{(gVcgW#nXO9=X02X5E>6K@dkMWxdPjBkt?Xi zVxcsDwhr+DL{$I@gClY9|0E3YEn$RcX8fJ80pdS6F<3PCVaR}fUuEF%0%sxO`!M{* znP}|%Kfb=z;{S045c=05|BByVbp4|1Uor5njDL04FS`B}1OLkSS9krN(Ix%Q;}pOK z?}9?WhoxL+JQ;k@TIywMX$H9>dhb!Ai2iI{&b4yoLm;x1qC-qx!zLOON(rpV=28Pv zD^@LEowd2-9t0vmwKg+x3T^u<1;rjht~6%7Rv0~-G1^frg$$2bB1R19ClNoaE!{3A zesBAk8@3l3%rEE~9{9`XH>k_;v#-qN2Nu*~V5iP+buQ3IhKbqfYE|=MVa?2oeSFK& zvT1XP<57KKvY$+f^HL_GYJ^*ymyvIz@r6kthq|7@_v7X{iquhUldYIfPHT_wPlZ^k zLaSG&X}hW18*Oa z^gX@u`rMN6>13G9iwsV8CaY2wJoF?p3+26G}!^yYE7EPaVq(Y>l>4rv4d-s1))f-|qIJP=}3M(I2;5 zDylw<5iQkKA0odaDl$_3X(hW@JUT0DD=+`qn=@_B6`^M;+W(S`c{n?}japhN#DBmF z!AGsu6A#x+?{N2Ge6T9c7S8M@y%)@Pchg&f$S)XuMn*=t#Ce)x)$rEwH2d3KYaX?? zx4+MW-8y47k6h^{RVpklF4lYzj$Q~gIR2W_Q)XXssCk7)c0NUB&a=)7U)@(6P`1&? z5UbErRwbmi7vW9*2;yc6^A~KZj+nNt-BD?q8iJaA3ElY6=ACK;seGoRM`eK((MwKT zI6G?)+10HUX|EhJ*KclUF@H39~ukTt+Cgt$?u;?Z|xs-~T`1at(eBS!@X6x@iNVd8`U)*S&CG67Qcb=L&kvnet z>6t6Z@FI4(3enP0`ot!?hSiZrTSFL4f#Fr>^~;|kV8<*g-%Q6e3SwuS2ab_zTBab_ zVFk*)ZSbehg`ST}jnX+@JvA4;3=Y~v!VC=!p_cneBz4F$j0_WRQa&U89!EZ;=?@tl z9py$vrKfcTbq1GJQ!_?`)<}4;%hClc7@4luO$BKQR7yTY(q}=R5)xpjn=_mF^nF1%f(->jmdq~>MF#{CN52Cq}-4@O8H`Rp(5_l^Vie0 z-GODDMFA-yG1B@1=e+%&%~FReZzw#?U2vGYb91&l%PYbElUS@c(Wt`1f21ep`U9!x z3l|hRV)$dFBY9mT2YRdeuF1W1=5KjDBz{==&eHVE%#qo<5zocQ_g+c4MBd*W*D3`0 z07(H!0O{!78yWpdN|E~H#3DgL_Xyj@!kOqUcobxkK5KkPTr&ZjJ`ij39cDL8JrDj5 DU#Z?a literal 0 HcmV?d00001 diff --git a/client/src/main/resources/textures/world/sun.png b/client/src/main/resources/textures/world/sun.png index 08de644b7c67d6355d3e0e7d547db3825f585248..25784d1168f2a91f6859ba7a56d6dae4ee6b06d3 100755 GIT binary patch literal 5691 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 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);