use of com.loohp.interactivechat.objectholders.ICPlayer in project InteractiveChat by LOOHP.
the class BungeeMessageListener method onPluginMessageReceived.
@SuppressWarnings("deprecation")
@Override
public void onPluginMessageReceived(String channel, Player pluginMessagingPlayer, byte[] bytes) {
if (!channel.equals("interchat:main")) {
return;
}
ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
int packetNumber = in.readInt();
int packetId = in.readShort();
boolean isEnding = in.readBoolean();
byte[] data = new byte[bytes.length - 7];
in.readFully(data);
byte[] chain = incoming.remove(packetNumber);
if (chain != null) {
ByteBuffer buff = ByteBuffer.allocate(chain.length + data.length);
buff.put(chain);
buff.put(data);
data = buff.array();
}
if (!isEnding) {
incoming.put(packetNumber, data);
return;
}
try {
ByteArrayDataInput input = ByteStreams.newDataInput(data);
switch(packetId) {
case 0x00:
int playerAmount = input.readInt();
Set<UUID> localUUID = Bukkit.getOnlinePlayers().stream().map(each -> each.getUniqueId()).collect(Collectors.toSet());
Set<UUID> current = new HashSet<>(ICPlayerFactory.getRemoteUUIDs());
Set<UUID> newSet = new HashSet<>();
for (int i = 0; i < playerAmount; i++) {
String server = DataTypeIO.readString(input, StandardCharsets.UTF_8);
UUID uuid = DataTypeIO.readUUID(input);
String name = DataTypeIO.readString(input, StandardCharsets.UTF_8);
ICPlayer player = ICPlayerFactory.getICPlayer(uuid);
if (player != null) {
if (!player.getRemoteServer().equals(server)) {
player.setRemoteServer(server);
}
}
if (!localUUID.contains(uuid) && !ICPlayerFactory.getRemoteUUIDs().contains(uuid)) {
ICPlayerFactory.createOrUpdateRemoteICPlayer(server, name, uuid, true, 0, 0, Bukkit.createInventory(null, 45), Bukkit.createInventory(null, 36));
}
newSet.add(uuid);
}
current.removeAll(newSet);
for (UUID uuid : current) {
ICPlayerFactory.removeRemoteICPlayer(uuid);
}
for (UUID uuid : localUUID) {
ICPlayerFactory.removeRemoteICPlayer(uuid);
}
break;
case 0x01:
int delay = input.readInt();
short itemStackScheme = input.readShort();
short inventoryScheme = input.readShort();
InteractiveChat.remoteDelay = delay;
BungeeMessageSender.itemStackScheme = itemStackScheme;
BungeeMessageSender.inventoryScheme = inventoryScheme;
break;
case 0x02:
UUID sender = DataTypeIO.readUUID(input);
UUID receiver = DataTypeIO.readUUID(input);
InteractiveChat.mentionPair.add(new MentionPair(sender, receiver));
break;
case 0x03:
UUID uuid = DataTypeIO.readUUID(input);
ICPlayer player = ICPlayerFactory.getICPlayer(uuid);
if (player == null) {
break;
}
boolean rightHanded = input.readBoolean();
player.setRemoteRightHanded(rightHanded);
int selectedSlot = input.readByte();
player.setRemoteSelectedSlot(selectedSlot);
int level = input.readInt();
player.setRemoteExperienceLevel(level);
int size = input.readByte();
ItemStack[] equipment = new ItemStack[size];
for (int i = 0; i < equipment.length; i++) {
equipment[i] = DataTypeIO.readItemStack(input, StandardCharsets.UTF_8);
}
player.getEquipment().setHelmet(equipment[0]);
player.getEquipment().setChestplate(equipment[1]);
player.getEquipment().setLeggings(equipment[2]);
player.getEquipment().setBoots(equipment[3]);
if (InteractiveChat.version.isOld()) {
player.getEquipment().setItemInHand(equipment[4]);
} else {
player.getEquipment().setItemInMainHand(equipment[4]);
player.getEquipment().setItemInOffHand(equipment[5]);
}
break;
case 0x04:
UUID uuid1 = DataTypeIO.readUUID(input);
ICPlayer player1 = ICPlayerFactory.getICPlayer(uuid1);
if (player1 == null) {
break;
}
boolean rightHanded1 = input.readBoolean();
player1.setRemoteRightHanded(rightHanded1);
int selectedSlot1 = input.readByte();
player1.setRemoteSelectedSlot(selectedSlot1);
int level1 = input.readInt();
player1.setRemoteExperienceLevel(level1);
int type = input.readByte();
if (type == 0) {
player1.setRemoteInventory(DataTypeIO.readInventory(input, StandardCharsets.UTF_8));
} else {
player1.setRemoteEnderChest(DataTypeIO.readInventory(input, StandardCharsets.UTF_8));
}
break;
case 0x05:
UUID uuid2 = DataTypeIO.readUUID(input);
ICPlayer player2 = ICPlayerFactory.getICPlayer(uuid2);
if (player2 == null) {
break;
}
int size1 = input.readInt();
for (int i = 0; i < size1; i++) {
String placeholder = DataTypeIO.readString(input, StandardCharsets.UTF_8);
String text = DataTypeIO.readString(input, StandardCharsets.UTF_8);
player2.getRemotePlaceholdersMapping().put(placeholder, text);
}
break;
case 0x06:
String message = DataTypeIO.readString(input, StandardCharsets.UTF_8);
UUID uuid3 = DataTypeIO.readUUID(input);
ICPlayer player3 = ICPlayerFactory.getICPlayer(uuid3);
if (player3 == null) {
break;
}
InteractiveChat.messages.put(message, uuid3);
Bukkit.getScheduler().runTaskLater(InteractiveChat.plugin, () -> InteractiveChat.messages.remove(message), 60);
break;
case 0x07:
int cooldownType = input.readByte();
switch(cooldownType) {
case 0:
UUID uuid4 = DataTypeIO.readUUID(input);
long time = input.readLong();
InteractiveChat.placeholderCooldownManager.setPlayerUniversalLastTimestampRaw(uuid4, time);
break;
case 1:
uuid4 = DataTypeIO.readUUID(input);
UUID internalId = DataTypeIO.readUUID(input);
time = input.readLong();
Optional<ICPlaceholder> optPlaceholder = InteractiveChat.placeholderList.values().stream().filter(each -> each.getInternalId().equals(internalId)).findFirst();
if (optPlaceholder.isPresent()) {
InteractiveChat.placeholderCooldownManager.setPlayerPlaceholderLastTimestampRaw(uuid4, optPlaceholder.get(), time);
}
break;
}
break;
case 0x08:
UUID messageId = DataTypeIO.readUUID(input);
UUID uuid5 = DataTypeIO.readUUID(input);
Player bukkitplayer1 = Bukkit.getPlayer(uuid5);
if (bukkitplayer1 == null) {
break;
}
String component = DataTypeIO.readString(input, StandardCharsets.UTF_8);
Bukkit.getScheduler().runTaskAsynchronously(InteractiveChat.plugin, () -> {
try {
String processed = ProcessExternalMessage.processAndRespond(bukkitplayer1, component);
BungeeMessageSender.respondProcessedMessage(System.currentTimeMillis(), processed, messageId);
} catch (Exception e) {
e.printStackTrace();
}
});
break;
case 0x09:
String server = DataTypeIO.readString(input, StandardCharsets.UTF_8);
int size2 = input.readInt();
List<ICPlaceholder> list = new ArrayList<>(size2);
for (int i = 0; i < size2; i++) {
boolean isBulitIn = input.readBoolean();
if (isBulitIn) {
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));
}
}
InteractiveChat.remotePlaceholderList.put(server, list);
break;
case 0x0A:
BungeeMessageSender.resetAndForwardPlaceholderList(System.currentTimeMillis(), InteractiveChat.placeholderList.values());
break;
case 0x0B:
int id = input.readInt();
UUID playerUUID = DataTypeIO.readUUID(input);
String permission = DataTypeIO.readString(input, StandardCharsets.UTF_8);
Player player5 = Bukkit.getPlayer(playerUUID);
BungeeMessageSender.permissionCheckResponse(System.currentTimeMillis(), id, player5 != null && player5.hasPermission(permission));
break;
case 0x0D:
UUID playerUUID1 = DataTypeIO.readUUID(input);
PlayerData pd = InteractiveChat.playerDataManager.getPlayerData(playerUUID1);
if (pd != null) {
pd.reload();
}
break;
case 0x0E:
SharedType sharedType = SharedType.fromValue(input.readByte());
String sha1 = DataTypeIO.readString(input, StandardCharsets.UTF_8);
Inventory inventory = DataTypeIO.readInventory(input, StandardCharsets.UTF_8);
InteractiveChatAPI.addInventoryToItemShareList(sharedType, sha1, inventory);
break;
case 0x0F:
int requestType = input.readByte();
UUID playerUUID2 = DataTypeIO.readUUID(input);
Player player6 = Bukkit.getPlayer(playerUUID2);
if (player6 != null) {
ICPlayer player7 = ICPlayerFactory.getICPlayer(player6);
switch(requestType) {
case 0:
BungeeMessageSender.forwardInventory(System.currentTimeMillis(), player7.getUniqueId(), player7.isRightHanded(), player7.getSelectedSlot(), player7.getExperienceLevel(), null, player7.getInventory());
break;
case 1:
BungeeMessageSender.forwardEnderchest(System.currentTimeMillis(), player7.getUniqueId(), player7.isRightHanded(), player7.getSelectedSlot(), player7.getExperienceLevel(), null, player7.getEnderChest());
break;
}
}
break;
case 0x10:
UUID requestUUID = DataTypeIO.readUUID(input);
int requestType2 = input.readByte();
// noinspection SwitchStatementWithTooFewBranches
switch(requestType2) {
case 0:
List<ValueTrios<UUID, String, Integer>> playerlist = new ArrayList<>();
int playerListSize = input.readInt();
for (int i = 0; i < playerListSize; i++) {
playerlist.add(new ValueTrios<>(DataTypeIO.readUUID(input), DataTypeIO.readString(input, StandardCharsets.UTF_8), input.readInt()));
}
@SuppressWarnings("unchecked") CompletableFuture<List<ValueTrios<UUID, String, Integer>>> future = (CompletableFuture<List<ValueTrios<UUID, String, Integer>>>) toComplete.remove(requestUUID);
if (future != null) {
future.complete(playerlist);
}
break;
default:
break;
}
break;
case 0x11:
UUID playerUUID3 = DataTypeIO.readUUID(input);
int nicknameSize = input.readInt();
Set<String> remoteNicknames = new HashSet<>();
for (int i = 0; i < nicknameSize; i++) {
remoteNicknames.add(DataTypeIO.readString(input, StandardCharsets.UTF_8));
}
ICPlayer icPlayer = ICPlayerFactory.getICPlayer(playerUUID3);
if (icPlayer != null) {
icPlayer.setRemoteNicknames(remoteNicknames);
}
break;
case 0x12:
UUID playerUUID4 = DataTypeIO.readUUID(input);
String placeholders = DataTypeIO.readString(input, StandardCharsets.UTF_8);
ICPlayer icPlayer1 = ICPlayerFactory.getICPlayer(playerUUID4);
if (icPlayer1 != null && icPlayer1.isLocal()) {
PlaceholderParser.parse(icPlayer1, placeholders);
}
break;
case 0xFF:
String customChannel = DataTypeIO.readString(input, StandardCharsets.UTF_8);
int dataLength = input.readInt();
byte[] customData = new byte[dataLength];
input.readFully(customData);
ProxyCustomDataRecievedEvent dataEvent = new ProxyCustomDataRecievedEvent(customChannel, customData);
Bukkit.getPluginManager().callEvent(dataEvent);
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
use of com.loohp.interactivechat.objectholders.ICPlayer in project InteractiveChat-DiscordSRV-Addon by LOOHP.
the class ImageGeneration method getFullBodyImage.
private static BufferedImage getFullBodyImage(OfflineICPlayer player, ItemStack helmet, ItemStack chestplate, ItemStack leggings, ItemStack boots) throws IOException {
InteractiveChatDiscordSrvAddon.plugin.imageCounter.incrementAndGet();
Debug.debug("ImageGeneration creating puppet image of " + player.getName());
BufferedImage skin = null;
boolean slim = false;
BufferedImage cape;
try {
JSONObject json;
ICPlayer icPlayer = player.getPlayer();
if (icPlayer != null && icPlayer.isLocal()) {
json = (JSONObject) new JSONParser().parse(SkinUtils.getSkinJsonFromProfile(((ICPlayer) player).getLocalPlayer()));
} else {
json = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(((JSONObject) ((JSONArray) HTTPRequestUtils.getJSONResponse(PLAYER_INFO_URL.replace("%s", player.getUniqueId().toString())).get("properties")).get(0)).get("value").toString())));
}
if (json == null) {
cape = null;
} else {
try {
if (((JSONObject) json.get("textures")).containsKey("CAPE")) {
String url = (String) ((JSONObject) ((JSONObject) json.get("textures")).get("CAPE")).get("url");
Cache<?> cache = Cache.getCache(player.getUniqueId().toString() + url + PLAYER_CAPE_CACHE_KEY);
if (cache == null) {
cape = ImageUtils.downloadImage(url);
Cache.putCache(player.getUniqueId().toString() + url + PLAYER_CAPE_CACHE_KEY, cape, InteractiveChatDiscordSrvAddon.plugin.cacheTimeout);
} else {
cape = (BufferedImage) cache.getObject();
}
} else {
String url = OPTIFINE_CAPE_URL.replaceAll("%s", CustomStringUtils.escapeReplaceAllMetaCharacters(player.getName()));
Cache<?> cache = Cache.getCache(player.getUniqueId().toString() + url + PLAYER_CAPE_CACHE_KEY);
if (cache == null) {
try {
cape = ImageUtils.downloadImage(url);
Cache.putCache(player.getUniqueId().toString() + url + PLAYER_CAPE_CACHE_KEY, cape, InteractiveChatDiscordSrvAddon.plugin.cacheTimeout);
} catch (Throwable ignore) {
cape = null;
}
} else {
cape = (BufferedImage) cache.getObject();
}
}
} catch (Throwable e) {
cape = null;
}
try {
String value = (String) ((JSONObject) ((JSONObject) json.get("textures")).get("SKIN")).get("url");
if (((JSONObject) ((JSONObject) json.get("textures")).get("SKIN")).containsKey("metadata")) {
slim = ((JSONObject) ((JSONObject) ((JSONObject) json.get("textures")).get("SKIN")).get("metadata")).get("model").toString().equals("slim");
}
Cache<?> cache = Cache.getCache(player.getUniqueId().toString() + value + PLAYER_SKIN_CACHE_KEY);
if (cache == null) {
skin = ImageUtils.downloadImage(value);
Cache.putCache(player.getUniqueId().toString() + value + PLAYER_SKIN_CACHE_KEY, skin, InteractiveChatDiscordSrvAddon.plugin.cacheTimeout);
} else {
skin = (BufferedImage) cache.getObject();
}
skin = ImageUtils.copyImage(skin);
} catch (Throwable e1) {
}
}
} catch (Exception e) {
cape = null;
}
if (skin == null) {
if (slim) {
skin = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ENTITY_TEXTURE_LOCATION + "alex").getTexture();
} else {
skin = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ENTITY_TEXTURE_LOCATION + "steve").getTexture();
}
}
BufferedImage elytraImage = null;
BufferedImage image = new BufferedImage(556, 748, BufferedImage.TYPE_INT_ARGB);
Map<String, TextureResource> providedTextures = new HashMap<>();
Map<PlayerModelItemPosition, PlayerModelItem> modelItems = new HashMap<>();
providedTextures.put(ResourceRegistry.SKIN_FULL_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(ModelUtils.convertToModernSkinTexture(skin)));
if (ItemStackUtils.isWearable(leggings)) {
XMaterial type = XMaterialUtils.matchXMaterial(leggings);
BufferedImage leggingsImage = null;
switch(type) {
case LEATHER_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_2").getTexture();
LeatherArmorMeta meta = (LeatherArmorMeta) leggings.getItemMeta();
Color color = new Color(meta.getColor().asRGB());
BufferedImage armorOverlay = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_2_overlay").getTexture();
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(leggingsImage), color);
leggingsImage = ImageUtils.multiply(leggingsImage, colorOverlay);
Graphics2D g2 = leggingsImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2.drawImage(armorOverlay, 0, 0, null);
g2.dispose();
break;
case CHAINMAIL_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "chainmail_layer_2").getTexture();
break;
case GOLDEN_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "gold_layer_2").getTexture();
break;
case IRON_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "iron_layer_2").getTexture();
break;
case DIAMOND_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "diamond_layer_2").getTexture();
break;
case NETHERITE_LEGGINGS:
leggingsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "netherite_layer_2").getTexture();
break;
default:
break;
}
if (leggingsImage != null) {
if (leggings.getEnchantments().size() > 0) {
leggingsImage = getEnchantedImage(leggingsImage);
}
providedTextures.put(ResourceRegistry.LEGGINGS_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(leggingsImage));
}
}
if (ItemStackUtils.isWearable(boots)) {
XMaterial type = XMaterialUtils.matchXMaterial(boots);
BufferedImage bootsImage = null;
switch(type) {
case LEATHER_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1").getTexture();
LeatherArmorMeta meta = (LeatherArmorMeta) boots.getItemMeta();
Color color = new Color(meta.getColor().asRGB());
BufferedImage armorOverlay = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1_overlay").getTexture();
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(bootsImage), color);
bootsImage = ImageUtils.multiply(bootsImage, colorOverlay);
Graphics2D g2 = bootsImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2.drawImage(armorOverlay, 0, 0, null);
g2.dispose();
break;
case CHAINMAIL_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "chainmail_layer_1").getTexture();
break;
case GOLDEN_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "gold_layer_1").getTexture();
break;
case IRON_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "iron_layer_1").getTexture();
break;
case DIAMOND_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "diamond_layer_1").getTexture();
break;
case NETHERITE_BOOTS:
bootsImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "netherite_layer_1").getTexture();
break;
default:
break;
}
if (bootsImage != null) {
if (boots.getEnchantments().size() > 0) {
bootsImage = getEnchantedImage(bootsImage);
}
providedTextures.put(ResourceRegistry.BOOTS_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(bootsImage));
}
}
if (ItemStackUtils.isWearable(chestplate)) {
XMaterial type = XMaterialUtils.matchXMaterial(chestplate);
BufferedImage chestplateImage = null;
boolean isArmor = true;
switch(type) {
case LEATHER_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1").getTexture();
LeatherArmorMeta meta = (LeatherArmorMeta) chestplate.getItemMeta();
Color color = new Color(meta.getColor().asRGB());
BufferedImage armorOverlay = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1_overlay").getTexture();
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(chestplateImage), color);
chestplateImage = ImageUtils.multiply(chestplateImage, colorOverlay);
Graphics2D g2 = chestplateImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2.drawImage(armorOverlay, 0, 0, null);
g2.dispose();
break;
case CHAINMAIL_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "chainmail_layer_1").getTexture();
break;
case GOLDEN_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "gold_layer_1").getTexture();
break;
case IRON_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "iron_layer_1").getTexture();
break;
case DIAMOND_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "diamond_layer_1").getTexture();
break;
case NETHERITE_CHESTPLATE:
chestplateImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "netherite_layer_1").getTexture();
break;
case ELYTRA:
isArmor = false;
chestplateImage = new BufferedImage(150, 150, BufferedImage.TYPE_INT_ARGB);
BufferedImage wing = cape == null ? resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ENTITY_TEXTURE_LOCATION + "elytra").getTexture() : cape;
if (wing.getWidth() % 64 != 0 || wing.getHeight() % 32 != 0) {
int w = 0;
int h = 0;
while (w < wing.getWidth()) {
w += 64;
h += 32;
}
BufferedImage resize = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g3 = resize.createGraphics();
g3.drawImage(wing, 0, 0, null);
g3.dispose();
wing = resize;
}
int scale = wing.getWidth() / 64;
wing = ImageUtils.copyAndGetSubImage(wing, 34 * scale, 2 * scale, 12 * scale, 20 * scale);
wing = ImageUtils.multiply(ImageUtils.resizeImage(wing, Math.pow(scale, -1) * 3.75), 0.7);
BufferedImage leftWing = ImageUtils.rotateImageByDegrees(wing, 23.41);
Graphics2D g3 = chestplateImage.createGraphics();
g3.drawImage(leftWing, 0, 0, null);
wing = ImageUtils.flipHorizontal(wing);
BufferedImage rightWing = ImageUtils.rotateImageByDegrees(wing, 360.0 - 23.41);
g3.drawImage(rightWing, 26, 0, null);
g3.dispose();
if (chestplate.getEnchantments().size() > 0) {
chestplateImage = getEnchantedImage(chestplateImage);
}
elytraImage = chestplateImage;
default:
break;
}
if (isArmor && chestplateImage != null) {
if (chestplate.getEnchantments().size() > 0) {
chestplateImage = getEnchantedImage(chestplateImage);
}
providedTextures.put(ResourceRegistry.CHESTPLATE_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(chestplateImage));
}
}
if (helmet != null && !helmet.getType().equals(Material.AIR)) {
XMaterial type = XMaterialUtils.matchXMaterial(helmet);
BufferedImage helmetImage = null;
boolean isArmor = true;
switch(type) {
case LEATHER_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1").getTexture();
LeatherArmorMeta meta = (LeatherArmorMeta) helmet.getItemMeta();
Color color = new Color(meta.getColor().asRGB());
BufferedImage armorOverlay = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "leather_layer_1_overlay").getTexture();
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(helmetImage), color);
helmetImage = ImageUtils.multiply(helmetImage, colorOverlay);
Graphics2D g2 = helmetImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2.drawImage(armorOverlay, 0, 0, null);
g2.dispose();
break;
case CHAINMAIL_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "chainmail_layer_1").getTexture();
break;
case GOLDEN_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "gold_layer_1").getTexture();
break;
case IRON_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "iron_layer_1").getTexture();
break;
case DIAMOND_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "diamond_layer_1").getTexture();
break;
case NETHERITE_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "netherite_layer_1").getTexture();
break;
case TURTLE_HELMET:
helmetImage = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.ARMOR_TEXTURE_LOCATION + "turtle_layer_1").getTexture();
break;
default:
isArmor = false;
String key = ModelUtils.getItemModelKey(type);
ItemStackProcessResult itemProcessResult = ItemRenderUtils.processItemForRendering(player, helmet);
boolean enchanted = itemProcessResult.requiresEnchantmentGlint();
Map<ModelOverrideType, Float> predicate = itemProcessResult.getPredicates();
String modelKey = itemProcessResult.getDirectLocation() == null ? ResourceRegistry.ITEM_MODEL_LOCATION + key : itemProcessResult.getDirectLocation();
Map<String, TextureResource> itemProvidedTextures = itemProcessResult.getProvidedTextures();
TintIndexData tintIndexData = itemProcessResult.getTintIndexData();
modelItems.put(PlayerModelItemPosition.HELMET, new PlayerModelItem(PlayerModelItemPosition.HELMET, modelKey, predicate, enchanted, itemProvidedTextures, tintIndexData));
break;
}
if (isArmor) {
if (helmet.getEnchantments().size() > 0) {
helmetImage = getEnchantedImage(helmetImage);
}
providedTextures.put(ResourceRegistry.HELMET_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(helmetImage));
}
}
if (InteractiveChatDiscordSrvAddon.plugin.renderHandHeldItems) {
ItemStack rightHand = player.isRightHanded() ? player.getMainHandItem() : player.getOffHandItem();
if (rightHand != null) {
String key = ModelUtils.getItemModelKey(XMaterialUtils.matchXMaterial(rightHand));
ItemStackProcessResult itemProcessResult = ItemRenderUtils.processItemForRendering(player, rightHand);
boolean enchanted = itemProcessResult.requiresEnchantmentGlint();
Map<ModelOverrideType, Float> predicate = itemProcessResult.getPredicates();
String modelKey = itemProcessResult.getDirectLocation() == null ? ResourceRegistry.ITEM_MODEL_LOCATION + key : itemProcessResult.getDirectLocation();
Map<String, TextureResource> itemProvidedTextures = itemProcessResult.getProvidedTextures();
TintIndexData tintIndexData = itemProcessResult.getTintIndexData();
modelItems.put(PlayerModelItemPosition.RIGHT_HAND, new PlayerModelItem(PlayerModelItemPosition.RIGHT_HAND, modelKey, predicate, enchanted, itemProvidedTextures, tintIndexData));
}
ItemStack leftHand = player.isRightHanded() ? player.getOffHandItem() : player.getMainHandItem();
if (leftHand != null) {
String key = ModelUtils.getItemModelKey(XMaterialUtils.matchXMaterial(leftHand));
ItemStackProcessResult itemProcessResult = ItemRenderUtils.processItemForRendering(player, leftHand);
boolean enchanted = itemProcessResult.requiresEnchantmentGlint();
Map<ModelOverrideType, Float> predicate = itemProcessResult.getPredicates();
String modelKey = itemProcessResult.getDirectLocation() == null ? ResourceRegistry.ITEM_MODEL_LOCATION + key : itemProcessResult.getDirectLocation();
Map<String, TextureResource> itemProvidedTextures = itemProcessResult.getProvidedTextures();
TintIndexData tintIndexData = itemProcessResult.getTintIndexData();
modelItems.put(PlayerModelItemPosition.LEFT_HAND, new PlayerModelItem(PlayerModelItemPosition.LEFT_HAND, modelKey, predicate, enchanted, itemProvidedTextures, tintIndexData));
}
}
boolean upsideDown = ModelUtils.isRenderedUpsideDown(player.getName(), cape != null);
RenderResult renderResult = InteractiveChatDiscordSrvAddon.plugin.modelRenderer.renderPlayer(image.getWidth(), image.getHeight(), resourceManager.get(), version.get().isOld(), slim, providedTextures, TintIndexData.EMPTY_INSTANCE, modelItems);
Graphics2D g = image.createGraphics();
BufferedImage resizedImage = ImageUtils.resizeImageAbs(renderResult.getImage(), 117, 159);
if (upsideDown) {
resizedImage = ImageUtils.rotateImageByDegrees(resizedImage, 180);
}
g.drawImage(resizedImage, -1, 12, null);
g.dispose();
if (elytraImage != null) {
BufferedImage resizedElytraImage = ImageUtils.resizeImage(elytraImage, 0.9);
if (upsideDown) {
resizedElytraImage = ImageUtils.rotateImageByDegrees(resizedElytraImage, 180);
}
ImageUtils.drawTransparent(image, resizedElytraImage, 14, 75);
}
return image;
}
use of com.loohp.interactivechat.objectholders.ICPlayer in project InteractiveChat-DiscordSRV-Addon by LOOHP.
the class ItemRenderUtils method processItemForRendering.
public static ItemStackProcessResult processItemForRendering(OfflineICPlayer player, ItemStack item) throws IOException {
boolean requiresEnchantmentGlint = false;
XMaterial xMaterial = XMaterialUtils.matchXMaterial(item);
String directLocation = null;
if (xMaterial.equals(XMaterial.DEBUG_STICK)) {
requiresEnchantmentGlint = true;
} else if (xMaterial.equals(XMaterial.ENCHANTED_GOLDEN_APPLE)) {
requiresEnchantmentGlint = true;
} else if (xMaterial.equals(XMaterial.WRITTEN_BOOK)) {
requiresEnchantmentGlint = true;
} else if (xMaterial.equals(XMaterial.ENCHANTED_BOOK)) {
requiresEnchantmentGlint = true;
} else if (item.getEnchantments().size() > 0) {
requiresEnchantmentGlint = true;
}
TintIndexData tintIndexData = TintUtils.getTintData(xMaterial);
Map<ModelOverrideType, Float> predicates = new EnumMap<>(ModelOverrideType.class);
Map<String, TextureResource> providedTextures = new HashMap<>();
if (NBTEditor.contains(item, "CustomModelData")) {
int customModelData = NBTEditor.getInt(item, "CustomModelData");
predicates.put(ModelOverrideType.CUSTOM_MODEL_DATA, (float) customModelData);
}
if (xMaterial.equals(XMaterial.CHEST) || xMaterial.equals(XMaterial.TRAPPED_CHEST)) {
LocalDate time = LocalDate.now();
if (time.getMonth().equals(Month.DECEMBER) && (time.getDayOfMonth() == 24 || time.getDayOfMonth() == 25 || time.getDayOfMonth() == 26)) {
directLocation = ResourceRegistry.BUILTIN_ENTITY_MODEL_LOCATION + "christmas_chest";
}
} else if (xMaterial.isOneOf(Arrays.asList("CONTAINS:banner"))) {
BannerAssetResult bannerAsset = BannerGraphics.generateBannerAssets(item);
providedTextures.put(ResourceRegistry.BANNER_BASE_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(bannerAsset.getBase()));
providedTextures.put(ResourceRegistry.BANNER_PATTERNS_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(bannerAsset.getPatterns()));
} else if (xMaterial.equals(XMaterial.SHIELD)) {
BannerAssetResult shieldAsset = BannerGraphics.generateShieldAssets(item);
providedTextures.put(ResourceRegistry.SHIELD_BASE_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(shieldAsset.getBase()));
providedTextures.put(ResourceRegistry.SHIELD_PATTERNS_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(shieldAsset.getPatterns()));
} else if (xMaterial.equals(XMaterial.PLAYER_HEAD)) {
BufferedImage skinImage = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ENTITY_TEXTURE_LOCATION + "steve").getTexture();
try {
String base64 = SkinUtils.getSkinValue(item.getItemMeta());
if (base64 != null) {
JSONObject json = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(base64)));
String value = (String) ((JSONObject) ((JSONObject) json.get("textures")).get("SKIN")).get("url");
skinImage = ImageUtils.downloadImage(value);
}
} catch (ParseException e) {
e.printStackTrace();
}
providedTextures.put(ResourceRegistry.SKIN_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(ModelUtils.convertToModernSkinTexture(skinImage)));
} else if (xMaterial.equals(XMaterial.ELYTRA)) {
int durability = item.getType().getMaxDurability() - (InteractiveChat.version.isLegacy() ? item.getDurability() : ((Damageable) item.getItemMeta()).getDamage());
if (durability <= 1) {
predicates.put(ModelOverrideType.BROKEN, 1F);
}
} else if (xMaterial.equals(XMaterial.CROSSBOW)) {
CrossbowMeta meta = (CrossbowMeta) item.getItemMeta();
List<ItemStack> charged = meta.getChargedProjectiles();
if (charged != null && !charged.isEmpty()) {
predicates.put(ModelOverrideType.CHARGED, 1F);
ItemStack charge = charged.get(0);
XMaterial chargeType = XMaterialUtils.matchXMaterial(charge);
if (chargeType.equals(XMaterial.FIREWORK_ROCKET)) {
predicates.put(ModelOverrideType.FIREWORK, 1F);
}
}
} else if (xMaterial.equals(XMaterial.CLOCK)) {
ICPlayer onlinePlayer = player.getPlayer();
long time = ((onlinePlayer != null && onlinePlayer.isLocal() ? ((ICPlayer) player).getLocalPlayer().getPlayerTime() : Bukkit.getWorlds().get(0).getTime()) % 24000) - 6000;
if (time < 0) {
time += 24000;
}
double timePhase = (double) time / 24000;
predicates.put(ModelOverrideType.TIME, (float) (timePhase - 0.0078125));
} else if (xMaterial.equals(XMaterial.COMPASS)) {
double angle;
ICPlayer icplayer = player.getPlayer();
if (icplayer != null && icplayer.isLocal()) {
if (InteractiveChat.version.isNewerOrEqualTo(MCVersion.V1_16)) {
CompassMeta meta = (CompassMeta) item.getItemMeta();
Location target;
if (meta.hasLodestone()) {
Location lodestone = meta.getLodestone();
target = new Location(lodestone.getWorld(), lodestone.getBlockX() + 0.5, lodestone.getBlockY(), lodestone.getBlockZ() + 0.5, lodestone.getYaw(), lodestone.getPitch());
requiresEnchantmentGlint = true;
} else if (icplayer.getLocalPlayer().getWorld().getEnvironment().equals(Environment.NORMAL)) {
Location spawn = icplayer.getLocalPlayer().getWorld().getSpawnLocation();
target = new Location(spawn.getWorld(), spawn.getBlockX() + 0.5, spawn.getBlockY(), spawn.getBlockZ() + 0.5, spawn.getYaw(), spawn.getPitch());
} else {
target = null;
}
if (target != null && target.getWorld().equals(icplayer.getLocalPlayer().getWorld())) {
Location playerLocation = icplayer.getLocalPlayer().getEyeLocation();
playerLocation.setPitch(0);
Vector looking = playerLocation.getDirection();
Vector pointing = target.toVector().subtract(playerLocation.toVector());
pointing.setY(0);
double degree = VectorUtils.getBearing(looking, pointing);
if (degree < 0) {
degree += 360;
}
angle = degree / 360;
} else {
angle = RANDOM.nextDouble();
}
} else {
if (icplayer.getLocalPlayer().getWorld().getEnvironment().equals(Environment.NORMAL)) {
Location spawn = icplayer.getLocalPlayer().getWorld().getSpawnLocation();
Location target = new Location(spawn.getWorld(), spawn.getBlockX() + 0.5, spawn.getBlockY(), spawn.getBlockZ() + 0.5, spawn.getYaw(), spawn.getPitch());
Location playerLocation = icplayer.getLocalPlayer().getEyeLocation();
playerLocation.setPitch(0);
Vector looking = playerLocation.getDirection();
Vector pointing = target.toVector().subtract(playerLocation.toVector());
pointing.setY(0);
double degree = VectorUtils.getBearing(looking, pointing);
if (degree < 0) {
degree += 360;
}
angle = degree / 360;
} else {
angle = RANDOM.nextDouble();
}
}
} else {
if (InteractiveChat.version.isNewerOrEqualTo(MCVersion.V1_16)) {
CompassMeta meta = (CompassMeta) item.getItemMeta();
if (meta.hasLodestone()) {
requiresEnchantmentGlint = true;
}
}
angle = 0;
}
predicates.put(ModelOverrideType.ANGLE, (float) (angle - 0.015625));
} else if (xMaterial.equals(XMaterial.LIGHT)) {
int level = 15;
Object blockStateObj = item.getItemMeta().serialize().get("BlockStateTag");
if (blockStateObj != null && blockStateObj instanceof Map) {
Object levelObj = ((Map<?, Object>) blockStateObj).get("level");
if (levelObj != null) {
try {
level = Integer.parseInt(levelObj.toString().replace("i", ""));
} catch (NumberFormatException e) {
}
}
}
predicates.put(ModelOverrideType.LEVEL, (float) level / 16F);
} else if (item.getItemMeta() instanceof LeatherArmorMeta) {
LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta();
Color color = new Color(meta.getColor().asRGB());
if (xMaterial.equals(XMaterial.LEATHER_HORSE_ARMOR)) {
BufferedImage itemImage = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + xMaterial.name().toLowerCase()).getTexture(32, 32);
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(itemImage), color);
itemImage = ImageUtils.multiply(itemImage, colorOverlay);
providedTextures.put(ResourceRegistry.LEATHER_HORSE_ARMOR_PLACEHOLDER, new GeneratedTextureResource(itemImage));
} else {
BufferedImage itemImage = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + xMaterial.name().toLowerCase()).getTexture(32, 32);
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(itemImage), color);
itemImage = ImageUtils.multiply(itemImage, colorOverlay);
if (xMaterial.name().contains("HELMET")) {
providedTextures.put(ResourceRegistry.LEATHER_HELMET_PLACEHOLDER, new GeneratedTextureResource(itemImage));
} else if (xMaterial.name().contains("CHESTPLATE")) {
providedTextures.put(ResourceRegistry.LEATHER_CHESTPLATE_PLACEHOLDER, new GeneratedTextureResource(itemImage));
} else if (xMaterial.name().contains("LEGGINGS")) {
providedTextures.put(ResourceRegistry.LEATHER_LEGGINGS_PLACEHOLDER, new GeneratedTextureResource(itemImage));
} else if (xMaterial.name().contains("BOOTS")) {
providedTextures.put(ResourceRegistry.LEATHER_BOOTS_PLACEHOLDER, new GeneratedTextureResource(itemImage));
}
}
} else if (item.getItemMeta() instanceof PotionMeta) {
if (xMaterial.equals(XMaterial.TIPPED_ARROW)) {
PotionMeta meta = (PotionMeta) item.getItemMeta();
PotionType potiontype = InteractiveChat.version.isOld() ? Potion.fromItemStack(item).getType() : meta.getBasePotionData().getType();
BufferedImage tippedArrowHead = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + "tipped_arrow_head").getTexture(32, 32);
int color;
try {
if (meta.hasColor()) {
color = meta.getColor().asRGB();
} else {
color = PotionUtils.getPotionBaseColor(potiontype);
}
} catch (Throwable e) {
color = PotionUtils.getPotionBaseColor(PotionType.WATER);
}
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(tippedArrowHead), color);
tippedArrowHead = ImageUtils.multiply(tippedArrowHead, colorOverlay);
providedTextures.put(ResourceRegistry.TIPPED_ARROW_HEAD_PLACEHOLDER, new GeneratedTextureResource(tippedArrowHead));
} else {
PotionMeta meta = (PotionMeta) item.getItemMeta();
PotionType potiontype = InteractiveChat.version.isOld() ? Potion.fromItemStack(item).getType() : meta.getBasePotionData().getType();
BufferedImage potionOverlay = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + "potion_overlay").getTexture(32, 32);
int color;
try {
if (meta.hasColor()) {
color = meta.getColor().asRGB();
} else {
color = PotionUtils.getPotionBaseColor(potiontype);
}
} catch (Throwable e) {
color = PotionUtils.getPotionBaseColor(PotionType.WATER);
}
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(potionOverlay), color);
potionOverlay = ImageUtils.multiply(potionOverlay, colorOverlay);
providedTextures.put(ResourceRegistry.POTION_OVERLAY_PLACEHOLDER, new GeneratedTextureResource(potionOverlay));
if (potiontype != null) {
if (!(potiontype.name().equals("WATER") || potiontype.name().equals("AWKWARD") || potiontype.name().equals("MUNDANE") || potiontype.name().equals("THICK") || potiontype.name().equals("UNCRAFTABLE"))) {
requiresEnchantmentGlint = true;
}
}
}
} else if (xMaterial.isOneOf(Arrays.asList("CONTAINS:spawn_egg"))) {
SpawnEggTintData tintData = TintUtils.getSpawnEggTint(xMaterial);
if (tintData != null) {
BufferedImage baseImage = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + "spawn_egg").getTexture();
BufferedImage overlayImage = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ITEM_TEXTURE_LOCATION + "spawn_egg_overlay").getTexture(baseImage.getWidth(), baseImage.getHeight());
BufferedImage colorBase = ImageUtils.changeColorTo(ImageUtils.copyImage(baseImage), tintData.getBase());
BufferedImage colorOverlay = ImageUtils.changeColorTo(ImageUtils.copyImage(overlayImage), tintData.getOverlay());
baseImage = ImageUtils.multiply(baseImage, colorBase);
overlayImage = ImageUtils.multiply(overlayImage, colorOverlay);
providedTextures.put(ResourceRegistry.SPAWN_EGG_PLACEHOLDER, new GeneratedTextureResource(baseImage));
providedTextures.put(ResourceRegistry.SPAWN_EGG_OVERLAY_PLACEHOLDER, new GeneratedTextureResource(overlayImage));
}
} else if (InteractiveChat.version.isLegacy() && xMaterial.isOneOf(Arrays.asList("CONTAINS:bed"))) {
String colorName = xMaterial.name().replace("_BED", "").toLowerCase();
BufferedImage bedTexture = InteractiveChatDiscordSrvAddon.plugin.resourceManager.getTextureManager().getTexture(ResourceRegistry.ENTITY_TEXTURE_LOCATION + "bed/" + colorName).getTexture();
providedTextures.put(ResourceRegistry.LEGACY_BED_TEXTURE_PLACEHOLDER, new GeneratedTextureResource(bedTexture));
}
return new ItemStackProcessResult(requiresEnchantmentGlint, predicates, providedTextures, tintIndexData, directLocation);
}
use of com.loohp.interactivechat.objectholders.ICPlayer in project InteractiveChat-DiscordSRV-Addon by LOOHP.
the class OutboundToDiscordEvents method onGameToDiscord.
@Subscribe(priority = ListenerPriority.HIGHEST)
public void onGameToDiscord(GameChatMessagePreProcessEvent event) {
Debug.debug("Triggering onGameToDiscord");
InteractiveChatDiscordSrvAddon.plugin.messagesCounter.incrementAndGet();
Player sender = event.getPlayer();
ICPlayer icSender = ICPlayerFactory.getICPlayer(sender);
Component message = ComponentStringUtils.toRegularComponent(event.getMessageComponent());
message = processGameMessage(icSender, message);
event.setMessageComponent(ComponentStringUtils.toDiscordSRVComponent(message));
}
use of com.loohp.interactivechat.objectholders.ICPlayer in project InteractiveChat-DiscordSRV-Addon by LOOHP.
the class OutboundToDiscordEvents method discordMessageSent.
// =====
@Subscribe(priority = ListenerPriority.HIGHEST)
public void discordMessageSent(DiscordGuildMessageSentEvent event) {
Debug.debug("Triggered discordMessageSent");
Message message = event.getMessage();
String textOriginal = message.getContentRaw();
TextChannel channel = event.getChannel();
if (!InteractiveChatDiscordSrvAddon.plugin.isEnabled()) {
return;
}
Bukkit.getScheduler().runTaskAsynchronously(InteractiveChatDiscordSrvAddon.plugin, () -> {
String text = textOriginal;
if (!text.contains("<ICD=")) {
return;
}
Set<Integer> matches = new LinkedHashSet<>();
synchronized (DATA) {
for (int key : DATA.keySet()) {
if (text.contains("<ICD=" + key + ">")) {
text = text.replace("<ICD=" + key + ">", "");
matches.add(key);
}
}
}
if (matches.isEmpty()) {
Debug.debug("discordMessageSent keys empty");
return;
}
message.editMessage(text + " ...").queue();
ICPlayer player = DATA.get(matches.iterator().next()).getPlayer();
List<DiscordDisplayData> dataList = new ArrayList<>();
for (int key : matches) {
DiscordDisplayData data = DATA.remove(key);
if (data != null) {
dataList.add(data);
}
}
dataList.sort(DISPLAY_DATA_COMPARATOR);
Debug.debug("discordMessageSent creating contents");
List<DiscordMessageContent> contents = createContents(dataList, player.isLocal() ? player.getLocalPlayer() : (Bukkit.getOnlinePlayers().isEmpty() ? null : Bukkit.getOnlinePlayers().iterator().next()));
DiscordImageEvent discordImageEvent = new DiscordImageEvent(channel, textOriginal, text, contents, false, true);
Bukkit.getPluginManager().callEvent(discordImageEvent);
Debug.debug("discordMessageSent sending to discord, Cancelled: " + discordImageEvent.isCancelled());
if (discordImageEvent.isCancelled()) {
message.editMessage(discordImageEvent.getOriginalMessage()).queue();
} else {
text = discordImageEvent.getNewMessage();
MessageAction action = message.editMessage(text);
List<MessageEmbed> embeds = new ArrayList<>();
for (DiscordMessageContent content : contents) {
embeds.addAll(content.toJDAMessageEmbeds());
for (Entry<String, byte[]> attachment : content.getAttachments().entrySet()) {
action = action.addFile(attachment.getValue(), attachment.getKey());
}
}
action.setEmbeds(embeds).queue();
}
});
}
Aggregations