playernotifier: fix 1.17 protocol support
This commit is contained in:
parent
9944a7bcdb
commit
8af0909110
2
pom.xml
2
pom.xml
@ -26,7 +26,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>ProtocolLib</artifactId>
|
||||||
<version>4.6.0</version>
|
<version>4.7.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -34,6 +34,7 @@ import com.comphenix.protocol.events.PacketContainer;
|
|||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction;
|
import com.comphenix.protocol.wrappers.EnumWrappers.TitleAction;
|
||||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
|
import com.comphenix.protocol.utility.MinecraftProtocolVersion;
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -49,9 +50,64 @@ public class PlayerNotifier implements Listener {
|
|||||||
Logger log = Logger.getLogger("Regions.PlayerNotifier");
|
Logger log = Logger.getLogger("Regions.PlayerNotifier");
|
||||||
RegionManager m_manager;
|
RegionManager m_manager;
|
||||||
Plugin m_plugin;
|
Plugin m_plugin;
|
||||||
|
ProtocolManager m_protocolManager;
|
||||||
|
int m_protoVersion = 0;
|
||||||
|
|
||||||
public PlayerNotifier(Plugin plugin, RegionManager manager) {
|
public PlayerNotifier(Plugin plugin, RegionManager manager) {
|
||||||
m_manager = manager;
|
m_manager = manager;
|
||||||
m_plugin = plugin;
|
m_plugin = plugin;
|
||||||
|
m_protocolManager = ProtocolLibrary.getProtocolManager();
|
||||||
|
|
||||||
|
if (m_protocolManager != null) {
|
||||||
|
m_protoVersion = MinecraftProtocolVersion.getCurrentVersion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendTitle(Player player, WrappedChatComponent title, WrappedChatComponent subtitle) {
|
||||||
|
// Title packet format changed in 1.17
|
||||||
|
if (m_protoVersion < 755) {
|
||||||
|
PacketContainer setTitle = m_protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
||||||
|
setTitle.getChatComponents().write(0, title);
|
||||||
|
PacketContainer setSubtitle = m_protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
||||||
|
setSubtitle.getChatComponents().write(0, subtitle);
|
||||||
|
setSubtitle.getTitleActions().write(0, TitleAction.SUBTITLE);
|
||||||
|
try {
|
||||||
|
m_protocolManager.sendServerPacket(player, setTitle);
|
||||||
|
m_protocolManager.sendServerPacket(player, setSubtitle);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PacketContainer setTitle = m_protocolManager.createPacket(PacketType.Play.Server.SET_TITLE_TEXT);
|
||||||
|
setTitle.getChatComponents().write(0, title);
|
||||||
|
PacketContainer setSubtitle = m_protocolManager.createPacket(PacketType.Play.Server.SET_SUBTITLE_TEXT);
|
||||||
|
setSubtitle.getChatComponents().write(0, subtitle);
|
||||||
|
|
||||||
|
try {
|
||||||
|
m_protocolManager.sendServerPacket(player, setTitle);
|
||||||
|
m_protocolManager.sendServerPacket(player, setSubtitle);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendActionBar(Player player, WrappedChatComponent text) {
|
||||||
|
// Title packet format changed in 1.17
|
||||||
|
if (m_protoVersion < 755) {
|
||||||
|
PacketContainer setActionBar = m_protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
||||||
|
setActionBar.getChatComponents().write(0, text);
|
||||||
|
setActionBar.getTitleActions().write(0, TitleAction.ACTIONBAR);
|
||||||
|
try {
|
||||||
|
m_protocolManager.sendServerPacket(player, setActionBar);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
PacketContainer setActionBar = m_protocolManager.createPacket(PacketType.Play.Server.SET_ACTION_BAR_TEXT);
|
||||||
|
setActionBar.getChatComponents().write(0, text);
|
||||||
|
try {
|
||||||
|
m_protocolManager.sendServerPacket(player, setActionBar);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -71,30 +127,16 @@ public class PlayerNotifier implements Listener {
|
|||||||
int pop = m_plugin.playerWatcher().playersInRegion(event.newRegion).size();
|
int pop = m_plugin.playerWatcher().playersInRegion(event.newRegion).size();
|
||||||
Location center = event.newRegion.location();
|
Location center = event.newRegion.location();
|
||||||
int altitude = center.getBlockY();
|
int altitude = center.getBlockY();
|
||||||
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
|
if (m_protocolManager != null) {
|
||||||
if (protocolManager != null) {
|
|
||||||
PacketContainer chatMessage = protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
|
||||||
String colorHex = "#" + String.format("%06X", event.newRegion.color().getColor().asRGB());
|
String colorHex = "#" + String.format("%06X", event.newRegion.color().getColor().asRGB());
|
||||||
chatMessage.getChatComponents().write(0, WrappedChatComponent.fromJson("{text:\"" + event.newRegion.name() + "\", color: \""+colorHex+"\"}"));
|
WrappedChatComponent titleComponent = WrappedChatComponent.fromJson("{text:\"" + event.newRegion.name() + "\", color: \""+colorHex+"\"}");
|
||||||
try {
|
WrappedChatComponent subtitleComponent = WrappedChatComponent.fromJson("{text:\"Population: " + pop + " Altitude: "+ altitude + "\", color: \"#ffffff\"}");
|
||||||
protocolManager.sendServerPacket(event.player, chatMessage);
|
WrappedChatComponent actionBarComponent = WrappedChatComponent.fromJson("{text:\"Now entering " + event.newRegion.name() + "\", color: \""+colorHex+"\"}");
|
||||||
} catch (Exception e) {
|
sendTitle(event.player, titleComponent, subtitleComponent);
|
||||||
}
|
sendActionBar(event.player, actionBarComponent);
|
||||||
chatMessage = protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
|
||||||
chatMessage.getChatComponents().write(0, WrappedChatComponent.fromJson("{text:\"Population: " + pop + " Altitude: "+ altitude + "\", color: \"#ffffff\"}"));
|
|
||||||
chatMessage.getTitleActions().write(0, TitleAction.SUBTITLE);
|
|
||||||
try {
|
|
||||||
protocolManager.sendServerPacket(event.player, chatMessage);
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
chatMessage = protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
|
||||||
chatMessage.getChatComponents().write(0, WrappedChatComponent.fromJson("{text:\"Now entering " + event.newRegion.name() + "\", color: \""+colorHex+"\"}"));
|
|
||||||
chatMessage.getTitleActions().write(0, TitleAction.ACTIONBAR);
|
|
||||||
try {
|
|
||||||
protocolManager.sendServerPacket(event.player, chatMessage);
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
// Fallback to approximated colors
|
||||||
event.player.sendTitle(event.newRegion.coloredName(), "Population: " + pop + " Altitude: " + altitude);
|
event.player.sendTitle(event.newRegion.coloredName(), "Population: " + pop + " Altitude: " + altitude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,25 +148,16 @@ public class PlayerNotifier implements Listener {
|
|||||||
if (event.region.markSeenByPlayer(event.player)) {
|
if (event.region.markSeenByPlayer(event.player)) {
|
||||||
event.player.playSound(event.region.location(), Sound.UI_TOAST_CHALLENGE_COMPLETE, (float)1, (float)1);
|
event.player.playSound(event.region.location(), Sound.UI_TOAST_CHALLENGE_COMPLETE, (float)1, (float)1);
|
||||||
|
|
||||||
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
|
if (m_protocolManager != null) {
|
||||||
|
|
||||||
if (protocolManager != null) {
|
|
||||||
PacketContainer chatMessage = protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
|
||||||
String colorHex = "#" + String.format("%06X", event.region.color().getColor().asRGB());
|
String colorHex = "#" + String.format("%06X", event.region.color().getColor().asRGB());
|
||||||
chatMessage.getChatComponents().write(0, WrappedChatComponent.fromJson("{text:\"Region discovered\", color: \""+colorHex+"\"}"));
|
WrappedChatComponent discoverTitle = WrappedChatComponent.fromJson("{text:\"Region discovered\", color: \""+colorHex+"\"}");
|
||||||
try {
|
WrappedChatComponent discoverSubtitle = WrappedChatComponent.fromJson("{text:\"You discovered the region " + event.region.name() + "\", color: \""+colorHex+"\"}");
|
||||||
protocolManager.sendServerPacket(event.player, chatMessage);
|
sendTitle(event.player, discoverTitle, discoverSubtitle);
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
chatMessage = protocolManager.createPacket(PacketType.Play.Server.TITLE);
|
|
||||||
chatMessage.getChatComponents().write(0, WrappedChatComponent.fromJson("{text:\"You discovered the region " + event.region.name() + "\", color: \""+colorHex+"\"}"));
|
|
||||||
chatMessage.getTitleActions().write(0, TitleAction.SUBTITLE);
|
|
||||||
try {
|
|
||||||
protocolManager.sendServerPacket(event.player, chatMessage);
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
//FIXME: also show pop/alt subtitle
|
// Fallback to approximated colors
|
||||||
|
// TODO: Apply region color to the rest of the title and subtitle
|
||||||
|
// text
|
||||||
event.player.sendTitle("Region Discovered", "You discovered the region " + event.region.coloredName());
|
event.player.sendTitle("Region Discovered", "You discovered the region " + event.region.coloredName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user