refactoring: Pooled objects
This commit is contained in:
@@ -1,24 +1,18 @@
|
|||||||
package mc.protocol.model;
|
package mc.protocol.model;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Data
|
@Data
|
||||||
public class Location {
|
public class Location {
|
||||||
private double x;
|
private double x = 0d;
|
||||||
private double y;
|
private double y = 0d;
|
||||||
private double z;
|
private double z = 0d;
|
||||||
|
|
||||||
public int getIntX() {
|
public Location set(double x, double y, double z) {
|
||||||
return (int) x;
|
this.x = x;
|
||||||
}
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
|
||||||
public int getIntZ() {
|
return this;
|
||||||
return (int) z;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Location toChunkXZ() {
|
|
||||||
return new Location(this.getIntX() >> 4, 0d, this.getIntZ() >> 4);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
package mc.protocol.model;
|
package mc.protocol.model;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Data
|
@Data
|
||||||
public class Look {
|
public class Look {
|
||||||
private float yaw;
|
private float yaw;
|
||||||
private float pitch;
|
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.Location;
|
||||||
import mc.protocol.model.Look;
|
import mc.protocol.model.Look;
|
||||||
import mc.protocol.packets.ClientSidePacket;
|
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 x = netByteBuf.readDouble();
|
||||||
double y = netByteBuf.readDouble();
|
double y = netByteBuf.readDouble();
|
||||||
double z = 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 yaw = netByteBuf.readFloat();
|
||||||
float pitch = netByteBuf.readFloat();
|
float pitch = netByteBuf.readFloat();
|
||||||
this.look = new Look(yaw, pitch);
|
this.look = LookObjectPool.borrowObject().set(yaw, pitch);
|
||||||
|
|
||||||
this.onGround = netByteBuf.readBoolean();
|
this.onGround = netByteBuf.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void passivate() {
|
public void passivate() {
|
||||||
|
LocationObjectPool.returnObject(this.position);
|
||||||
this.position = null;
|
this.position = null;
|
||||||
|
LookObjectPool.returnObject(this.look);
|
||||||
this.look = null;
|
this.look = null;
|
||||||
this.onGround = false;
|
this.onGround = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import lombok.ToString;
|
|||||||
import mc.protocol.io.NetByteBuf;
|
import mc.protocol.io.NetByteBuf;
|
||||||
import mc.protocol.model.Look;
|
import mc.protocol.model.Look;
|
||||||
import mc.protocol.packets.ClientSidePacket;
|
import mc.protocol.packets.ClientSidePacket;
|
||||||
|
import mc.protocol.pool.LookObjectPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Клиент сообщает о повороте головы Игрока.
|
* Клиент сообщает о повороте головы Игрока.
|
||||||
@@ -35,13 +36,14 @@ public class PlayerLookPacket implements ClientSidePacket {
|
|||||||
public void readSelf(NetByteBuf netByteBuf) {
|
public void readSelf(NetByteBuf netByteBuf) {
|
||||||
float yaw = netByteBuf.readFloat();
|
float yaw = netByteBuf.readFloat();
|
||||||
float pitch = netByteBuf.readFloat();
|
float pitch = netByteBuf.readFloat();
|
||||||
this.look = new Look(yaw, pitch);
|
this.look = LookObjectPool.borrowObject().set(yaw, pitch);
|
||||||
|
|
||||||
this.onGround = netByteBuf.readBoolean();
|
this.onGround = netByteBuf.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void passivate() {
|
public void passivate() {
|
||||||
|
LookObjectPool.returnObject(this.look);
|
||||||
this.look = null;
|
this.look = null;
|
||||||
this.onGround = false;
|
this.onGround = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import lombok.ToString;
|
|||||||
import mc.protocol.io.NetByteBuf;
|
import mc.protocol.io.NetByteBuf;
|
||||||
import mc.protocol.model.Location;
|
import mc.protocol.model.Location;
|
||||||
import mc.protocol.packets.ClientSidePacket;
|
import mc.protocol.packets.ClientSidePacket;
|
||||||
|
import mc.protocol.pool.LocationObjectPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Клиент сообщает о движении Игрока.
|
* Клиент сообщает о движении Игрока.
|
||||||
@@ -38,13 +39,14 @@ public class PlayerPositionPacket implements ClientSidePacket {
|
|||||||
double x = netByteBuf.readDouble();
|
double x = netByteBuf.readDouble();
|
||||||
double y = netByteBuf.readDouble();
|
double y = netByteBuf.readDouble();
|
||||||
double z = 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();
|
this.onGround = netByteBuf.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void passivate() {
|
public void passivate() {
|
||||||
|
LocationObjectPool.returnObject(this.position);
|
||||||
this.position = null;
|
this.position = null;
|
||||||
this.onGround = false;
|
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