use of com.loohp.interactivechat.objectholders.ICPlaceholder in project InteractiveChat by LOOHP.
the class InteractiveChatVelocity method onReceive.
@Subscribe
public void onReceive(PluginMessageEvent event) {
if (!event.getIdentifier().getId().equals("interchat:main")) {
return;
}
ChannelMessageSource source = event.getSource();
if (!(source instanceof ServerConnection)) {
return;
}
event.setResult(ForwardResult.handled());
RegisteredServer server = ((ServerConnection) source).getServer();
String senderServer = server.getServerInfo().getName();
byte[] packet = Arrays.copyOf(event.getData(), event.getData().length);
ByteArrayDataInput in = ByteStreams.newDataInput(packet);
int packetNumber = in.readInt();
int packetId = in.readShort();
if (!Registry.PROXY_PASSTHROUGH_RELAY_PACKETS.contains(packetId)) {
boolean isEnding = in.readBoolean();
byte[] data = new byte[packet.length - 7];
in.readFully(data);
byte[] chain = incomming.remove(packetNumber);
if (chain != null) {
ByteBuffer buff = ByteBuffer.allocate(chain.length + data.length);
buff.put(chain);
buff.put(data);
data = buff.array();
}
if (!isEnding) {
incomming.put(packetNumber, data);
return;
}
byte[] finalData = data;
pluginMessageHandlingExecutor.submit(() -> {
try {
ByteArrayDataInput input = ByteStreams.newDataInput(finalData);
switch(packetId) {
case 0x07:
int cooldownType = input.readByte();
switch(cooldownType) {
case 0:
UUID uuid = DataTypeIO.readUUID(input);
long time = input.readLong();
playerCooldownManager.setPlayerUniversalLastTimestamp(uuid, time);
break;
case 1:
uuid = DataTypeIO.readUUID(input);
UUID internalId = DataTypeIO.readUUID(input);
time = input.readLong();
playerCooldownManager.setPlayerPlaceholderLastTimestamp(uuid, internalId, time);
break;
}
for (RegisteredServer eachServer : getServer().getAllServers()) {
if (!eachServer.getServerInfo().getName().equals(senderServer) && eachServer.getPlayersConnected().size() > 0) {
eachServer.sendPluginMessage(ICChannelIdentifier.INSTANCE, finalData);
pluginMessagesCounter.incrementAndGet();
}
}
break;
case 0x08:
UUID messageId = DataTypeIO.readUUID(input);
String component = DataTypeIO.readString(input, StandardCharsets.UTF_8);
messageForwardingHandler.receivedProcessedMessage(messageId, component);
break;
case 0x09:
loadConfig();
break;
case 0x0B:
int id = input.readInt();
boolean permissionValue = input.readBoolean();
permissionChecks.put(id, permissionValue);
break;
case 0x0C:
int size1 = input.readInt();
List<ICPlaceholder> list = new ArrayList<>(size1);
for (int i = 0; i < size1; i++) {
boolean isBuiltIn = input.readBoolean();
if (isBuiltIn) {
String keyword = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String name = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String description = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String permission = DataTypeIO.readString(input, StandardCharsets.UTF_8);
long cooldown = input.readLong();
list.add(new BuiltInPlaceholder(Pattern.compile(keyword), name, description, permission, cooldown));
} else {
int customNo = input.readInt();
ParsePlayer parseplayer = ParsePlayer.fromOrder(input.readByte());
String placeholder = DataTypeIO.readString(input, StandardCharsets.UTF_8);
boolean parseKeyword = input.readBoolean();
long cooldown = input.readLong();
boolean hoverEnabled = input.readBoolean();
String hoverText = DataTypeIO.readString(input, StandardCharsets.UTF_8);
boolean clickEnabled = input.readBoolean();
String clickAction = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String clickValue = DataTypeIO.readString(input, StandardCharsets.UTF_8);
boolean replaceEnabled = input.readBoolean();
String replaceText = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String name = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String description = DataTypeIO.readString(input, StandardCharsets.UTF_8);
list.add(new CustomPlaceholder(customNo, parseplayer, Pattern.compile(placeholder), parseKeyword, cooldown, new CustomPlaceholderHoverEvent(hoverEnabled, hoverText), new CustomPlaceholderClickEvent(clickEnabled, clickEnabled ? ClickEventAction.valueOf(clickAction) : null, clickValue), new CustomPlaceholderReplaceText(replaceEnabled, replaceText), name, description));
}
}
placeholderList.put(server.getServerInfo().getName(), list);
playerCooldownManager.reloadPlaceholders(placeholderList.values().stream().flatMap(each -> each.stream()).distinct().collect(Collectors.toList()));
PluginMessageSendingVelocity.forwardPlaceholderList(list, server);
break;
case 0x0D:
UUID uuid2 = DataTypeIO.readUUID(input);
PluginMessageSendingVelocity.reloadPlayerData(uuid2, server);
break;
case 0x10:
UUID requestUUID = DataTypeIO.readUUID(input);
int requestType = input.readByte();
switch(requestType) {
case 0:
PluginMessageSendingVelocity.respondPlayerListRequest(requestUUID, server);
break;
default:
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
});
} else {
pluginMessageHandlingExecutor.submit(() -> {
for (RegisteredServer eachServer : getServer().getAllServers()) {
if (!eachServer.getServerInfo().getName().equals(senderServer) && eachServer.getPlayersConnected().size() > 0) {
eachServer.sendPluginMessage(ICChannelIdentifier.INSTANCE, event.getData());
pluginMessagesCounter.incrementAndGet();
}
}
});
}
}
use of com.loohp.interactivechat.objectholders.ICPlaceholder in project InteractiveChat by LOOHP.
the class InteractiveChatVelocity method onServerConnected.
@Subscribe
public void onServerConnected(ServerPostConnectEvent event) {
Player player = event.getPlayer();
RegisteredServer to = player.getCurrentServer().get().getServer();
UUID uuid = player.getUniqueId();
if (!placeholderList.containsKey(to.getServerInfo().getName())) {
try {
PluginMessageSendingVelocity.requestPlaceholderList(to);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
PluginMessageSendingVelocity.sendPlayerListData();
} catch (IOException e1) {
e1.printStackTrace();
}
long universalTime = playerCooldownManager.getPlayerUniversalLastTimestamp(uuid);
if (universalTime >= 0) {
try {
PluginMessageSendingVelocity.sendPlayerUniversalCooldown(to, uuid, universalTime);
} catch (IOException e) {
e.printStackTrace();
}
}
List<ICPlaceholder> placeholders = placeholderList.get(to.getServerInfo().getName());
if (placeholders != null) {
for (ICPlaceholder placeholder : placeholders) {
long placeholderTime = playerCooldownManager.getPlayerPlaceholderLastTimestamp(uuid, placeholder.getInternalId());
if (placeholderTime >= 0) {
try {
PluginMessageSendingVelocity.sendPlayerPlaceholderCooldown(to, uuid, placeholder, placeholderTime);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
proxyServer.getScheduler().buildTask(plugin, () -> {
try {
PluginMessageSendingVelocity.sendDelayAndScheme();
} catch (IOException e) {
e.printStackTrace();
}
}).schedule();
proxyServer.getScheduler().buildTask(plugin, () -> {
if (event.getPlayer().getUsername().equals("LOOHP") || event.getPlayer().getUsername().equals("AppLEskakE")) {
sendMessage(event.getPlayer(), Component.text(TextColor.GOLD + "InteractiveChat (Velocity) " + getDescription().getVersion() + " is running!"));
}
}).delay(100, TimeUnit.MILLISECONDS).schedule();
VelocityServerConnection serverConnection = ((ConnectedPlayer) event.getPlayer()).getConnectedServer();
ChannelPipeline pipeline = serverConnection.ensureConnected().getChannel().pipeline();
pipeline.addBefore(Connections.HANDLER, "interactivechat_interceptor", new ChannelDuplexHandler() {
@Override
public void write(ChannelHandlerContext channelHandlerContext, Object obj, ChannelPromise channelPromise) throws Exception {
try {
if (obj instanceof Chat) {
Chat packet = (Chat) obj;
UUID uuid = player.getUniqueId();
String message = packet.getMessage();
byte position = packet.getType();
if ((position == 0 || position == 1) && uuid != null && message != null) {
Map<String, Long> list = forwardedMessages.get(uuid);
if (list != null) {
list.put(message, System.currentTimeMillis());
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
super.write(channelHandlerContext, obj, channelPromise);
}
});
}
use of com.loohp.interactivechat.objectholders.ICPlaceholder in project InteractiveChat by LOOHP.
the class ChatEvents method checkCommand.
private void checkCommand(PlayerCommandPreprocessEvent event) {
if (!InteractiveChat.bungeecordMode) {
event.setMessage(Registry.ID_PATTERN.matcher(event.getMessage()).replaceAll(""));
}
boolean flag = true;
String command = event.getMessage();
for (String parsecommand : InteractiveChat.commandList) {
if (command.matches(parsecommand)) {
if (flag) {
translateAltColorCode(event);
command = event.getMessage();
flag = false;
}
CooldownResult cooldownResult = InteractiveChat.placeholderCooldownManager.checkMessage(event.getPlayer().getUniqueId(), command);
if (!cooldownResult.getOutcome().isAllowed()) {
event.setCancelled(true);
Component cancelmessage;
switch(cooldownResult.getOutcome()) {
case DENY_PLACEHOLDER:
cancelmessage = LegacyComponentSerializer.legacySection().deserialize(ChatColorUtils.translateAlternateColorCodes('&', PlaceholderAPI.setPlaceholders(event.getPlayer(), InteractiveChat.placeholderCooldownMessage.replace("{Time}", TimeUtils.getReadableTimeBetween(System.currentTimeMillis(), cooldownResult.getCooldownExpireTime())))));
cancelmessage = ComponentReplacing.replace(cancelmessage, "\\{Keyword\\}", Component.text(cooldownResult.getPlaceholder().getName()).hoverEvent(HoverEvent.showText(LegacyComponentSerializer.legacySection().deserialize(cooldownResult.getPlaceholder().getDescription()))));
break;
case DENY_UNIVERSAL:
cancelmessage = LegacyComponentSerializer.legacySection().deserialize(ChatColorUtils.translateAlternateColorCodes('&', PlaceholderAPI.setPlaceholders(event.getPlayer(), InteractiveChat.universalCooldownMessage.replace("{Time}", TimeUtils.getReadableTimeBetween(System.currentTimeMillis(), cooldownResult.getCooldownExpireTime())))));
break;
default:
cancelmessage = Component.empty();
break;
}
InteractiveChatAPI.sendMessageUnprocessed(event.getPlayer(), cancelmessage);
return;
}
int count = 0;
for (ICPlaceholder icplaceholder : InteractiveChat.placeholderList.values()) {
Matcher matcher = icplaceholder.getKeyword().matcher(command);
if (matcher.find()) {
int start = matcher.start();
if ((start < 1 || command.charAt(start - 1) != '\\') || (start > 1 && command.charAt(start - 1) == '\\' && command.charAt(start - 2) == '\\')) {
if (icplaceholder.getKeyword().equals(InteractiveChat.itemPlaceholder) && !InteractiveChat.itemAirAllow && PlayerUtils.getHeldItem(event.getPlayer()).getType().equals(Material.AIR) && PlayerUtils.hasPermission(event.getPlayer().getUniqueId(), "interactivechat.module.item", false, 200)) {
event.setCancelled(true);
String cancelmessage = ChatColorUtils.translateAlternateColorCodes('&', PlaceholderAPI.setPlaceholders(event.getPlayer(), InteractiveChat.itemAirErrorMessage));
event.getPlayer().sendMessage(cancelmessage);
return;
}
Matcher matcher1 = icplaceholder.getKeyword().matcher(command);
while (matcher1.find()) {
int startPos = matcher1.start();
if ((startPos < 1 || command.charAt(startPos - 1) != '\\') || (startPos > 1 && command.charAt(startPos - 1) == '\\' && command.charAt(startPos - 2) == '\\')) {
count++;
}
}
}
}
}
if (InteractiveChat.maxPlaceholders >= 0 && count > InteractiveChat.maxPlaceholders) {
event.setCancelled(true);
String cancelmessage = ChatColorUtils.translateAlternateColorCodes('&', PlaceholderAPI.setPlaceholders(event.getPlayer(), InteractiveChat.limitReachMessage));
event.getPlayer().sendMessage(cancelmessage);
return;
} else if (count <= 0) {
return;
}
if (InteractiveChat.tagEveryIdentifiableMessage) {
String uuidmatch = " <cmd=" + event.getPlayer().getUniqueId() + ">";
event.setMessage(command + uuidmatch);
break;
} else {
if (!Registry.ID_PATTERN.matcher(command).find()) {
for (ICPlaceholder icplaceholder : InteractiveChat.placeholderList.values()) {
Pattern placeholder = icplaceholder.getKeyword();
Matcher matcher = placeholder.matcher(command);
if (matcher.find()) {
int start = matcher.start();
if ((start < 1 || command.charAt(start - 1) != '\\') || (start > 1 && command.charAt(start - 1) == '\\' && command.charAt(start - 2) == '\\')) {
String uuidmatch = "<cmd=" + event.getPlayer().getUniqueId() + ":" + Registry.ID_ESCAPE_PATTERN.matcher(command.substring(matcher.start(), matcher.end())).replaceAll("\\>") + ":>";
command = command.substring(0, matcher.start()) + uuidmatch + command.substring(matcher.end());
event.setMessage(command);
break;
}
}
}
break;
}
}
}
}
}
use of com.loohp.interactivechat.objectholders.ICPlaceholder in project InteractiveChat by LOOHP.
the class InteractiveChatBungee method onSwitch.
@EventHandler
public void onSwitch(ServerSwitchEvent event) {
ServerInfo to = event.getPlayer().getServer().getInfo();
ProxiedPlayer player = event.getPlayer();
UUID uuid = player.getUniqueId();
if (!placeholderList.containsKey(to.getName())) {
try {
PluginMessageSendingBungee.requestPlaceholderList(to);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
PluginMessageSendingBungee.sendPlayerListData();
} catch (IOException e1) {
e1.printStackTrace();
}
long universalTime = playerCooldownManager.getPlayerUniversalLastTimestamp(uuid);
if (universalTime >= 0) {
try {
PluginMessageSendingBungee.sendPlayerUniversalCooldown(to, uuid, universalTime);
} catch (IOException e) {
e.printStackTrace();
}
}
List<ICPlaceholder> placeholders = placeholderList.get(to.getName());
if (placeholders != null) {
for (ICPlaceholder placeholder : placeholders) {
long placeholderTime = playerCooldownManager.getPlayerPlaceholderLastTimestamp(uuid, placeholder.getInternalId());
if (placeholderTime >= 0) {
try {
PluginMessageSendingBungee.sendPlayerPlaceholderCooldown(to, uuid, placeholder, placeholderTime);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ProxyServer.getInstance().getScheduler().runAsync(plugin, () -> {
try {
PluginMessageSendingBungee.sendDelayAndScheme();
} catch (IOException e) {
e.printStackTrace();
}
});
ProxyServer.getInstance().getScheduler().schedule(plugin, () -> {
if (event.getPlayer().getName().equals("LOOHP") || event.getPlayer().getName().equals("AppLEskakE")) {
sendMessage(event.getPlayer(), LegacyComponentSerializer.legacySection().deserialize(ChatColor.GOLD + "InteractiveChat (Bungeecord) " + plugin.getDescription().getVersion() + " is running!"));
}
}, 100, TimeUnit.MILLISECONDS);
}
use of com.loohp.interactivechat.objectholders.ICPlaceholder in project InteractiveChat by LOOHP.
the class ProcessExternalMessage method processWithoutReceiver0.
@SuppressWarnings("deprecation")
public String processWithoutReceiver0(String message) {
UUID senderUUID = ProcessAccurateSender.find(message);
ICPlayer sender;
if (senderUUID == null) {
sender = null;
} else {
sender = ICPlayerFactory.getICPlayer(senderUUID);
}
message = message.replaceAll(ProcessCommands.COLOR_IGNORE_PATTERN_0.pattern(), "").replaceAll(ProcessCommands.COLOR_IGNORE_PATTERN_1.pattern(), "").replaceAll(ProcessAccurateSender.COLOR_IGNORE_PATTERN.pattern(), "");
message = message.replaceAll(ProcessAccurateSender.PATTERN_0.pattern(), "$2");
Matcher matcher = ProcessAccurateSender.PATTERN_0.matcher(message);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String replacement = Registry.ID_UNESCAPE_PATTERN.matcher(matcher.group(2)).replaceAll(">");
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
message = sb.toString();
message = Registry.MENTION_TAG_CONVERTER.revertTags(message);
if (sender == null) {
return message;
}
long now = System.currentTimeMillis();
long uniCooldown = InteractiveChatAPI.getPlayerUniversalCooldown(sender.getUniqueId()) - now;
if (!(uniCooldown < 0 || uniCooldown + 100 > InteractiveChat.universalCooldown)) {
return message;
}
if (InteractiveChat.rgbTags) {
message = CustomStringUtils.clearPluginRGBTags(message);
}
if (InteractiveChat.fontTags) {
message = CustomStringUtils.clearPluginFontTags(message);
}
Component component = LegacyComponentSerializer.legacySection().deserialize(message);
for (ICPlaceholder placeholder : InteractiveChatAPI.getICPlaceholderList()) {
if (!placeholder.isBuildIn()) {
CustomPlaceholder customP = (CustomPlaceholder) placeholder;
if (!InteractiveChat.useCustomPlaceholderPermissions || (InteractiveChat.useCustomPlaceholderPermissions && PlayerUtils.hasPermission(sender.getUniqueId(), customP.getPermission(), true, 250))) {
if (customP.getKeyword().matcher(message).find()) {
if (customP.getReplace().isEnabled()) {
String replace = ChatColor.WHITE + ChatColorUtils.translateAlternateColorCodes('&', PlaceholderParser.parse(sender, customP.getReplace().getReplaceText()));
component = ComponentReplacing.replace(component, customP.getKeyword().pattern(), true, result -> {
String replaceString = CustomStringUtils.applyReplacementRegex(replace, result, 1);
return LegacyComponentSerializer.legacySection().deserialize(replaceString);
});
}
}
}
}
}
if (InteractiveChat.t && WebData.getInstance() != null) {
for (CustomPlaceholder customP : WebData.getInstance().getSpecialPlaceholders()) {
if (customP.getKeyword().matcher(message).find()) {
if (customP.getReplace().isEnabled()) {
String replace = ChatColor.WHITE + ChatColorUtils.translateAlternateColorCodes('&', PlaceholderParser.parse(sender, customP.getReplace().getReplaceText()));
component = ComponentReplacing.replace(component, customP.getKeyword().pattern(), true, result -> {
String replaceString = CustomStringUtils.applyReplacementRegex(replace, result, 1);
return LegacyComponentSerializer.legacySection().deserialize(replaceString);
});
}
}
}
}
if (InteractiveChat.useItem && PlayerUtils.hasPermission(sender.getUniqueId(), "interactivechat.module.item", true, 250)) {
Pattern placeholder = InteractiveChat.itemPlaceholder;
if (placeholder.matcher(message).find()) {
ItemStack item = sender.getEquipment().getItemInHand();
if (item == null) {
item = new ItemStack(Material.AIR);
}
String itemStr = InteractiveChatComponentSerializer.bungeecordApiLegacy().serialize(ItemStackUtils.getDisplayName(item), InteractiveChat.language);
int amount = item.getAmount();
if (item == null || item.getType().equals(Material.AIR)) {
amount = 1;
}
itemStr = RarityUtils.getRarityColor(item) + itemStr;
String replaceText;
if (amount == 1) {
replaceText = PlaceholderParser.parse(sender, InteractiveChat.itemSingularReplaceText.replace("{Item}", itemStr));
} else {
replaceText = PlaceholderParser.parse(sender, InteractiveChat.itemReplaceText.replace("{Amount}", String.valueOf(amount)).replace("{Item}", itemStr));
}
component = ComponentReplacing.replace(component, placeholder.pattern(), true, LegacyComponentSerializer.legacySection().deserialize(replaceText));
}
}
if (InteractiveChat.useInventory && PlayerUtils.hasPermission(sender.getUniqueId(), "interactivechat.module.inventory", true, 250)) {
Pattern placeholder = InteractiveChat.invPlaceholder;
if (placeholder.matcher(message).find()) {
String replaceText = PlaceholderParser.parse(sender, InteractiveChat.invReplaceText);
component = ComponentReplacing.replace(component, placeholder.pattern(), true, LegacyComponentSerializer.legacySection().deserialize(replaceText));
}
}
if (InteractiveChat.useEnder && PlayerUtils.hasPermission(sender.getUniqueId(), "interactivechat.module.enderchest", true, 250)) {
Pattern placeholder = InteractiveChat.enderPlaceholder;
if (placeholder.matcher(message).find()) {
String replaceText = PlaceholderParser.parse(sender, InteractiveChat.enderReplaceText);
component = ComponentReplacing.replace(component, placeholder.pattern(), true, LegacyComponentSerializer.legacySection().deserialize(replaceText));
}
}
return LegacyComponentSerializer.builder().character(ChatColorUtils.COLOR_CHAR).hexColors().useUnusualXRepeatedCharacterHexFormat().build().serialize(component);
}
Aggregations