Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-20 06:50:08 +01:00
Use primitive types in Position and BlockFace, remove world block connections on Sponge, clean code in 1.8 entity tracker, add constructor for cloning Item and Position
Dieser Commit ist enthalten in:
Ursprung
faaa252fa8
Commit
062d3759be
@ -21,11 +21,11 @@ public class BukkitBlockConnectionProvider extends BlockConnectionProvider {
|
|||||||
Player player = Bukkit.getPlayer(uuid);
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
World world = player.getWorld();
|
World world = player.getWorld();
|
||||||
int x = (int) (position.getX() >> 4);
|
int x = position.getPosX() >> 4;
|
||||||
int z = (int) (position.getZ() >> 4);
|
int z = position.getPosZ() >> 4;
|
||||||
if (world.isChunkLoaded(x, z)) {
|
if (world.isChunkLoaded(x, z)) {
|
||||||
Chunk c = getChunk(world, x, z);
|
Chunk c = getChunk(world, x, z);
|
||||||
Block b = c.getBlock(position.getX().intValue(), position.getY().intValue(), position.getZ().intValue());
|
Block b = c.getBlock(position.getPosX(), position.getPosY(), position.getPosZ());
|
||||||
return b.getTypeId() << 4 | b.getData();
|
return b.getTypeId() << 4 | b.getData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,12 @@ import java.util.Map;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum BlockFace {
|
public enum BlockFace {
|
||||||
NORTH(0, 0, -1, EnumAxis.Z),
|
NORTH((byte) 0, (byte) 0, (byte) -1, EnumAxis.Z),
|
||||||
SOUTH(0, 0, 1, EnumAxis.Z),
|
SOUTH((byte) 0, (byte) 0, (byte) 1, EnumAxis.Z),
|
||||||
EAST(1, 0, 0, EnumAxis.X),
|
EAST((byte) 1, (byte) 0, (byte) 0, EnumAxis.X),
|
||||||
WEST(-1, 0, 0, EnumAxis.X),
|
WEST((byte) -1, (byte) 0, (byte) 0, EnumAxis.X),
|
||||||
TOP(0, 1, 0, EnumAxis.Y),
|
TOP((byte) 0, (byte) 1, (byte) 0, EnumAxis.Y),
|
||||||
BOTTOM(0, -1, 0, EnumAxis.Y);
|
BOTTOM((byte) 0, (byte) -1, (byte) 0, EnumAxis.Y);
|
||||||
|
|
||||||
private static Map<BlockFace, BlockFace> opposites = new HashMap<>();
|
private static Map<BlockFace, BlockFace> opposites = new HashMap<>();
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ public enum BlockFace {
|
|||||||
opposites.put(BlockFace.BOTTOM, BlockFace.TOP);
|
opposites.put(BlockFace.BOTTOM, BlockFace.TOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int modX, modY, modZ;
|
private byte modX, modY, modZ;
|
||||||
private EnumAxis axis;
|
private EnumAxis axis;
|
||||||
|
|
||||||
public BlockFace opposite() {
|
public BlockFace opposite() {
|
||||||
@ -35,6 +35,6 @@ public enum BlockFace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum EnumAxis {
|
public enum EnumAxis {
|
||||||
X, Y, Z;
|
X, Y, Z
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,18 +10,59 @@ import lombok.ToString;
|
|||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
public class Position {
|
public class Position {
|
||||||
private Long x;
|
private int posX;
|
||||||
private Long y;
|
private short posY;
|
||||||
private Long z;
|
private int posZ;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public Position(Long x, Long y, Long z) {
|
||||||
|
this.posX = x.intValue();
|
||||||
|
this.posY = y.shortValue();
|
||||||
|
this.posZ = z.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Position(Position toCopy) {
|
||||||
|
this(toCopy.getPosX(), toCopy.getPosY(), toCopy.getPosZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public void setX(Long x) {
|
||||||
|
this.posX = x.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public void setY(Long y) {
|
||||||
|
this.posY = y.shortValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public void setZ(Long z) {
|
||||||
|
this.posZ = z.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public Long getX() {
|
||||||
|
return (long) this.posX;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public Long getY() {
|
||||||
|
return (long) this.posY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public Long getZ() {
|
||||||
|
return (long) this.posZ;
|
||||||
|
}
|
||||||
|
|
||||||
public Position getRelative(BlockFace face) {
|
public Position getRelative(BlockFace face) {
|
||||||
return new Position(this.x + face.getModX(), this.y + face.getModY(), this.z + face.getModZ());
|
return new Position(posX + face.getModX(), (short) (posY + face.getModY()), posZ + face.getModZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Position shift(BlockFace face) {
|
public Position shift(BlockFace face) {
|
||||||
this.x += face.getModX();
|
this.posX += face.getModX();
|
||||||
this.y += face.getModY();
|
this.posY += face.getModY();
|
||||||
this.z += face.getModZ();
|
this.posZ += face.getModZ();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,4 +34,8 @@ public class Item {
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Item(Item toCopy) {
|
||||||
|
this(toCopy.getIdentifier(), toCopy.getAmount(), toCopy.getData(), toCopy.getTag());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,13 @@ public class Position1_14Type extends Type<Position> {
|
|||||||
long y = val << 52 >> 52;
|
long y = val << 52 >> 52;
|
||||||
long z = val << 26 >> 38;
|
long z = val << 26 >> 38;
|
||||||
|
|
||||||
return new Position(x, y, z);
|
return new Position((int) x, (short) y, (int) z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buffer, Position object) {
|
public void write(ByteBuf buffer, Position object) {
|
||||||
buffer.writeLong(((object.getX() & 0x3ffffff) << 38) | (object.getY() & 0xfff) | ((object.getZ() & 0x3ffffff) << 12));
|
buffer.writeLong((((long) object.getPosX() & 0x3ffffff) << 38)
|
||||||
|
| (object.getPosY() & 0xfff)
|
||||||
|
| ((object.getPosZ() & 0x3ffffff) << 12));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,13 @@ public class PositionType extends Type<Position> {
|
|||||||
// this shifting madness is used to preserve sign
|
// this shifting madness is used to preserve sign
|
||||||
long z = (val << 38) >> 38; // signed
|
long z = (val << 38) >> 38; // signed
|
||||||
|
|
||||||
return new Position(x, y, z);
|
return new Position((int) x, (short) y, (int) z);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buffer, Position object) {
|
public void write(ByteBuf buffer, Position object) {
|
||||||
buffer.writeLong(((object.getX() & 0x3ffffff) << 38) | ((object.getY() & 0xfff) << 26) | (object.getZ() & 0x3ffffff));
|
buffer.writeLong((((long) object.getPosX() & 0x3ffffff) << 38)
|
||||||
|
| ((object.getPosY() & 0xfff) << 26)
|
||||||
|
| (object.getPosZ() & 0x3ffffff));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,9 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
Position position = wrapper.read(Type.POSITION);
|
Position position = wrapper.read(Type.POSITION);
|
||||||
wrapper.write(Type.INT, position.getX().intValue());
|
wrapper.write(Type.INT, position.getPosX());
|
||||||
wrapper.write(Type.INT, position.getY().intValue());
|
wrapper.write(Type.INT, (int) position.getPosY());
|
||||||
wrapper.write(Type.INT, position.getZ().intValue());
|
wrapper.write(Type.INT, position.getPosZ());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -515,14 +515,11 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
||||||
for (int i = 0; i < clone.length; i++) {
|
for (int i = 0; i < clone.length; i++) {
|
||||||
if (clone[i] == null) continue;
|
if (clone[i] == null) continue;
|
||||||
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
clone[i] = new Item(new Item(clone[i]));
|
||||||
(short) 0, null);
|
|
||||||
}
|
}
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
}
|
}
|
||||||
wrapper.write(Type.FLAT_ITEM, new Item(
|
wrapper.write(Type.FLAT_ITEM, new Item(entry.getValue().getResult()));
|
||||||
entry.getValue().getResult().getId(),
|
|
||||||
entry.getValue().getResult().getAmount(), (short) 0, null));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "crafting_shaped": {
|
case "crafting_shaped": {
|
||||||
@ -533,14 +530,11 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
||||||
for (int i = 0; i < clone.length; i++) {
|
for (int i = 0; i < clone.length; i++) {
|
||||||
if (clone[i] == null) continue;
|
if (clone[i] == null) continue;
|
||||||
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
clone[i] = new Item(new Item(clone[i]));
|
||||||
(short) 0, null);
|
|
||||||
}
|
}
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
}
|
}
|
||||||
wrapper.write(Type.FLAT_ITEM, new Item(
|
wrapper.write(Type.FLAT_ITEM, new Item(entry.getValue().getResult()));
|
||||||
entry.getValue().getResult().getId(),
|
|
||||||
entry.getValue().getResult().getAmount(), (short) 0, null));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "smelting": {
|
case "smelting": {
|
||||||
@ -548,13 +542,10 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
Item[] clone = entry.getValue().getIngredient().clone(); // Clone because array and item is mutable
|
Item[] clone = entry.getValue().getIngredient().clone(); // Clone because array and item is mutable
|
||||||
for (int i = 0; i < clone.length; i++) {
|
for (int i = 0; i < clone.length; i++) {
|
||||||
if (clone[i] == null) continue;
|
if (clone[i] == null) continue;
|
||||||
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
clone[i] = new Item(clone[i]);
|
||||||
(short) 0, null);
|
|
||||||
}
|
}
|
||||||
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
wrapper.write(Type.FLAT_ITEM, new Item(
|
wrapper.write(Type.FLAT_ITEM, new Item(entry.getValue().getResult()));
|
||||||
entry.getValue().getResult().getId(),
|
|
||||||
entry.getValue().getResult().getAmount(), (short) 0, null));
|
|
||||||
wrapper.write(Type.FLOAT, entry.getValue().getExperience());
|
wrapper.write(Type.FLOAT, entry.getValue().getExperience());
|
||||||
wrapper.write(Type.VAR_INT, entry.getValue().getCookingTime());
|
wrapper.write(Type.VAR_INT, entry.getValue().getCookingTime());
|
||||||
break;
|
break;
|
||||||
|
@ -30,11 +30,7 @@ public class ConnectionData {
|
|||||||
public static void update(UserConnection user, Position position) {
|
public static void update(UserConnection user, Position position) {
|
||||||
BlockConnectionProvider connectionProvider = Via.getManager().getProviders().get(BlockConnectionProvider.class);
|
BlockConnectionProvider connectionProvider = Via.getManager().getProviders().get(BlockConnectionProvider.class);
|
||||||
for (BlockFace face : BlockFace.values()) {
|
for (BlockFace face : BlockFace.values()) {
|
||||||
Position pos = new Position(
|
Position pos = position.getRelative(face);
|
||||||
position.getX() + face.getModX(),
|
|
||||||
position.getY() + face.getModY(),
|
|
||||||
position.getZ() + face.getModZ()
|
|
||||||
);
|
|
||||||
int blockState = connectionProvider.getBlockdata(user, pos);
|
int blockState = connectionProvider.getBlockdata(user, pos);
|
||||||
ConnectionHandler handler = connectionHandlerMap.get(blockState);
|
ConnectionHandler handler = connectionHandlerMap.get(blockState);
|
||||||
if (handler == null) continue;
|
if (handler == null) continue;
|
||||||
@ -64,9 +60,9 @@ public class ConnectionData {
|
|||||||
int blockPosZ = chunkDeltaZ == 1 ? 0 : 15;
|
int blockPosZ = chunkDeltaZ == 1 ? 0 : 15;
|
||||||
updateBlock(user,
|
updateBlock(user,
|
||||||
new Position(
|
new Position(
|
||||||
(long) ((chunkX + chunkDeltaX) << 4) + blockPosX,
|
((chunkX + chunkDeltaX) << 4) + blockPosX,
|
||||||
(long) blockY,
|
(short) blockY,
|
||||||
(long) ((chunkZ + chunkDeltaZ) << 4) + blockPosZ
|
((chunkZ + chunkDeltaZ) << 4) + blockPosZ
|
||||||
),
|
),
|
||||||
updates
|
updates
|
||||||
);
|
);
|
||||||
@ -102,9 +98,9 @@ public class ConnectionData {
|
|||||||
for (int blockZ = zStart; blockZ < zEnd; blockZ++) {
|
for (int blockZ = zStart; blockZ < zEnd; blockZ++) {
|
||||||
updateBlock(user,
|
updateBlock(user,
|
||||||
new Position(
|
new Position(
|
||||||
(long) ((chunkX + chunkDeltaX) << 4) + blockX,
|
((chunkX + chunkDeltaX) << 4) + blockX,
|
||||||
(long) blockY,
|
(short) blockY,
|
||||||
(long) ((chunkZ + chunkDeltaZ) << 4) + blockZ),
|
((chunkZ + chunkDeltaZ) << 4) + blockZ),
|
||||||
updates
|
updates
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -133,7 +129,7 @@ public class ConnectionData {
|
|||||||
if (handler == null) return;
|
if (handler == null) return;
|
||||||
|
|
||||||
int newBlockState = handler.connect(user, pos, blockState);
|
int newBlockState = handler.connect(user, pos, blockState);
|
||||||
records.add(new BlockChangeRecord((short) (((pos.getX() & 0xF) << 4) | (pos.getZ() & 0xF)), pos.getY().shortValue(), newBlockState));
|
records.add(new BlockChangeRecord((short) (((pos.getPosX() & 0xF) << 4) | (pos.getPosZ() & 0xF)), pos.getPosY(), newBlockState));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BlockConnectionProvider getProvider() {
|
public static BlockConnectionProvider getProvider() {
|
||||||
@ -186,7 +182,11 @@ public class ConnectionData {
|
|||||||
|
|
||||||
ConnectionHandler handler = ConnectionData.getConnectionHandler(block);
|
ConnectionHandler handler = ConnectionData.getConnectionHandler(block);
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
block = handler.connect(user, new Position(xOff + x, yOff + y, zOff + z), block);
|
block = handler.connect(user, new Position(
|
||||||
|
(int) (xOff + x),
|
||||||
|
(short) (yOff + y),
|
||||||
|
(short) (zOff + z)
|
||||||
|
), block);
|
||||||
section.setFlatBlock(x, y, z, block);
|
section.setFlatBlock(x, y, z, block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +282,7 @@ public class ConnectionData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int getId(String key) {
|
public static int getId(String key) {
|
||||||
return keyToId.containsKey(key) ? keyToId.get(key) : -1;
|
return keyToId.getOrDefault(key, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getKey(int id) {
|
public static String getKey(int id) {
|
||||||
|
@ -152,7 +152,7 @@ public class WorldPackets {
|
|||||||
|
|
||||||
if (blockId == 73) { // Note block
|
if (blockId == 73) { // Note block
|
||||||
PacketWrapper blockChange = wrapper.create(0x0B); // block change
|
PacketWrapper blockChange = wrapper.create(0x0B); // block change
|
||||||
blockChange.write(Type.POSITION, new Position(pos.getX(), pos.getY(), pos.getZ())); // Clone because position is mutable
|
blockChange.write(Type.POSITION, new Position(pos)); // Clone because position is mutable
|
||||||
blockChange.write(Type.VAR_INT, 249 + (action * 24 * 2) + (param * 2));
|
blockChange.write(Type.VAR_INT, 249 + (action * 24 * 2) + (param * 2));
|
||||||
blockChange.send(Protocol1_13To1_12_2.class, true, true);
|
blockChange.send(Protocol1_13To1_12_2.class, true, true);
|
||||||
}
|
}
|
||||||
@ -211,9 +211,9 @@ public class WorldPackets {
|
|||||||
for (BlockChangeRecord record : records) {
|
for (BlockChangeRecord record : records) {
|
||||||
int newBlock = toNewId(record.getBlockId());
|
int newBlock = toNewId(record.getBlockId());
|
||||||
Position position = new Position(
|
Position position = new Position(
|
||||||
(long) (record.getHorizontal() >> 4 & 15) + (chunkX * 16),
|
(record.getHorizontal() >> 4 & 15) + (chunkX * 16),
|
||||||
(long) record.getY(),
|
record.getY(),
|
||||||
(long) (record.getHorizontal() & 15) + (chunkZ * 16));
|
(record.getHorizontal() & 15) + (chunkZ * 16));
|
||||||
|
|
||||||
if (Via.getConfig().isServersideBlockConnections()) {
|
if (Via.getConfig().isServersideBlockConnections()) {
|
||||||
ConnectionData.updateBlockStorage(userConnection, position, newBlock);
|
ConnectionData.updateBlockStorage(userConnection, position, newBlock);
|
||||||
@ -339,9 +339,9 @@ public class WorldPackets {
|
|||||||
int block = section.getFlatBlock(x, y, z);
|
int block = section.getFlatBlock(x, y, z);
|
||||||
if (storage.isWelcome(block)) {
|
if (storage.isWelcome(block)) {
|
||||||
storage.store(new Position(
|
storage.store(new Position(
|
||||||
(long) (x + (chunk.getX() << 4)),
|
(x + (chunk.getX() << 4)),
|
||||||
(long) (y + (i << 4)),
|
(short) (y + (i << 4)),
|
||||||
(long) (z + (chunk.getZ() << 4))
|
(z + (chunk.getZ() << 4))
|
||||||
), block);
|
), block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,9 +355,9 @@ public class WorldPackets {
|
|||||||
for (int x = 0; x < 16; x++) {
|
for (int x = 0; x < 16; x++) {
|
||||||
int block = section.getFlatBlock(x, y, z);
|
int block = section.getFlatBlock(x, y, z);
|
||||||
if (ConnectionData.isWelcome(block)) {
|
if (ConnectionData.isWelcome(block)) {
|
||||||
ConnectionData.getProvider().storeBlock(wrapper.user(), (long) (x + (chunk.getX() << 4)),
|
ConnectionData.getProvider().storeBlock(wrapper.user(), x + (chunk.getX() << 4),
|
||||||
(long) (y + (i << 4)),
|
y + (i << 4),
|
||||||
(long) (z + (chunk.getZ() << 4)),
|
z + (chunk.getZ() << 4),
|
||||||
block);
|
block);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ public class BlockConnectionStorage extends StoredObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private long getChunkSectionIndex(Position position) {
|
private long getChunkSectionIndex(Position position) {
|
||||||
return getChunkSectionIndex(position.getX().intValue(), position.getY().intValue(), position.getZ().intValue());
|
return getChunkSectionIndex(position.getPosX(), position.getPosY(), position.getPosZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
private short encodeBlockPos(int x, int y, int z) {
|
private short encodeBlockPos(int x, int y, int z) {
|
||||||
@ -120,7 +120,7 @@ public class BlockConnectionStorage extends StoredObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private short encodeBlockPos(Position pos) {
|
private short encodeBlockPos(Position pos) {
|
||||||
return encodeBlockPos(pos.getX().intValue(), pos.getY().intValue(), pos.getZ().intValue());
|
return encodeBlockPos(pos.getPosX(), pos.getPosY(), pos.getPosZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> Map<Long, T> createLongObjectMap() {
|
private <T> Map<Long, T> createLongObjectMap() {
|
||||||
|
@ -55,9 +55,9 @@ public class Protocol1_9_3To1_9_1_2 extends Protocol {
|
|||||||
//Create nbt
|
//Create nbt
|
||||||
CompoundTag tag = new CompoundTag("");
|
CompoundTag tag = new CompoundTag("");
|
||||||
tag.put(new StringTag("id", "Sign"));
|
tag.put(new StringTag("id", "Sign"));
|
||||||
tag.put(new IntTag("x", position.getX().intValue()));
|
tag.put(new IntTag("x", position.getPosX()));
|
||||||
tag.put(new IntTag("y", position.getY().intValue()));
|
tag.put(new IntTag("y", position.getPosY()));
|
||||||
tag.put(new IntTag("z", position.getZ().intValue()));
|
tag.put(new IntTag("z", position.getPosZ()));
|
||||||
for (int i = 0; i < lines.length; i++)
|
for (int i = 0; i < lines.length; i++)
|
||||||
tag.put(new StringTag("Text" + (i + 1), lines[i]));
|
tag.put(new StringTag("Text" + (i + 1), lines[i]));
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ public class WorldPackets {
|
|||||||
if (Via.getConfig().isShieldBlocking()) {
|
if (Via.getConfig().isShieldBlocking()) {
|
||||||
EntityTracker1_9 tracker = wrapper.user().get(EntityTracker1_9.class);
|
EntityTracker1_9 tracker = wrapper.user().get(EntityTracker1_9.class);
|
||||||
|
|
||||||
if (item != null && Protocol1_9To1_8.isSword(item.getId())) {
|
if (item != null && Protocol1_9To1_8.isSword(item.getIdentifier())) {
|
||||||
if (hand == 0) {
|
if (hand == 0) {
|
||||||
if (!tracker.isBlocking()) {
|
if (!tracker.isBlocking()) {
|
||||||
tracker.setBlocking(true);
|
tracker.setBlocking(true);
|
||||||
@ -363,9 +363,9 @@ public class WorldPackets {
|
|||||||
if (face == 255)
|
if (face == 255)
|
||||||
return;
|
return;
|
||||||
Position p = wrapper.get(Type.POSITION, 0);
|
Position p = wrapper.get(Type.POSITION, 0);
|
||||||
long x = p.getX();
|
int x = p.getPosX();
|
||||||
long y = p.getY();
|
short y = p.getPosY();
|
||||||
long z = p.getZ();
|
int z = p.getPosZ();
|
||||||
switch (face) {
|
switch (face) {
|
||||||
case 0:
|
case 0:
|
||||||
y--;
|
y--;
|
||||||
|
@ -32,7 +32,7 @@ public class CommandBlockStorage extends StoredObject {
|
|||||||
Pair<Integer, Integer> chunkPos = getChunkCoords(position);
|
Pair<Integer, Integer> chunkPos = getChunkCoords(position);
|
||||||
|
|
||||||
if (!storedCommandBlocks.containsKey(chunkPos))
|
if (!storedCommandBlocks.containsKey(chunkPos))
|
||||||
storedCommandBlocks.put(chunkPos, new ConcurrentHashMap<Position, CompoundTag>());
|
storedCommandBlocks.put(chunkPos, new ConcurrentHashMap<>());
|
||||||
|
|
||||||
Map<Position, CompoundTag> blocks = storedCommandBlocks.get(chunkPos);
|
Map<Position, CompoundTag> blocks = storedCommandBlocks.get(chunkPos);
|
||||||
|
|
||||||
@ -44,8 +44,8 @@ public class CommandBlockStorage extends StoredObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Pair<Integer, Integer> getChunkCoords(Position position) {
|
private Pair<Integer, Integer> getChunkCoords(Position position) {
|
||||||
int chunkX = (int) Math.floor(position.getX() / 16);
|
int chunkX = Math.floorDiv(position.getPosX(), 16);
|
||||||
int chunkZ = (int) Math.floor(position.getZ() / 16);
|
int chunkZ = Math.floorDiv(position.getPosZ(), 16);
|
||||||
|
|
||||||
return new Pair<>(chunkX, chunkZ);
|
return new Pair<>(chunkX, chunkZ);
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,11 @@ public class EntityTracker1_9 extends EntityTracker {
|
|||||||
private final Map<Integer, BossBar> bossBarMap = new ConcurrentHashMap<>();
|
private final Map<Integer, BossBar> bossBarMap = new ConcurrentHashMap<>();
|
||||||
private final Set<Integer> validBlocking = Sets.newConcurrentHashSet();
|
private final Set<Integer> validBlocking = Sets.newConcurrentHashSet();
|
||||||
private final Set<Integer> knownHolograms = Sets.newConcurrentHashSet();
|
private final Set<Integer> knownHolograms = Sets.newConcurrentHashSet();
|
||||||
private final Cache<Position, Integer> blockInteractions = CacheBuilder.newBuilder().maximumSize(10).expireAfterAccess(250, TimeUnit.MILLISECONDS).build();
|
private final Set<Position> blockInteractions = Collections.newSetFromMap(CacheBuilder.newBuilder()
|
||||||
|
.maximumSize(10)
|
||||||
|
.expireAfterAccess(250, TimeUnit.MILLISECONDS)
|
||||||
|
.<Position, Boolean>build()
|
||||||
|
.asMap());
|
||||||
@Setter
|
@Setter
|
||||||
private boolean blocking = false;
|
private boolean blocking = false;
|
||||||
@Setter
|
@Setter
|
||||||
@ -100,19 +104,11 @@ public class EntityTracker1_9 extends EntityTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean interactedBlockRecently(int x, int y, int z) {
|
public boolean interactedBlockRecently(int x, int y, int z) {
|
||||||
if (blockInteractions.size() == 0)
|
return blockInteractions.contains(new Position(x, (short) y , z));
|
||||||
return false;
|
|
||||||
for (Position p : blockInteractions.asMap().keySet()) {
|
|
||||||
if (p.getX() == x)
|
|
||||||
if (p.getY() == y)
|
|
||||||
if (p.getZ() == z)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addBlockInteraction(Position p) {
|
public void addBlockInteraction(Position p) {
|
||||||
blockInteractions.put(p, 0);
|
blockInteractions.add(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleMetadata(int entityId, List<Metadata> metadataList) {
|
public void handleMetadata(int entityId, List<Metadata> metadataList) {
|
||||||
|
@ -12,7 +12,9 @@ import java.util.Map;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class SpongeViaConfig extends AbstractViaConfig {
|
public class SpongeViaConfig extends AbstractViaConfig {
|
||||||
private static final List<String> UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval", "bungee-ping-save", "bungee-servers", "velocity-ping-interval", "velocity-ping-save", "velocity-servers", "quick-move-action-fix", "change-1_9-hitbox", "change-1_14-hitbox");
|
private static final List<String> UNSUPPORTED = Arrays.asList("anti-xray-patch", "bungee-ping-interval",
|
||||||
|
"bungee-ping-save", "bungee-servers", "velocity-ping-interval", "velocity-ping-save", "velocity-servers",
|
||||||
|
"quick-move-action-fix", "change-1_9-hitbox", "change-1_14-hitbox", "blockconnection-method");
|
||||||
private final PluginContainer pluginContainer;
|
private final PluginContainer pluginContainer;
|
||||||
|
|
||||||
public SpongeViaConfig(PluginContainer pluginContainer, File configFile) {
|
public SpongeViaConfig(PluginContainer pluginContainer, File configFile) {
|
||||||
@ -59,4 +61,9 @@ public class SpongeViaConfig extends AbstractViaConfig {
|
|||||||
public boolean is1_14HitboxFix() {
|
public boolean is1_14HitboxFix() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBlockConnectionMethod() {
|
||||||
|
return "packet";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import us.myles.ViaVersion.api.minecraft.item.Item;
|
|||||||
import us.myles.ViaVersion.api.platform.TaskId;
|
import us.myles.ViaVersion.api.platform.TaskId;
|
||||||
import us.myles.ViaVersion.api.platform.ViaPlatformLoader;
|
import us.myles.ViaVersion.api.platform.ViaPlatformLoader;
|
||||||
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BulkChunkTranslatorProvider;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.BulkChunkTranslatorProvider;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.HandItemProvider;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.HandItemProvider;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider;
|
import us.myles.ViaVersion.protocols.protocol1_9to1_8.providers.MovementTransmitterProvider;
|
||||||
@ -19,7 +18,6 @@ import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.DeathListener;
|
|||||||
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.HandItemCache;
|
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.HandItemCache;
|
||||||
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.sponge4.Sponge4ArmorListener;
|
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.sponge4.Sponge4ArmorListener;
|
||||||
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.sponge5.Sponge5ArmorListener;
|
import us.myles.ViaVersion.sponge.listeners.protocol1_9to1_8.sponge5.Sponge5ArmorListener;
|
||||||
import us.myles.ViaVersion.sponge.providers.SpongeBlockConnectionProvider;
|
|
||||||
import us.myles.ViaVersion.sponge.providers.SpongeViaBulkChunkTranslator;
|
import us.myles.ViaVersion.sponge.providers.SpongeViaBulkChunkTranslator;
|
||||||
import us.myles.ViaVersion.sponge.providers.SpongeViaMovementTransmitter;
|
import us.myles.ViaVersion.sponge.providers.SpongeViaMovementTransmitter;
|
||||||
|
|
||||||
@ -80,9 +78,6 @@ public class SpongeViaLoader implements ViaPlatformLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (Via.getConfig().getBlockConnectionMethod().equalsIgnoreCase("world")) {
|
|
||||||
Via.getManager().getProviders().use(BlockConnectionProvider.class, new SpongeBlockConnectionProvider());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unload() {
|
public void unload() {
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
package us.myles.ViaVersion.sponge.providers;
|
|
||||||
|
|
||||||
import org.spongepowered.api.Sponge;
|
|
||||||
import org.spongepowered.api.block.BlockState;
|
|
||||||
import org.spongepowered.api.entity.living.player.Player;
|
|
||||||
import org.spongepowered.api.world.Chunk;
|
|
||||||
import org.spongepowered.api.world.World;
|
|
||||||
import us.myles.ViaVersion.api.Via;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
|
||||||
import us.myles.ViaVersion.api.minecraft.Position;
|
|
||||||
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
|
||||||
import us.myles.ViaVersion.util.ReflectionUtil;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class SpongeBlockConnectionProvider extends BlockConnectionProvider {
|
|
||||||
private static Class block;
|
|
||||||
private static Map<Object, Integer> blockStateIds;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
block = Class.forName("net.minecraft.block.Block");
|
|
||||||
blockStateIds = ReflectionUtil.get(
|
|
||||||
ReflectionUtil.getStatic(block, "field_176229_d", Object.class),
|
|
||||||
"field_148749_a", Map.class);
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
Via.getPlatform().getLogger().warning("net.minecraft.block.Block not found! Are you using Lantern?");
|
|
||||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getWorldBlockData(UserConnection user, Position position) {
|
|
||||||
if (blockStateIds != null) {
|
|
||||||
UUID uuid = user.get(ProtocolInfo.class).getUuid();
|
|
||||||
Optional<Player> player = Sponge.getServer().getPlayer(uuid);
|
|
||||||
if (player.isPresent()) {
|
|
||||||
World world = player.get().getWorld();
|
|
||||||
Optional<Chunk> chunk = world.getChunkAtBlock(position.getX().intValue(), position.getY().intValue(), position.getZ().intValue());
|
|
||||||
if (chunk.isPresent()) {
|
|
||||||
BlockState b = chunk.get().getBlock(position.getX().intValue(), position.getY().intValue(), position.getZ().intValue());
|
|
||||||
Integer id = blockStateIds.get(b);
|
|
||||||
if (id == null) {
|
|
||||||
System.out.println("id not found");
|
|
||||||
} else {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren