3
0
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:
creeper123123321 2019-11-22 15:13:02 -03:00
Ursprung faaa252fa8
Commit 062d3759be
17 geänderte Dateien mit 131 neuen und 150 gelöschten Zeilen

Datei anzeigen

@ -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();
} }
} }

Datei anzeigen

@ -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
} }
} }

Datei anzeigen

@ -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;
} }
} }

Datei anzeigen

@ -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());
}
} }

Datei anzeigen

@ -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));
} }
} }

Datei anzeigen

@ -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));
} }
} }

Datei anzeigen

@ -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;

Datei anzeigen

@ -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) {

Datei anzeigen

@ -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);
} }
} }

Datei anzeigen

@ -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() {

Datei anzeigen

@ -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]));

Datei anzeigen

@ -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--;

Datei anzeigen

@ -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);
} }

Datei anzeigen

@ -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) {

Datei anzeigen

@ -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";
}
} }

Datei anzeigen

@ -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() {

Datei anzeigen

@ -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;
}
}