3
0
Mirror von https://github.com/ViaVersion/ViaVersion.git synchronisiert 2024-11-08 17:20:24 +01:00

Add the option to use a hologram patch to fix invisible holograms being in wrong place, by default disabled.

Dieser Commit ist enthalten in:
Myles 2016-03-09 21:08:50 +00:00
Ursprung e2d27df1a8
Commit 47b447f195
3 geänderte Dateien mit 45 neuen und 2 gelöschten Zeilen

Datei anzeigen

@ -230,6 +230,14 @@ public class ViaVersionPlugin extends JavaPlugin implements ViaVersionAPI {
return getConfig().getBoolean("shield-blocking", true); return getConfig().getBoolean("shield-blocking", true);
} }
public boolean isHologramPatch() {
return getConfig().getBoolean("hologram-patch", false);
}
public double getHologramYOffset() {
return getConfig().getDouble("hologram-y", -1D);
}
public boolean isAutoTeam() { public boolean isAutoTeam() {
// Collision has to be enabled first // Collision has to be enabled first
if (!isPreventCollision()) return false; if (!isPreventCollision()) return false;

Datei anzeigen

@ -39,6 +39,7 @@ public class OutgoingTransformer {
private final Map<Integer, EntityType> clientEntityTypes = new HashMap<>(); private final Map<Integer, EntityType> clientEntityTypes = new HashMap<>();
private final Map<Integer, Integer> vehicleMap = new HashMap<>(); private final Map<Integer, Integer> vehicleMap = new HashMap<>();
private final Set<Integer> validBlocking = new HashSet<>(); private final Set<Integer> validBlocking = new HashSet<>();
private final Set<Integer> knownHolograms = new HashSet<>();
private boolean autoTeam = false; private boolean autoTeam = false;
public OutgoingTransformer(ConnectionInfo info) { public OutgoingTransformer(ConnectionInfo info) {
@ -216,13 +217,15 @@ public class OutgoingTransformer {
return; return;
} }
if (packet == PacketType.PLAY_ENTITY_TELEPORT) { if (packet == PacketType.PLAY_ENTITY_TELEPORT) {
// Port this so that it relative moves :P
int id = PacketUtil.readVarInt(input); int id = PacketUtil.readVarInt(input);
PacketUtil.writeVarInt(id, output); PacketUtil.writeVarInt(id, output);
int x = input.readInt(); int x = input.readInt();
output.writeDouble(x / 32D); output.writeDouble(x / 32D);
int y = input.readInt(); int y = input.readInt();
if(plugin.isHologramPatch() & knownHolograms.contains(id)){
y = (int) ((y) + (plugin.getHologramYOffset() * 32D));
}
output.writeDouble(y / 32D); output.writeDouble(y / 32D);
int z = input.readInt(); int z = input.readInt();
output.writeDouble(z / 32D); output.writeDouble(z / 32D);
@ -243,6 +246,9 @@ public class OutgoingTransformer {
int x = input.readByte(); int x = input.readByte();
output.writeShort(x * 128); output.writeShort(x * 128);
int y = input.readByte(); int y = input.readByte();
if(plugin.isHologramPatch() & knownHolograms.contains(id)){
y = (int) ((y) + plugin.getHologramYOffset());
}
output.writeShort(y * 128); output.writeShort(y * 128);
int z = input.readByte(); int z = input.readByte();
output.writeShort(z * 128); output.writeShort(z * 128);
@ -263,12 +269,16 @@ public class OutgoingTransformer {
short x = (short) (input.readByte()); short x = (short) (input.readByte());
output.writeShort(x * 128); output.writeShort(x * 128);
short y = (short) (input.readByte()); short y = (short) (input.readByte());
if(plugin.isHologramPatch() & knownHolograms.contains(id)){
y = (short) (y - 1);
}
output.writeShort(y * 128); output.writeShort(y * 128);
short z = (short) (input.readByte()); short z = (short) (input.readByte());
output.writeShort(z * 128); output.writeShort(z * 128);
boolean onGround = input.readBoolean(); boolean onGround = input.readBoolean();
output.writeBoolean(onGround); output.writeBoolean(onGround);
return; return;
} }
@ -372,6 +382,7 @@ public class OutgoingTransformer {
int[] toDestroy = PacketUtil.readVarInts(count, input); int[] toDestroy = PacketUtil.readVarInts(count, input);
for (int entityID : toDestroy) { for (int entityID : toDestroy) {
clientEntityTypes.remove(entityID); clientEntityTypes.remove(entityID);
knownHolograms.remove(entityID);
PacketUtil.writeVarInt(entityID, output); PacketUtil.writeVarInt(entityID, output);
} }
return; return;
@ -845,6 +856,25 @@ public class OutgoingTransformer {
} }
} }
} }
if(type == EntityType.ARMOR_STAND && plugin.isHologramPatch()){
if(entry.getOldID() == 0){
byte data = (byte) entry.getValue();
if((data & 0x20) == 0x20){
if(!knownHolograms.contains(entityID)) {
knownHolograms.add(entityID);
// Send movement
ByteBuf buf = info.getChannel().alloc().buffer();
PacketUtil.writeVarInt(PacketType.PLAY_ENTITY_RELATIVE_MOVE.getNewPacketID(), buf);
PacketUtil.writeVarInt(entityID, buf);
buf.writeShort(0);
buf.writeShort((short) (128D * (plugin.getHologramYOffset() * 32D)));
buf.writeShort(0);
buf.writeBoolean(true);
info.sendRawPacket(buf, false);
}
}
}
}
} }

Datei anzeigen

@ -12,3 +12,8 @@ auto-team: true
suppress-metadata-errors: false suppress-metadata-errors: false
# When enabled 1.9 will be able to block by using shields # When enabled 1.9 will be able to block by using shields
shield-blocking: true shield-blocking: true
# Should we enable our hologram patch?
# If they're in the wrong place enable this
hologram-patch: false
# This is the offset, should work as default when enabled.
hologram-y: -1