1
0
Fork 0

class cleanup

This commit is contained in:
Sen 2025-09-07 10:20:32 +02:00
parent ca97bf2e18
commit 6c34d24b8c
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
27 changed files with 132 additions and 129 deletions

View file

@ -173,7 +173,6 @@ import common.tileentity.TileEntity;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.BoundingBox; import common.util.BoundingBox;
import common.util.CharValidator; import common.util.CharValidator;
import common.util.ChunkPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.HitPosition; import common.util.HitPosition;
import common.util.IntHashMap; import common.util.IntHashMap;
@ -577,13 +576,13 @@ public class Client implements IThreadListener {
private IntHashMap<Entity> entityIds; private IntHashMap<Entity> entityIds;
@Variable(name = "chunk_view_distance", category = CVarCategory.RENDER, min = 2, max = 64, callback = DistanceFunction.class, display = "Sichtweite", unit = "Chunks") @Variable(name = "chunk_view_distance", category = CVarCategory.RENDER, min = 2, max = 32, callback = DistanceFunction.class, display = "Sichtweite", unit = "Chunks")
public int renderDistance = 8; public int renderDistance = 8;
@Variable(name = "chunk_build_time", category = CVarCategory.RENDER, min = 1, max = 100, display = "Zeit für Chunk-Bau", unit = "ms") @Variable(name = "chunk_build_time", category = CVarCategory.RENDER, min = 1, max = 100, display = "Zeit für Chunk-Bau", unit = "ms")
public int maxBuildTime = 8; public int maxBuildTime = 8;
@Variable(name = "chunk_light_updates", category = CVarCategory.RENDER, min = 0, max = 10000, display = "Licht-Updates / Frame") @Variable(name = "chunk_light_updates", category = CVarCategory.RENDER, min = 0, max = 10000, display = "Licht-Updates / Frame")
private int lightUpdates = 150; private int lightUpdates = 150;
@Variable(name = "chunk_light_range", category = CVarCategory.RENDER, min = 5, max = 1024, display = "Radius Licht-Updates") @Variable(name = "chunk_light_range", category = CVarCategory.RENDER, min = 5, max = 512, display = "Radius Licht-Updates")
private int lightRange = 32; private int lightRange = 32;
@Variable(name = "draw_fov", category = CVarCategory.RENDER, min = 20.0f, max = 160.0f, display = "Sichtfeld (FOV)", unit = "°", precision = 1) @Variable(name = "draw_fov", category = CVarCategory.RENDER, min = 20.0f, max = 160.0f, display = "Sichtfeld (FOV)", unit = "°", precision = 1)
public float fov = 70.0f; public float fov = 70.0f;

View file

@ -720,7 +720,7 @@ public class ClientPlayer implements IClientPlayer
for (SPacketMultiBlockChange.BlockUpdateData update : packetIn.getChangedBlocks()) for (SPacketMultiBlockChange.BlockUpdateData update : packetIn.getChangedBlocks())
{ {
this.world.setState(SPacketMultiBlockChange.getPos(packetIn.getChunkPos(), update.getRawPos()), update.getBlockState()); this.world.setState(SPacketMultiBlockChange.getPos(packetIn.getChunkPosX(), packetIn.getChunkPosZ(), update.getRawPos()), update.getBlockState());
} }
} }

View file

@ -34,6 +34,7 @@ import client.renderer.texture.Sprite;
import client.renderer.texture.TextureManager; import client.renderer.texture.TextureManager;
import client.renderer.texture.TextureMap; import client.renderer.texture.TextureMap;
import client.renderer.tileentity.SpecialRenderer; import client.renderer.tileentity.SpecialRenderer;
import client.util.Vector3f;
import client.world.ChunkClient; import client.world.ChunkClient;
import common.block.Block; import common.block.Block;
import common.block.Material; import common.block.Material;
@ -73,7 +74,6 @@ import common.util.ParticleType;
import common.util.Util; import common.util.Util;
import common.util.Vec3; import common.util.Vec3;
import common.util.Vec3i; import common.util.Vec3i;
import common.util.Vector3f;
import common.world.IBlockAccess; import common.world.IBlockAccess;
import common.world.IWorldAccess; import common.world.IWorldAccess;
import common.world.State; import common.world.State;

View file

@ -8,12 +8,12 @@ import java.nio.FloatBuffer;
import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL20;
import client.util.FileUtils; import client.util.FileUtils;
import client.util.Matrix4f;
import client.util.Vector3f;
import client.util.Vector4f;
import common.dimension.Shader; import common.dimension.Shader;
import common.log.Log; import common.log.Log;
import common.util.Matrix4f;
import common.util.Vec3; import common.util.Vec3;
import common.util.Vector3f;
import common.util.Vector4f;
public class ShaderContext { public class ShaderContext {
private static final FloatBuffer BUFFER = ByteBuffer.allocateDirect(16 << 2).order(ByteOrder.nativeOrder()).asFloatBuffer(); private static final FloatBuffer BUFFER = ByteBuffer.allocateDirect(16 << 2).order(ByteOrder.nativeOrder()).asFloatBuffer();

View file

@ -2,8 +2,8 @@ package client.renderer.blockmodel;
import java.util.Map; import java.util.Map;
import client.util.Vector3f;
import common.util.Facing; import common.util.Facing;
import common.util.Vector3f;
public class BlockPart public class BlockPart
{ {

View file

@ -1,7 +1,7 @@
package client.renderer.blockmodel; package client.renderer.blockmodel;
import client.util.Vector3f;
import common.util.Facing; import common.util.Facing;
import common.util.Vector3f;
public class BlockPartRotation { public class BlockPartRotation {
public final Vector3f origin; public final Vector3f origin;

View file

@ -1,13 +1,13 @@
package client.renderer.blockmodel; package client.renderer.blockmodel;
import client.renderer.texture.Sprite; import client.renderer.texture.Sprite;
import client.util.Matrix4f;
import client.util.Vector3f;
import client.util.Vector4f;
import common.model.ModelRotation; import common.model.ModelRotation;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.Matrix4f;
import common.util.Vec3i; import common.util.Vec3i;
import common.util.Vector3f;
import common.util.Vector4f;
public class FaceBakery public class FaceBakery
{ {
@ -64,6 +64,10 @@ public class FaceBakery
private static final float SCALE_ROTATION_22_5 = 1.0F / (float)Math.cos(0.39269909262657166D) - 1.0F; private static final float SCALE_ROTATION_22_5 = 1.0F / (float)Math.cos(0.39269909262657166D) - 1.0F;
private static final float SCALE_ROTATION_GENERAL = 1.0F / (float)Math.cos((Math.PI / 4D)) - 1.0F; private static final float SCALE_ROTATION_GENERAL = 1.0F / (float)Math.cos((Math.PI / 4D)) - 1.0F;
private static final Matrix4f[] MATRICES = new Matrix4f[ModelRotation.values().length];
private static final int[] QUARTERS_X = new int[ModelRotation.values().length];
private static final int[] QUARTERS_Y = new int[ModelRotation.values().length];
static { static {
FACINGS[Constants.DOWN_INDEX] = EnumFaceDirection.DOWN; FACINGS[Constants.DOWN_INDEX] = EnumFaceDirection.DOWN;
FACINGS[Constants.UP_INDEX] = EnumFaceDirection.UP; FACINGS[Constants.UP_INDEX] = EnumFaceDirection.UP;
@ -71,6 +75,64 @@ public class FaceBakery
FACINGS[Constants.SOUTH_INDEX] = EnumFaceDirection.SOUTH; FACINGS[Constants.SOUTH_INDEX] = EnumFaceDirection.SOUTH;
FACINGS[Constants.WEST_INDEX] = EnumFaceDirection.WEST; FACINGS[Constants.WEST_INDEX] = EnumFaceDirection.WEST;
FACINGS[Constants.EAST_INDEX] = EnumFaceDirection.EAST; FACINGS[Constants.EAST_INDEX] = EnumFaceDirection.EAST;
for(int z = 0; z < ModelRotation.values().length; z++) {
ModelRotation rot = ModelRotation.values()[z];
MATRICES[z] = new Matrix4f();
Matrix4f mat1 = new Matrix4f();
mat1.setIdentity();
Matrix4f.rotate((float)(-rot.rotX) * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), mat1, mat1);
QUARTERS_X[z] = ExtMath.absi(rot.rotX / 90);
Matrix4f mat2 = new Matrix4f();
mat2.setIdentity();
Matrix4f.rotate((float)(-rot.rotY) * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), mat2, mat2);
QUARTERS_Y[z] = ExtMath.absi(rot.rotY / 90);
Matrix4f.mul(mat2, mat1, MATRICES[z]);
}
}
private static Matrix4f getMatrix4d(ModelRotation rot) {
return MATRICES[rot.ordinal()];
}
public static Facing rotateFace(ModelRotation rot, Facing face) {
Facing dir = face;
int qx = QUARTERS_X[rot.ordinal()];
int qy = QUARTERS_Y[rot.ordinal()];
for(int i = 0; i < qx; ++i) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() != Facing.Axis.Y) {
for(int j = 0; j < qy; ++j) {
dir = dir.rotateAround(Facing.Axis.Y);
}
}
return dir;
}
private static int rotateVertex(ModelRotation rot, Facing face, int index) {
int idx = index;
int qx = QUARTERS_X[rot.ordinal()];
int qy = QUARTERS_Y[rot.ordinal()];
if(face.getAxis() == Facing.Axis.X) {
idx = (index + qx) % 4;
}
Facing dir = face;
for(int j = 0; j < qx; ++j) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() == Facing.Axis.Y) {
idx = (idx + qy) % 4;
}
return idx;
} }
public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, Sprite sprite, Facing facing, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, Sprite sprite, Facing facing, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade)
@ -147,7 +209,7 @@ public class FaceBakery
private void fillVertexData(int[] faceData, int vertexIndex, Facing facing, BlockPartFace partFace, float[] p_178402_5_, Sprite sprite, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) private void fillVertexData(int[] faceData, int vertexIndex, Facing facing, BlockPartFace partFace, float[] p_178402_5_, Sprite sprite, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade)
{ {
Facing enumfacing = modelRotationIn.rotateFace(facing); Facing enumfacing = rotateFace(modelRotationIn, facing);
int color = shade ? getFaceShadeColor(enumfacing) : 0xffffffff; int color = shade ? getFaceShadeColor(enumfacing) : 0xffffffff;
VertexInformation enumfacedirection$vertexinformation = EnumFaceDirection.getFacing(facing).getVertexInformation(vertexIndex); VertexInformation enumfacedirection$vertexinformation = EnumFaceDirection.getFacing(facing).getVertexInformation(vertexIndex);
Vector3f vector3f = new Vector3f(p_178402_5_[enumfacedirection$vertexinformation.xIndex], p_178402_5_[enumfacedirection$vertexinformation.yIndex], p_178402_5_[enumfacedirection$vertexinformation.zIndex]); Vector3f vector3f = new Vector3f(p_178402_5_[enumfacedirection$vertexinformation.xIndex], p_178402_5_[enumfacedirection$vertexinformation.yIndex], p_178402_5_[enumfacedirection$vertexinformation.zIndex]);
@ -221,8 +283,8 @@ public class FaceBakery
} }
else else
{ {
this.rotateScale(position, new Vector3f(0.5F, 0.5F, 0.5F), modelRotationIn.getMatrix4d(), new Vector3f(1.0F, 1.0F, 1.0F)); this.rotateScale(position, new Vector3f(0.5F, 0.5F, 0.5F), getMatrix4d(modelRotationIn), new Vector3f(1.0F, 1.0F, 1.0F));
return modelRotationIn.rotateVertex(facing, vertexIndex); return rotateVertex(modelRotationIn, facing, vertexIndex);
} }
} }

View file

@ -233,7 +233,7 @@ public abstract class ModelBakery
if (face.cull == null) if (face.cull == null)
builder.addGeneralQuad(faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade)); builder.addGeneralQuad(faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade));
else else
builder.addFaceQuad(modelRotationIn.rotateFace(face.cull), faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade)); builder.addFaceQuad(FaceBakery.rotateFace(modelRotationIn, face.cull), faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade));
} }
} }
return builder.makeBakedModel(); return builder.makeBakedModel();

View file

@ -3,13 +3,13 @@ package client.renderer.blockmodel;
import java.util.List; import java.util.List;
import client.renderer.texture.TextureMap; import client.renderer.texture.TextureMap;
import client.util.Vector3f;
import common.collect.Lists; import common.collect.Lists;
import common.collect.Maps; import common.collect.Maps;
import common.model.Model; import common.model.Model;
import common.model.ModelRotation; import common.model.ModelRotation;
import common.model.GuiPosition; import common.model.GuiPosition;
import common.util.Facing; import common.util.Facing;
import common.util.Vector3f;
public class ModelBlock extends Model { public class ModelBlock extends Model {
private final List<BlockPart> elements; private final List<BlockPart> elements;

View file

@ -8,11 +8,11 @@ import client.renderer.model.ModelBox;
import client.renderer.texture.Sprite; import client.renderer.texture.Sprite;
import client.renderer.texture.TextureMap; import client.renderer.texture.TextureMap;
import client.renderer.texture.TextureUtil; import client.renderer.texture.TextureUtil;
import client.util.Vector3f;
import common.collect.Lists; import common.collect.Lists;
import common.collect.Maps; import common.collect.Maps;
import common.log.Log; import common.log.Log;
import common.util.Facing; import common.util.Facing;
import common.util.Vector3f;
public abstract class ModelGenerator { public abstract class ModelGenerator {
public static List<ModelBox> bakeModel(String textureLocation, int tx, int ty, int tw, int th, float x, float y, float z, int w, int h, int d) public static List<ModelBox> bakeModel(String textureLocation, int tx, int ty, int tw, int th, float x, float y, float z, int w, int h, int d)

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package common.util; package client.util;
import java.io.Serializable; import java.io.Serializable;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package common.util; package client.util;
import java.io.Serializable; import java.io.Serializable;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package common.util; package client.util;
import java.io.Serializable; import java.io.Serializable;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package common.util; package client.util;
import java.io.Serializable; import java.io.Serializable;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;

View file

@ -3,7 +3,6 @@ package client.world;
import common.block.Block; import common.block.Block;
import common.init.Blocks; import common.init.Blocks;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.util.Facing;
import common.util.LocalPos; import common.util.LocalPos;
import common.world.BlockArray; import common.world.BlockArray;
import common.world.Chunk; import common.world.Chunk;

View file

@ -1,9 +1,6 @@
package common.model; package common.model;
import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.Matrix4f;
import common.util.Vector3f;
public enum ModelRotation { public enum ModelRotation {
X0_Y0(0, 0), X0_Y0(0, 0),
@ -22,62 +19,13 @@ public enum ModelRotation {
X270_Y90(270, 90), X270_Y90(270, 90),
X270_Y180(270, 180), X270_Y180(270, 180),
X270_Y270(270, 270); X270_Y270(270, 270);
private final Matrix4f matrix4d; public final int rotX;
private final int quartersX; public final int rotY;
private final int quartersY;
private ModelRotation(int x, int y) { private ModelRotation(int x, int y) {
this.matrix4d = new Matrix4f(); this.rotX = x;
Matrix4f mat1 = new Matrix4f(); this.rotY = y;
mat1.setIdentity();
Matrix4f.rotate((float)(-x) * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), mat1, mat1);
this.quartersX = ExtMath.absi(x / 90);
Matrix4f mat2 = new Matrix4f();
mat2.setIdentity();
Matrix4f.rotate((float)(-y) * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), mat2, mat2);
this.quartersY = ExtMath.absi(y / 90);
Matrix4f.mul(mat2, mat1, this.matrix4d);
}
public Matrix4f getMatrix4d() {
return this.matrix4d;
}
public Facing rotateFace(Facing face) {
Facing dir = face;
for(int i = 0; i < this.quartersX; ++i) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() != Facing.Axis.Y) {
for(int j = 0; j < this.quartersY; ++j) {
dir = dir.rotateAround(Facing.Axis.Y);
}
}
return dir;
}
public int rotateVertex(Facing face, int index) {
int idx = index;
if(face.getAxis() == Facing.Axis.X) {
idx = (index + this.quartersX) % 4;
}
Facing dir = face;
for(int j = 0; j < this.quartersX; ++j) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() == Facing.Axis.Y) {
idx = (idx + this.quartersY) % 4;
}
return idx;
} }
public static ModelRotation getNorthRot(Facing face) { public static ModelRotation getNorthRot(Facing face) {

View file

@ -25,7 +25,6 @@ import common.packet.CPacketSign;
import common.packet.CPacketSkin; import common.packet.CPacketSkin;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.CharValidator; import common.util.CharValidator;
import common.util.ChunkPos;
import common.util.PortalType; import common.util.PortalType;
public interface IPlayer extends NetHandler { public interface IPlayer extends NetHandler {
@ -91,7 +90,7 @@ public interface IPlayer extends NetHandler {
void setSelectMode(); void setSelectMode();
void sendPacket(Packet packet); void sendPacket(Packet packet);
void setPlayerLocation(double x, double y, double z, float yaw, float pitch); void setPlayerLocation(double x, double y, double z, float yaw, float pitch);
List<ChunkPos> getLoadedChunkList(); List getLoadedChunkList();
double getManagedX(); double getManagedX();
double getManagedZ(); double getManagedZ();
void setManagedPos(double x, double z); void setManagedPos(double x, double z);

View file

@ -7,25 +7,26 @@ import common.network.IClientPlayer;
import common.network.Packet; import common.network.Packet;
import common.network.PacketBuffer; import common.network.PacketBuffer;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.ChunkPos;
import common.world.State; import common.world.State;
public class SPacketMultiBlockChange implements Packet<IClientPlayer> public class SPacketMultiBlockChange implements Packet<IClientPlayer>
{ {
private ChunkPos chunkPosCoord; private int chunkPosCoordX;
private int chunkPosCoordZ;
private SPacketMultiBlockChange.BlockUpdateData[] changedBlocks; private SPacketMultiBlockChange.BlockUpdateData[] changedBlocks;
public static LocalPos getPos(ChunkPos pos, long position) public static LocalPos getPos(int posX, int posZ, long position)
{ {
return new LocalPos(new LocalPos((pos.x << 4) + (int)(position >> 36 & 15L), (int)(position & 4294967295L), (pos.z << 4) + (int)(position >> 32 & 15L))); return new LocalPos(new LocalPos((posX << 4) + (int)(position >> 36 & 15L), (int)(position & 4294967295L), (posZ << 4) + (int)(position >> 32 & 15L)));
} }
public SPacketMultiBlockChange() public SPacketMultiBlockChange()
{ {
} }
public SPacketMultiBlockChange(ChunkPos pos, SPacketMultiBlockChange.BlockUpdateData[] changes) { public SPacketMultiBlockChange(int posX, int posZ, SPacketMultiBlockChange.BlockUpdateData[] changes) {
this.chunkPosCoord = pos; this.chunkPosCoordX = posX;
this.chunkPosCoordZ = posZ;
this.changedBlocks = changes; this.changedBlocks = changes;
} }
@ -34,7 +35,8 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
*/ */
public void readPacketData(PacketBuffer buf) throws IOException public void readPacketData(PacketBuffer buf) throws IOException
{ {
this.chunkPosCoord = new ChunkPos(buf.readInt(), buf.readInt()); this.chunkPosCoordX = buf.readInt();
this.chunkPosCoordZ = buf.readInt();
this.changedBlocks = new SPacketMultiBlockChange.BlockUpdateData[buf.readVarInt()]; this.changedBlocks = new SPacketMultiBlockChange.BlockUpdateData[buf.readVarInt()];
for (int i = 0; i < this.changedBlocks.length; ++i) for (int i = 0; i < this.changedBlocks.length; ++i)
@ -48,8 +50,8 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
*/ */
public void writePacketData(PacketBuffer buf) throws IOException public void writePacketData(PacketBuffer buf) throws IOException
{ {
buf.writeInt(this.chunkPosCoord.x); buf.writeInt(this.chunkPosCoordX);
buf.writeInt(this.chunkPosCoord.z); buf.writeInt(this.chunkPosCoordZ);
buf.writeVarInt(this.changedBlocks.length); buf.writeVarInt(this.changedBlocks.length);
for (SPacketMultiBlockChange.BlockUpdateData s22packetmultiblockchange$blockupdatedata : this.changedBlocks) for (SPacketMultiBlockChange.BlockUpdateData s22packetmultiblockchange$blockupdatedata : this.changedBlocks)
@ -72,9 +74,14 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
return this.changedBlocks; return this.changedBlocks;
} }
public ChunkPos getChunkPos() public int getChunkPosX()
{ {
return this.chunkPosCoord; return this.chunkPosCoordX;
}
public int getChunkPosZ()
{
return this.chunkPosCoordZ;
} }
public static class BlockUpdateData public static class BlockUpdateData

View file

@ -265,7 +265,7 @@ public abstract class Vars {
public static int spawnMoreZombie = 25; public static int spawnMoreZombie = 25;
@Var(name = "explosionBlocksPerTick", min = 100, max = 10000000) @Var(name = "explosionBlocksPerTick", min = 100, max = 10000000)
public static int maxExplosionIters = 1000000; public static int maxExplosionIters = 1000000;
@Var(name = "viewDistance", min = 2, max = 64) @Var(name = "viewDistance", min = 2, max = 32)
public static int distance = 8; public static int distance = 8;
@Var(name = "timeFlow", min = 0) @Var(name = "timeFlow", min = 0)
public static int timeFlow = 1; public static int timeFlow = 1;

View file

@ -3,7 +3,6 @@ package common.world;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import common.block.Block; import common.block.Block;
@ -16,7 +15,6 @@ import common.block.natural.BlockSnow;
import common.block.tech.BlockAnvil; import common.block.tech.BlockAnvil;
import common.block.tech.BlockPipe; import common.block.tech.BlockPipe;
import common.collect.Lists; import common.collect.Lists;
import common.collect.Sets;
import common.dimension.DimType; import common.dimension.DimType;
import common.dimension.Dimension; import common.dimension.Dimension;
import common.entity.Entity; import common.entity.Entity;
@ -31,7 +29,6 @@ import common.tileentity.ITickable;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.BoundingBox; import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.HitPosition; import common.util.HitPosition;
@ -58,7 +55,6 @@ public abstract class World implements IWorldAccess {
public final List<EntityNPC> players = Lists.<EntityNPC>newArrayList(); public final List<EntityNPC> players = Lists.<EntityNPC>newArrayList();
public final List<Entity> effects = Lists.<Entity>newArrayList(); public final List<Entity> effects = Lists.<Entity>newArrayList();
public final IntHashMap<Entity> entityIds = new IntHashMap(); public final IntHashMap<Entity> entityIds = new IntHashMap();
protected final Set<ChunkPos> active = Sets.<ChunkPos>newHashSet();
public final Dimension dimension; public final Dimension dimension;
protected double gravity = 1.0; protected double gravity = 1.0;
@ -1158,25 +1154,6 @@ public abstract class World implements IWorldAccess {
this.temp = this.getBaseTemperature() + this.weather.getTemperature(); this.temp = this.getBaseTemperature() + this.weather.getTemperature();
} }
public Set<ChunkPos> setActiveChunks(int radius) {
this.active.clear();
for(int n = 0; n < this.players.size(); ++n) {
EntityNPC player = (EntityNPC)this.players.get(n);
int x = ExtMath.floord(player.posX / 16.0D);
int z = ExtMath.floord(player.posZ / 16.0D);
for(int cx = -radius; cx <= radius; cx++) {
for(int cz = -radius; cz <= radius; cz++) {
this.active.add(new ChunkPos(cx + x, cz + z));
}
}
}
return this.active;
}
public Set<ChunkPos> getActiveChunks() {
return this.active;
}
public float getTempOffset() { public float getTempOffset() {
return this.temp; return this.temp;
} }

View file

@ -110,7 +110,6 @@ import common.tileentity.Device;
import common.tileentity.TileEntitySign; import common.tileentity.TileEntitySign;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.BoundingBox; import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.Facing; import common.util.Facing;
import common.util.IntHashMap; import common.util.IntHashMap;
@ -134,6 +133,7 @@ import server.clipboard.RotationRegistry;
import server.clipboard.RotationValue; import server.clipboard.RotationValue;
import server.command.Executor; import server.command.Executor;
import server.init.UniverseRegistry; import server.init.UniverseRegistry;
import server.util.ChunkPos;
import server.util.Form; import server.util.Form;
import server.vars.SVars; import server.vars.SVars;
import server.world.ChunkServer; import server.world.ChunkServer;

View file

@ -1,4 +1,4 @@
package common.util; package server.util;
public class ChunkPos { public class ChunkPos {
public final int x; public final int x;

View file

@ -81,7 +81,7 @@ public abstract class SVars {
public static int spawnDungeonMobs = 4; public static int spawnDungeonMobs = 4;
@Var(name = "chunksPerTick", min = 5, max = 1024) @Var(name = "chunksPerTick", min = 5, max = 1024)
public static int chunksPerTick = 10; public static int chunksPerTick = 10;
@Var(name = "updateDistance", min = 2, max = 64) @Var(name = "updateDistance", min = 2, max = 32)
public static int updateDistance = 8; public static int updateDistance = 8;
@Var(name = "password", nonDefault = true) @Var(name = "password", nonDefault = true)

View file

@ -11,9 +11,9 @@ import common.init.Blocks;
import common.rng.Random; import common.rng.Random;
import common.rng.WeightedList; import common.rng.WeightedList;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.ChunkPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.world.World; import common.world.World;
import server.util.ChunkPos;
import server.vars.SVars; import server.vars.SVars;
import server.worldgen.RngSpawn; import server.worldgen.RngSpawn;

View file

@ -59,7 +59,6 @@ import common.tags.TagObject;
import common.tileentity.TileEntity; import common.tileentity.TileEntity;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.BoundingBox; import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.IntHashMap; import common.util.IntHashMap;
import common.util.LongHashMap; import common.util.LongHashMap;
@ -83,6 +82,7 @@ import server.init.TeleportRegistry;
import server.init.UniverseRegistry; import server.init.UniverseRegistry;
import server.network.Player; import server.network.Player;
import server.rng.PerlinGen; import server.rng.PerlinGen;
import server.util.ChunkPos;
import server.vars.SVars; import server.vars.SVars;
import server.village.VillageCollection; import server.village.VillageCollection;
import server.worldgen.ChunkPrimer; import server.worldgen.ChunkPrimer;
@ -142,6 +142,7 @@ public final class WorldServer extends AWorldServer {
private final Server server; private final Server server;
private final File chunkDir; private final File chunkDir;
private final Random grng; private final Random grng;
private final Set<ChunkPos> active = Sets.<ChunkPos>newHashSet();
private final Set<NextTickListEntry> ticks = Sets.<NextTickListEntry>newHashSet(); private final Set<NextTickListEntry> ticks = Sets.<NextTickListEntry>newHashSet();
private final TreeSet<NextTickListEntry> ticksNext = new TreeSet(); private final TreeSet<NextTickListEntry> ticksNext = new TreeSet();
private final List<NextTickListEntry> ticksNow = Lists.<NextTickListEntry>newArrayList(); private final List<NextTickListEntry> ticksNow = Lists.<NextTickListEntry>newArrayList();
@ -447,7 +448,18 @@ public final class WorldServer extends AWorldServer {
} }
protected void updateBlocks() { protected void updateBlocks() {
this.setActiveChunks(SVars.updateDistance); this.active.clear();
int radius = SVars.updateDistance;
for(int n = 0; n < this.players.size(); ++n) {
EntityNPC player = (EntityNPC)this.players.get(n);
int x = ExtMath.floord(player.posX / 16.0D);
int z = ExtMath.floord(player.posZ / 16.0D);
for(int cx = -radius; cx <= radius; cx++) {
for(int cz = -radius; cz <= radius; cz++) {
this.active.add(new ChunkPos(cx + x, cz + z));
}
}
}
int dtics = 0; int dtics = 0;
int rtics = 0; int rtics = 0;
@ -2590,12 +2602,11 @@ public final class WorldServer extends AWorldServer {
} }
private static SPacketMultiBlockChange getPacket(int amount, long[] list, ChunkServer chunk) { private static SPacketMultiBlockChange getPacket(int amount, long[] list, ChunkServer chunk) {
ChunkPos pos = new ChunkPos(chunk.xPos, chunk.zPos);
SPacketMultiBlockChange.BlockUpdateData[] changes = new SPacketMultiBlockChange.BlockUpdateData[amount]; SPacketMultiBlockChange.BlockUpdateData[] changes = new SPacketMultiBlockChange.BlockUpdateData[amount];
for(int z = 0; z < changes.length; z++) { for(int z = 0; z < changes.length; z++) {
changes[z] = new SPacketMultiBlockChange.BlockUpdateData(list[z], chunk.getState(SPacketMultiBlockChange.getPos(pos, list[z]))); changes[z] = new SPacketMultiBlockChange.BlockUpdateData(list[z], chunk.getState(SPacketMultiBlockChange.getPos(chunk.xPos, chunk.zPos, list[z])));
} }
return new SPacketMultiBlockChange(pos, changes); return new SPacketMultiBlockChange(chunk.xPos, chunk.zPos, changes);
} }
public boolean generateBigMushroom(LocalPos pos, State state, Random rand) public boolean generateBigMushroom(LocalPos pos, State state, Random rand)

View file

@ -7,9 +7,9 @@ import common.collect.Maps;
import common.rng.Random; import common.rng.Random;
import common.tags.TagObject; import common.tags.TagObject;
import common.util.LocalPos; import common.util.LocalPos;
import common.util.ChunkPos;
import common.util.LongHashMap; import common.util.LongHashMap;
import common.world.World; import common.world.World;
import server.util.ChunkPos;
import server.world.WorldServer; import server.world.WorldServer;
import server.world.WorldServer.WorldSavedData; import server.world.WorldServer.WorldSavedData;
import server.worldgen.ChunkPrimer; import server.worldgen.ChunkPrimer;

View file

@ -7,7 +7,8 @@ import common.collect.Lists;
import common.rng.Random; import common.rng.Random;
import common.tags.TagObject; import common.tags.TagObject;
import java.util.List; import java.util.List;
import common.util.ChunkPos;
import server.util.ChunkPos;
import server.world.WorldServer; import server.world.WorldServer;
public abstract class StructureStart public abstract class StructureStart