diff --git a/java/src/client/Game.java b/java/src/client/Game.java index 2dc5fe7..f528cb0 100755 --- a/java/src/client/Game.java +++ b/java/src/client/Game.java @@ -65,6 +65,7 @@ import client.renderer.chunk.RenderChunk; import client.renderer.entity.RenderItem; import client.renderer.entity.RenderManager; import client.renderer.particle.EffectRenderer; +import client.renderer.particle.EntityFirework; import client.renderer.texture.EntityTexManager; import client.renderer.texture.TextureManager; import client.renderer.texture.TextureMap; @@ -76,6 +77,7 @@ import client.window.Keysym; import client.window.Wheel; import client.window.Window; import client.window.WindowEvent; +import game.IClient; import game.biome.Biome; import game.block.Block; import game.collect.Lists; @@ -87,6 +89,7 @@ import game.entity.animal.EntityHorse; import game.entity.npc.Energy; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; +import game.entity.types.IEntityFX; import game.future.Futures; import game.future.ListenableFuture; import game.future.ListenableFutureTask; @@ -106,6 +109,7 @@ import game.log.Log; import game.log.LogLevel; import game.log.Message; import game.material.Material; +import game.nbt.NBTTagCompound; import game.network.IThreadListener; import game.network.NetConnection; import game.network.NetHandler.ThreadQuickExitException; @@ -122,6 +126,7 @@ import game.properties.IProperty; import game.rng.Random; import game.sound.EventType; import game.sound.PositionedSound; +import game.sound.Sound; import game.util.CharValidator; import game.util.ExtMath; import game.util.FileUtils; @@ -175,7 +180,7 @@ import game.world.WorldClient; [[oder einfach einen Toaster mit nem LCD und Maus]] */ -public class Game implements IThreadListener { +public class Game implements IThreadListener, IClient { public static class SyncFunction implements IntFunction { public void apply(IntVar cv, int value) { Game.getGame().sync(value); @@ -3275,4 +3280,50 @@ public class Game implements IThreadListener { } }, "Zenity listener").start(); } + + public void makeFireworks(double x, double y, double z, double motionX, double motionY, double motionZ, NBTTagCompound compund) + { + this.effectRenderer.addEffect(new EntityFirework.StarterFX(this.theWorld, x, y, z, motionX, motionY, motionZ, this.effectRenderer, compund)); + } + + public int getRenderDistance() { + return this.renderDistance; + } + + public float getGravity() { + return this.gravity; + } + + public int getTimeFactor() { + return this.timeFactor; + } + + public boolean hasDayCycle() { + return this.dayCycle; + } + + public void playSound(Sound sound) { + this.soundManager.playSound(sound); + } + + public EntityNPC getPlayer() { + return this.thePlayer; + } + + public IEntityFX spawnEffectParticle(int particleId, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, + int[] parameters) { + return this.effectRenderer.spawnEffectParticle(particleId, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + + public void addBlockDestroyEffects(BlockPos pos, State state) { + this.effectRenderer.addBlockDestroyEffects(pos, state); + } + + public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) { + this.renderGlobal.sendBlockBreakProgress(breakerId, pos, progress); + } + + public void markBlocksForUpdate(int x1, int y1, int z1, int x2, int y2, int z2) { + this.renderGlobal.markBlocksForUpdate(x1, y1, z1, x2, y2, z2); + } } diff --git a/java/src/client/network/ClientPlayer.java b/java/src/client/network/ClientPlayer.java index a94a2b3..78cc391 100755 --- a/java/src/client/network/ClientPlayer.java +++ b/java/src/client/network/ClientPlayer.java @@ -184,7 +184,7 @@ public class ClientPlayer extends NetHandler implements IClientPlayer NetHandler.checkThread(packetIn, this, this.gameController); this.gameController.charEditor = packetIn.isInEditor(); this.gameController.controller = new PlayerController(this.gameController, this); - this.clientWorldController = new WorldClient(this.gameController.debugWorld, packetIn.getDimension()); + this.clientWorldController = new WorldClient(this.gameController, this.gameController.debugWorld, packetIn.getDimension()); // this.gameController.gameSettings.difficulty = packetIn.getDifficulty(); this.gameController.loadWorld(this.clientWorldController, packetIn.getEntityType()); // this.gameController.thePlayer.dimension = this.clientWorldController.dimension.getDimensionId(); @@ -1046,7 +1046,7 @@ public class ClientPlayer extends NetHandler implements IClientPlayer // this.travelSound = "portal.travel"; // } // Scoreboard scoreboard = this.clientWorldController.getScoreboard(); - this.clientWorldController = new WorldClient(this.gameController.debugWorld, dim); + this.clientWorldController = new WorldClient(this.gameController, this.gameController.debugWorld, dim); // this.clientWorldController.setWorldScoreboard(scoreboard); this.gameController.loadWorld(this.clientWorldController, packetIn.getEntityType()); // this.gameController.thePlayer.dimension = dim.getDimensionId(); diff --git a/java/src/client/renderer/particle/EntityFX.java b/java/src/client/renderer/particle/EntityFX.java index c9a61f2..78f154d 100755 --- a/java/src/client/renderer/particle/EntityFX.java +++ b/java/src/client/renderer/particle/EntityFX.java @@ -5,11 +5,12 @@ import client.renderer.RenderBuffer; import client.renderer.texture.TextureAtlasSprite; import game.entity.Entity; import game.entity.EntityType; +import game.entity.types.IEntityFX; import game.nbt.NBTTagCompound; import game.util.ExtMath; import game.world.World; -public class EntityFX extends Entity +public class EntityFX extends Entity implements IEntityFX { protected int particleTextureIndexX; protected int particleTextureIndexY; diff --git a/java/src/game/IClient.java b/java/src/game/IClient.java new file mode 100644 index 0000000..9bec92c --- /dev/null +++ b/java/src/game/IClient.java @@ -0,0 +1,24 @@ +package game; + +import game.entity.Entity; +import game.entity.npc.EntityNPC; +import game.entity.types.IEntityFX; +import game.nbt.NBTTagCompound; +import game.sound.Sound; +import game.world.BlockPos; +import game.world.State; + +public interface IClient { + int getRenderDistance(); + float getGravity(); + int getTimeFactor(); + boolean hasDayCycle(); + void playSound(Sound sound); + EntityNPC getPlayer(); + Entity getRenderViewEntity(); + void makeFireworks(double x, double y, double z, double motionX, double motionY, double motionZ, NBTTagCompound compund); + IEntityFX spawnEffectParticle(int particleId, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int[] parameters); + void addBlockDestroyEffects(BlockPos pos, State state); + void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress); + void markBlocksForUpdate(int x1, int y1, int z1, int x2, int y2, int z2); +} diff --git a/java/src/game/IServer.java b/java/src/game/IServer.java index 27dd5dd..bae8d70 100644 --- a/java/src/game/IServer.java +++ b/java/src/game/IServer.java @@ -14,20 +14,12 @@ import game.world.WorldServer; public interface IServer { List getIPlayers(); - void sendPacket(Packet packet); - void sendPacket(Packet packet, int dimension); - void sendNear(double x, double y, double z, double radius, int dimension, Packet packet); - void sendNearExcept(EntityNPC except, double x, double y, double z, double radius, int dimension, Packet packet); - Map getWarps(); - List getWorlds(); - WorldServer getWorld(int dimension); - void placeInDimension(Entity entity, WorldServer oldWorld, WorldServer world, BlockPos pos, PortalType portal); } \ No newline at end of file diff --git a/java/src/game/entity/types/IEntityFX.java b/java/src/game/entity/types/IEntityFX.java new file mode 100644 index 0000000..26b274f --- /dev/null +++ b/java/src/game/entity/types/IEntityFX.java @@ -0,0 +1,11 @@ +package game.entity.types; + +import client.renderer.particle.EntityFX; + +public interface IEntityFX { + + EntityFX multiplyVelocity(float multiplier); + + void setRBGColorF(float particleRedIn, float particleGreenIn, float particleBlueIn); + +} \ No newline at end of file diff --git a/java/src/game/world/WorldClient.java b/java/src/game/world/WorldClient.java index 6378f1f..e03a9cd 100755 --- a/java/src/game/world/WorldClient.java +++ b/java/src/game/world/WorldClient.java @@ -3,9 +3,7 @@ package game.world; import java.util.List; import java.util.Set; -import client.Game; -import client.renderer.particle.EntityFX; -import client.renderer.particle.EntityFirework; +import game.IClient; import game.biome.Biome; import game.block.Block; import game.collect.Lists; @@ -14,6 +12,7 @@ import game.dimension.Dimension; import game.entity.Entity; import game.entity.item.EntityCart; import game.entity.npc.EntityNPC; +import game.entity.types.IEntityFX; import game.init.BlockRegistry; import game.init.ItemRegistry; import game.init.Items; @@ -34,7 +33,7 @@ public class WorldClient extends World { private static final int DISPLAY_RANGE = 16; - private final Game gm = Game.getGame(); + private final IClient gm; private final Set entityList = Sets.newHashSet(); private final Set spawnQueue = Sets.newHashSet(); private final Set previousActive = Sets.newHashSet(); @@ -45,14 +44,14 @@ public class WorldClient extends World protected int lastLightning; protected Vec3 lightColor = new Vec3(0xffffff); - public WorldClient(boolean debug, Dimension dim) + public WorldClient(IClient gm, boolean debug, Dimension dim) { super(dim, true, debug); -// this.gm = profiler; + this.gm = gm; this.calculateInitialSkylight(); this.calculateInitialWeather(); - this.setGravity(this.gm.gravity); - this.setTimeFactor(this.gm.timeFactor); + this.setGravity(this.gm.getGravity()); + this.setTimeFactor(this.gm.getTimeFactor()); // this.setDifficulty(this.gm.difficulty); } @@ -60,7 +59,7 @@ public class WorldClient extends World { // this.info.tick(); - if (this.gm.dayCycle) + if (this.gm.hasDayCycle()) { this.daytime += this.timeFactor; } @@ -89,7 +88,7 @@ public class WorldClient extends World protected void updateBlocks() { - this.setActivePlayerChunksAndCheckLight(this.gm.renderDistance); + this.setActivePlayerChunksAndCheckLight(this.gm.getRenderDistance()); this.previousActive.retainAll(this.active); if (this.previousActive.size() == this.active.size()) @@ -157,7 +156,7 @@ public class WorldClient extends World } else if (entityIn instanceof EntityCart) { - this.gm.getSoundManager().playSound(new MovingSoundMinecart((EntityCart)entityIn)); + this.gm.playSound(new MovingSoundMinecart((EntityCart)entityIn)); } return flag; @@ -217,7 +216,7 @@ public class WorldClient extends World public Entity getEntityByID(int id) { - return (Entity)(id == this.gm.thePlayer.getId() ? this.gm.thePlayer : super.getEntityByID(id)); + return (Entity)(id == this.gm.getPlayer().getId() ? this.gm.getPlayer() : super.getEntityByID(id)); } public Entity removeEntityFromWorld(int entityID) @@ -335,13 +334,13 @@ public class WorldClient extends World // } // else // { - this.gm.getSoundManager().playSound(positionedsoundrecord); + this.gm.playSound(positionedsoundrecord); // } } public void makeFireworks(double x, double y, double z, double motionX, double motionY, double motionZ, NBTTagCompound compund) { - this.gm.effectRenderer.addEffect(new EntityFirework.StarterFX(this, x, y, z, motionX, motionY, motionZ, this.gm.effectRenderer, compund)); + this.gm.makeFireworks(x, y, z, motionX, motionY, motionZ, compund); } public Chunk getChunk(int x, int z) @@ -370,9 +369,9 @@ public class WorldClient extends World this.spawnEntityFX(particleType, particleType.getShouldIgnoreRange(), xCoord, yCoord, zCoord, xOffset, yOffset, zOffset, data); } - public EntityFX spawnEntityFX(ParticleType particle, boolean ignoreRange, double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int[] parameters) + public IEntityFX spawnEntityFX(ParticleType particle, boolean ignoreRange, double xCoord, double yCoord, double zCoord, double xOffset, double yOffset, double zOffset, int[] parameters) { - if (this.gm != null && this.gm.getRenderViewEntity() != null && this.gm.effectRenderer != null) + if (this.gm.getRenderViewEntity() != null) { int particleID = particle.getParticleID(); // int i = this.gm.particleSetting; @@ -388,18 +387,17 @@ public class WorldClient extends World if (ignoreRange) { - return this.gm.effectRenderer.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xOffset, yOffset, zOffset, parameters); + return this.gm.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xOffset, yOffset, zOffset, parameters); } else { double d3 = 16.0D; - return d0 * d0 + d1 * d1 + d2 * d2 > 256.0D ? null : (/* i > 1 ? null : */ this.gm.effectRenderer.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xOffset, yOffset, zOffset, parameters)); + if(d0 * d0 + d1 * d1 + d2 * d2 > 256.0D) + return null; + return this.gm.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xOffset, yOffset, zOffset, parameters); } } - else - { - return null; - } + return null; } // public void broadcastSound(int soundID, BlockPos pos, int data) @@ -583,10 +581,10 @@ public class WorldClient extends World if (block.getMaterial() != Material.air) { - this.gm.getSoundManager().playSound(new PositionedSound(block.sound.getBreakSound(), 1.0F, /* block.sound.getFrequency() * 0.8F, */ (float)blockPosIn.getX() + 0.5F, (float)blockPosIn.getY() + 0.5F, (float)blockPosIn.getZ() + 0.5F)); + this.gm.playSound(new PositionedSound(block.sound.getBreakSound(), 1.0F, /* block.sound.getFrequency() * 0.8F, */ (float)blockPosIn.getX() + 0.5F, (float)blockPosIn.getY() + 0.5F, (float)blockPosIn.getZ() + 0.5F)); } - this.gm.effectRenderer.addBlockDestroyEffects(blockPosIn, block.getStateFromMeta(data >> 12 & 255)); + this.gm.addBlockDestroyEffects(blockPosIn, block.getStateFromMeta(data >> 12 & 255)); break; case 2002: @@ -623,7 +621,7 @@ public class WorldClient extends World double d24 = Math.cos(d23) * d22; double d9 = 0.01D + this.rand.doublev() * 0.5D; double d11 = Math.sin(d23) * d22; - EntityFX entityfx = this.spawnEntityFX(enumparticletypes, enumparticletypes.getShouldIgnoreRange(), d13 + d24 * 0.1D, d14 + 0.3D, d16 + d11 * 0.1D, d24, d9, d11, new int[0]); + IEntityFX entityfx = this.spawnEntityFX(enumparticletypes, enumparticletypes.getShouldIgnoreRange(), d13 + d24 * 0.1D, d14 + 0.3D, d16 + d11 * 0.1D, d24, d9, d11, new int[0]); if (entityfx != null) { @@ -660,7 +658,7 @@ public class WorldClient extends World int i = pos.getX(); int j = pos.getY(); int k = pos.getZ(); - this.gm.renderGlobal.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1); + this.gm.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1); } public void notifyLightSet(BlockPos pos) @@ -668,17 +666,17 @@ public class WorldClient extends World int i = pos.getX(); int j = pos.getY(); int k = pos.getZ(); - this.gm.renderGlobal.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1); + this.gm.markBlocksForUpdate(i - 1, j - 1, k - 1, i + 1, j + 1, k + 1); } public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) { - this.gm.renderGlobal.markBlocksForUpdate(x1 - 1, y1 - 1, z1 - 1, x2 + 1, y2 + 1, z2 + 1); + this.gm.markBlocksForUpdate(x1 - 1, y1 - 1, z1 - 1, x2 + 1, y2 + 1, z2 + 1); } public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) { - this.gm.renderGlobal.sendBlockBreakProgress(breakerId, pos, progress); + this.gm.sendBlockBreakProgress(breakerId, pos, progress); } public float getSunBrightness(float p_72971_1_) {