refactoring: Pooled objects
This commit is contained in:
@@ -1,24 +1,18 @@
|
||||
package mc.protocol.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Location {
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private double x = 0d;
|
||||
private double y = 0d;
|
||||
private double z = 0d;
|
||||
|
||||
public int getIntX() {
|
||||
return (int) x;
|
||||
}
|
||||
public Location set(double x, double y, double z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
|
||||
public int getIntZ() {
|
||||
return (int) z;
|
||||
}
|
||||
|
||||
public Location toChunkXZ() {
|
||||
return new Location(this.getIntX() >> 4, 0d, this.getIntZ() >> 4);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
package mc.protocol.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Look {
|
||||
private float yaw;
|
||||
private float pitch;
|
||||
|
||||
public Look set(float yaw, float pitch) {
|
||||
this.yaw = yaw;
|
||||
this.pitch = pitch;
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ import mc.protocol.io.NetByteBuf;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.model.Look;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.protocol.pool.LocationObjectPool;
|
||||
import mc.protocol.pool.LookObjectPool;
|
||||
|
||||
/**
|
||||
* Клиент сообщает о движении и повороте головы Игрока.
|
||||
@@ -42,18 +44,20 @@ public class CPlayerPositionAndLookPacket implements ClientSidePacket {
|
||||
double x = netByteBuf.readDouble();
|
||||
double y = netByteBuf.readDouble();
|
||||
double z = netByteBuf.readDouble();
|
||||
this.position = new Location(x, y, z);
|
||||
this.position = LocationObjectPool.borrowObject().set(x, y, z);
|
||||
|
||||
float yaw = netByteBuf.readFloat();
|
||||
float pitch = netByteBuf.readFloat();
|
||||
this.look = new Look(yaw, pitch);
|
||||
this.look = LookObjectPool.borrowObject().set(yaw, pitch);
|
||||
|
||||
this.onGround = netByteBuf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivate() {
|
||||
LocationObjectPool.returnObject(this.position);
|
||||
this.position = null;
|
||||
LookObjectPool.returnObject(this.look);
|
||||
this.look = null;
|
||||
this.onGround = false;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import lombok.ToString;
|
||||
import mc.protocol.io.NetByteBuf;
|
||||
import mc.protocol.model.Look;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.protocol.pool.LookObjectPool;
|
||||
|
||||
/**
|
||||
* Клиент сообщает о повороте головы Игрока.
|
||||
@@ -35,13 +36,14 @@ public class PlayerLookPacket implements ClientSidePacket {
|
||||
public void readSelf(NetByteBuf netByteBuf) {
|
||||
float yaw = netByteBuf.readFloat();
|
||||
float pitch = netByteBuf.readFloat();
|
||||
this.look = new Look(yaw, pitch);
|
||||
this.look = LookObjectPool.borrowObject().set(yaw, pitch);
|
||||
|
||||
this.onGround = netByteBuf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivate() {
|
||||
LookObjectPool.returnObject(this.look);
|
||||
this.look = null;
|
||||
this.onGround = false;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import lombok.ToString;
|
||||
import mc.protocol.io.NetByteBuf;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.protocol.pool.LocationObjectPool;
|
||||
|
||||
/**
|
||||
* Клиент сообщает о движении Игрока.
|
||||
@@ -38,13 +39,14 @@ public class PlayerPositionPacket implements ClientSidePacket {
|
||||
double x = netByteBuf.readDouble();
|
||||
double y = netByteBuf.readDouble();
|
||||
double z = netByteBuf.readDouble();
|
||||
this.position = new Location(x, y, z);
|
||||
this.position = LocationObjectPool.borrowObject().set(x, y, z);
|
||||
|
||||
this.onGround = netByteBuf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivate() {
|
||||
LocationObjectPool.returnObject(this.position);
|
||||
this.position = null;
|
||||
this.onGround = false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import mc.protocol.model.Location;
|
||||
import org.apache.commons.pool2.BasePooledObjectFactory;
|
||||
import org.apache.commons.pool2.ObjectPool;
|
||||
import org.apache.commons.pool2.PooledObject;
|
||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class LocationObjectPool extends BasePooledObjectFactory<Location> {
|
||||
|
||||
private static final ObjectPool<Location> instance = new GenericObjectPool<>(new LocationObjectPool());
|
||||
|
||||
@Override
|
||||
public Location create() {
|
||||
return new Location();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PooledObject<Location> wrap(Location location) {
|
||||
return new DefaultPooledObject<>(location);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static Location borrowObject() {
|
||||
return instance.borrowObject();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static void returnObject(Location location) {
|
||||
instance.returnObject(location);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import mc.protocol.model.Look;
|
||||
import org.apache.commons.pool2.BasePooledObjectFactory;
|
||||
import org.apache.commons.pool2.ObjectPool;
|
||||
import org.apache.commons.pool2.PooledObject;
|
||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class LookObjectPool extends BasePooledObjectFactory<Look> {
|
||||
|
||||
private static final ObjectPool<Look> instance = new GenericObjectPool<>(new LookObjectPool());
|
||||
|
||||
@Override
|
||||
public Look create() {
|
||||
return new Look();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PooledObject<Look> wrap(Look look) {
|
||||
return new DefaultPooledObject<>(look);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static Look borrowObject() {
|
||||
return instance.borrowObject();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static void returnObject(Look look) {
|
||||
instance.returnObject(look);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user