Use PacketWrapper for BossBar's instead of raw

This commit is contained in:
Matsv 2017-04-05 21:08:27 +02:00
parent efad8f41a1
commit 9fd1687348

View File

@ -1,16 +1,16 @@
package us.myles.ViaVersion.boss; package us.myles.ViaVersion.boss;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import us.myles.ViaVersion.api.PacketWrapper;
import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.boss.BossBar; import us.myles.ViaVersion.api.boss.BossBar;
import us.myles.ViaVersion.api.boss.BossColor; import us.myles.ViaVersion.api.boss.BossColor;
import us.myles.ViaVersion.api.boss.BossFlag; import us.myles.ViaVersion.api.boss.BossFlag;
import us.myles.ViaVersion.api.boss.BossStyle; import us.myles.ViaVersion.api.boss.BossStyle;
import us.myles.ViaVersion.api.data.UserConnection;
import us.myles.ViaVersion.api.protocol.ProtocolVersion; import us.myles.ViaVersion.api.protocol.ProtocolVersion;
import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.Type;
import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8; import us.myles.ViaVersion.protocols.protocol1_9to1_8.Protocol1_9TO1_8;
@ -80,8 +80,10 @@ public abstract class CommonBoss<T> extends BossBar<T> {
public BossBar addPlayer(UUID player) { public BossBar addPlayer(UUID player) {
if (!players.contains(player)) { if (!players.contains(player)) {
players.add(player); players.add(player);
if (visible) if (visible) {
sendPacket(player, getPacket(CommonBoss.UpdateAction.ADD)); UserConnection user = Via.getManager().getConnection(player);
sendPacket(player, getPacket(CommonBoss.UpdateAction.ADD, user));
}
} }
return this; return this;
} }
@ -90,7 +92,8 @@ public abstract class CommonBoss<T> extends BossBar<T> {
public BossBar removePlayer(UUID uuid) { public BossBar removePlayer(UUID uuid) {
if (players.contains(uuid)) { if (players.contains(uuid)) {
players.remove(uuid); players.remove(uuid);
sendPacket(uuid, getPacket(UpdateAction.REMOVE)); UserConnection user = Via.getManager().getConnection(uuid);
sendPacket(uuid, getPacket(UpdateAction.REMOVE, user));
} }
return this; return this;
} }
@ -152,52 +155,55 @@ public abstract class CommonBoss<T> extends BossBar<T> {
private void sendPacket(UpdateAction action) { private void sendPacket(UpdateAction action) {
for (UUID uuid : new ArrayList<>(players)) { for (UUID uuid : new ArrayList<>(players)) {
ByteBuf buf = getPacket(action); UserConnection connection = Via.getManager().getConnection(uuid);
sendPacket(uuid, buf); PacketWrapper wrapper = getPacket(action, connection);
sendPacket(uuid, wrapper);
} }
} }
private void sendPacket(UUID uuid, ByteBuf buf) { private void sendPacket(UUID uuid, PacketWrapper wrapper) {
if (!Via.getAPI().isPorted(uuid) || !(Via.getAPI().getPlayerVersion(uuid) >= ProtocolVersion.v1_9.getId())) { if (!Via.getAPI().isPorted(uuid) || !(Via.getAPI().getPlayerVersion(uuid) >= ProtocolVersion.v1_9.getId())) {
players.remove(uuid); players.remove(uuid);
buf.release();
return; return;
} }
Via.getAPI().sendRawPacket(uuid, buf); try {
wrapper.send(Protocol1_9TO1_8.class);
} catch (Exception e) {
e.printStackTrace();
}
} }
private ByteBuf getPacket(UpdateAction action) { private PacketWrapper getPacket(UpdateAction action, UserConnection connection) {
try { try {
ByteBuf buf = Unpooled.buffer(); PacketWrapper wrapper = new PacketWrapper(0x0C, null, connection); // TODO don't use fixed packet ids for future support
Type.VAR_INT.write(buf, 0x0C); // Boss bar packet wrapper.write(Type.UUID, uuid);
Type.UUID.write(buf, uuid); wrapper.write(Type.VAR_INT, action.getId());
Type.VAR_INT.write(buf, action.getId());
switch (action) { switch (action) {
case ADD: case ADD:
Type.STRING.write(buf, fixJson(title)); Protocol1_9TO1_8.FIX_JSON.write(wrapper, title);
buf.writeFloat(health); wrapper.write(Type.FLOAT, health);
Type.VAR_INT.write(buf, color.getId()); wrapper.write(Type.VAR_INT, color.getId());
Type.VAR_INT.write(buf, style.getId()); wrapper.write(Type.VAR_INT, style.getId());
buf.writeByte(flagToBytes()); wrapper.write(Type.BYTE, (byte) flagToBytes());
break; break;
case REMOVE: case REMOVE:
break; break;
case UPDATE_HEALTH: case UPDATE_HEALTH:
buf.writeFloat(health); wrapper.write(Type.FLOAT, health);
break; break;
case UPDATE_TITLE: case UPDATE_TITLE:
Type.STRING.write(buf, fixJson(title)); Protocol1_9TO1_8.FIX_JSON.write(wrapper, title);
break; break;
case UPDATE_STYLE: case UPDATE_STYLE:
Type.VAR_INT.write(buf, color.getId()); wrapper.write(Type.VAR_INT, color.getId());
Type.VAR_INT.write(buf, style.getId()); wrapper.write(Type.VAR_INT, style.getId());
break; break;
case UPDATE_FLAGS: case UPDATE_FLAGS:
buf.writeByte(flagToBytes()); wrapper.write(Type.BYTE, (byte) flagToBytes());
break; break;
} }
return buf; return wrapper;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -211,10 +217,6 @@ public abstract class CommonBoss<T> extends BossBar<T> {
return bitmask; return bitmask;
} }
private String fixJson(String text) {
return Protocol1_9TO1_8.fixJson(text);
}
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter
private enum UpdateAction { private enum UpdateAction {