Skip to content

Commit fed07cd

Browse files
committed
Added ImageFrame Hook
1 parent 7b7ec18 commit fed07cd

File tree

12 files changed

+205
-127
lines changed

12 files changed

+205
-127
lines changed

common/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,12 @@
391391
<version>4.0.10</version>
392392
<scope>provided</scope>
393393
</dependency>
394+
<dependency>
395+
<groupId>com.loohp</groupId>
396+
<artifactId>ImageFrame</artifactId>
397+
<version>1.8.7.1</version>
398+
<scope>provided</scope>
399+
</dependency>
394400
<dependency>
395401
<groupId>com.loohp</groupId>
396402
<artifactId>InteractiveChat</artifactId>

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/AssetsDownloader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import com.loohp.interactivechat.utils.FileUtils;
3030
import com.loohp.interactivechat.utils.HTTPRequestUtils;
3131
import com.loohp.interactivechat.utils.HashUtils;
32-
import com.loohp.interactivechatdiscordsrvaddon.hooks.ItemsAdderHook;
32+
import com.loohp.interactivechatdiscordsrvaddon.hooks.itemsadder.ItemsAdderHook;
3333
import com.loohp.interactivechatdiscordsrvaddon.libs.LibraryDownloadManager;
3434
import com.loohp.interactivechatdiscordsrvaddon.libs.LibraryLoader;
3535
import com.loohp.interactivechatdiscordsrvaddon.resources.ResourceDownloadManager;

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/InteractiveChatDiscordSrvAddon.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.loohp.interactivechatdiscordsrvaddon.debug.Debug;
4343
import com.loohp.interactivechatdiscordsrvaddon.graphics.ImageGeneration;
4444
import com.loohp.interactivechatdiscordsrvaddon.graphics.ImageUtils;
45+
import com.loohp.interactivechatdiscordsrvaddon.hooks.imageframe.ImageFrameEvents;
4546
import com.loohp.interactivechatdiscordsrvaddon.listeners.DiscordCommandEvents;
4647
import com.loohp.interactivechatdiscordsrvaddon.listeners.DiscordInteractionEvents;
4748
import com.loohp.interactivechatdiscordsrvaddon.listeners.DiscordReadyEvents;
@@ -128,6 +129,7 @@ public class InteractiveChatDiscordSrvAddon extends JavaPlugin implements Listen
128129
public static DiscordSRV discordsrv;
129130

130131
public static boolean itemsAdderHook = false;
132+
public static boolean imageFrameHook = false;
131133

132134
public static boolean isReady = false;
133135

@@ -358,10 +360,16 @@ public void onEnable() {
358360
}
359361

360362
if (InteractiveChat.isPluginEnabled("ItemsAdder")) {
361-
getServer().getConsoleSender().sendMessage(org.bukkit.ChatColor.AQUA + "[ICDiscordSrvAddon] InteractiveChat DiscordSRV Addon has hooked into ItemsAdder!");
363+
getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[ICDiscordSrvAddon] InteractiveChat DiscordSRV Addon has hooked into ItemsAdder!");
362364
itemsAdderHook = true;
363365
}
364366

367+
if (InteractiveChat.isPluginEnabled("ImageFrame")) {
368+
getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[ICDiscordSrvAddon] InteractiveChat DiscordSRV Addon has hooked into ImageFrame!");
369+
Bukkit.getPluginManager().registerEvents(new ImageFrameEvents(), this);
370+
imageFrameHook = true;
371+
}
372+
365373
if (!compatible()) {
366374
for (int i = 0; i < 10; i++) {
367375
getServer().getConsoleSender().sendMessage(ChatColor.RED + "[ICDiscordSrvAddon] VERSION NOT COMPATIBLE WITH INSTALLED INTERACTIVECHAT VERSION, PLEASE UPDATE BOTH TO LATEST!!!!");

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/graphics/ImageGeneration.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,27 @@ public static BufferedImage getMapImage(byte[] colors, List<MapCursor> mapCursor
10281028
return image;
10291029
}
10301030

1031+
public static BufferedImage getMapImage(BufferedImage source) {
1032+
InteractiveChatDiscordSrvAddon.plugin.imageCounter.incrementAndGet();
1033+
Debug.debug("ImageGeneration creating map image with image");
1034+
1035+
BufferedImage background = resourceManager.get().getTextureManager().getTexture(ResourceRegistry.MAP_TEXTURE_LOCATION + "map_background").getTexture();
1036+
1037+
int width = (int) Math.round(source.getWidth() * ((double) MAP_SIZE / (double) source.getHeight()));
1038+
BufferedImage image = new BufferedImage(width, MAP_SIZE, BufferedImage.TYPE_INT_ARGB);
1039+
Graphics2D g = image.createGraphics();
1040+
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
1041+
g.drawImage(background, 0, 0, image.getWidth(), image.getHeight(), null);
1042+
1043+
int borderOffsetY = (int) (image.getHeight() / 23.3333333333333333333);
1044+
int borderOffsetX = (int) (borderOffsetY * ((float) image.getWidth() / (float) image.getHeight()));
1045+
1046+
g.drawImage(source, borderOffsetX, borderOffsetY, width - borderOffsetX * 2, MAP_SIZE - borderOffsetY * 2, null);
1047+
g.dispose();
1048+
1049+
return image;
1050+
}
1051+
10311052
public static BufferedImage getToolTipImage(Component print, Key customTooltip) {
10321053
return getToolTipImage(print, false, customTooltip);
10331054
}

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/graphics/ImageUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,10 @@ public static BufferedImage raiseAlpha(BufferedImage image, int value) {
427427
}
428428

429429
public static BufferedImage squarify(BufferedImage image) {
430+
return squarify(image, null);
431+
}
432+
433+
public static BufferedImage squarify(BufferedImage image, Color backgroundColor) {
430434
if (image.getHeight() == image.getWidth()) {
431435
return image;
432436
}
@@ -436,6 +440,13 @@ public static BufferedImage squarify(BufferedImage image) {
436440

437441
BufferedImage newImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
438442

443+
if (backgroundColor != null) {
444+
Graphics2D g = newImage.createGraphics();
445+
g.setColor(backgroundColor);
446+
g.fillRect(0, 0, newImage.getWidth(), newImage.getHeight());
447+
g.dispose();
448+
}
449+
439450
for (int y = 0; y < image.getHeight(); y++) {
440451
for (int x = 0; x < image.getWidth(); x++) {
441452
int colorValue = image.getRGB(x, y);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* This file is part of InteractiveChatDiscordSrvAddon2.
3+
*
4+
* Copyright (C) 2020 - 2025. LoohpJames <jamesloohp@gmail.com>
5+
* Copyright (C) 2020 - 2025. Contributors
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
package com.loohp.interactivechatdiscordsrvaddon.hooks.imageframe;
22+
23+
import com.loohp.imageframe.api.events.HDMapPreRespondEvent;
24+
import com.loohp.interactivechatdiscordsrvaddon.graphics.ImageUtils;
25+
import com.loohp.interactivechatdiscordsrvaddon.listeners.InboundToGameEvents;
26+
import com.loohp.interactivechatdiscordsrvaddon.wrappers.GraphicsToPacketMapWrapper;
27+
import org.bukkit.event.EventHandler;
28+
import org.bukkit.event.EventPriority;
29+
import org.bukkit.event.Listener;
30+
31+
import java.awt.image.BufferedImage;
32+
33+
public class ImageFrameEvents implements Listener {
34+
35+
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
36+
public void onHDMapPreRespond(HDMapPreRespondEvent event) {
37+
int mapId = event.getMapId();
38+
GraphicsToPacketMapWrapper viewing = InboundToGameEvents.MAP_VIEWERS.get(event.getPlayer());
39+
if (viewing == null) {
40+
return;
41+
}
42+
BufferedImage image = viewing.getSingleImage();
43+
if (image == null) {
44+
return;
45+
}
46+
event.setImage(ImageUtils.squarify(image, viewing.getBackgroundColor()));
47+
}
48+
49+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* This file is part of InteractiveChatDiscordSrvAddon2.
3+
*
4+
* Copyright (C) 2020 - 2025. LoohpJames <jamesloohp@gmail.com>
5+
* Copyright (C) 2020 - 2025. Contributors
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
package com.loohp.interactivechatdiscordsrvaddon.hooks.imageframe;
22+
23+
import com.loohp.imageframe.ImageFrame;
24+
import com.loohp.imageframe.nms.NMS;
25+
import com.loohp.imageframe.objectholders.CombinedMapItemHandler;
26+
import com.loohp.imageframe.objectholders.CombinedMapItemInfo;
27+
import com.loohp.imageframe.objectholders.ImageMap;
28+
import org.bukkit.entity.Player;
29+
import org.bukkit.inventory.ItemStack;
30+
31+
import java.awt.Graphics2D;
32+
import java.awt.image.BufferedImage;
33+
import java.util.Collections;
34+
import java.util.List;
35+
import java.util.stream.Collectors;
36+
37+
public class ImageFrameHook {
38+
39+
public static void notifyHDMapCleared(Player player, int mapId) {
40+
ImageFrame.customClientNetworkManager.notifyHdMapUpdated(Collections.singleton(player.getUniqueId()), Collections.emptySet(), Collections.singleton(mapId));
41+
}
42+
43+
public static boolean isImageFrameCombinedImageItem(ItemStack itemStack) {
44+
return CombinedMapItemHandler.isCombinedMaps(itemStack);
45+
}
46+
47+
public static BufferedImage getImageFrameCombinedImage(ItemStack itemStack) {
48+
if (!isImageFrameCombinedImageItem(itemStack)) {
49+
return null;
50+
}
51+
CombinedMapItemInfo info = NMS.getInstance().getCombinedMapItemInfo(itemStack);
52+
if (info == null) {
53+
return null;
54+
}
55+
ImageMap imageMap = ImageFrame.imageMapManager.getFromImageId(info.getImageMapIndex());
56+
if (imageMap == null) {
57+
return null;
58+
}
59+
List<BufferedImage> images = imageMap.getMapIds().stream().map(i -> imageMap.getOriginalImage(i)).collect(Collectors.toList());
60+
int sizePerImage = images.get(0).getWidth();
61+
BufferedImage wholeImage = new BufferedImage(sizePerImage * imageMap.getWidth(), sizePerImage * imageMap.getHeight(), BufferedImage.TYPE_INT_ARGB);
62+
Graphics2D g = wholeImage.createGraphics();
63+
for (int i = 0; i < images.size(); i++) {
64+
int x = i % imageMap.getWidth();
65+
int y = i / imageMap.getWidth();
66+
g.drawImage(images.get(i), x * sizePerImage, y * sizePerImage, null);
67+
}
68+
g.dispose();
69+
return wholeImage;
70+
}
71+
72+
}

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/hooks/ItemsAdderHook.java renamed to common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/hooks/itemsadder/ItemsAdderHook.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1919
*/
2020

21-
package com.loohp.interactivechatdiscordsrvaddon.hooks;
21+
package com.loohp.interactivechatdiscordsrvaddon.hooks.itemsadder;
2222

2323
import dev.lone.itemsadder.api.ItemsAdder;
2424

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/utils/DiscordContentUtils.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.loohp.interactivechatdiscordsrvaddon.debug.Debug;
4343
import com.loohp.interactivechatdiscordsrvaddon.graphics.ImageGeneration;
4444
import com.loohp.interactivechatdiscordsrvaddon.graphics.ImageUtils;
45+
import com.loohp.interactivechatdiscordsrvaddon.hooks.imageframe.ImageFrameHook;
4546
import com.loohp.interactivechatdiscordsrvaddon.listeners.DiscordInteractionEvents;
4647
import com.loohp.interactivechatdiscordsrvaddon.nms.NMSAddon;
4748
import com.loohp.interactivechatdiscordsrvaddon.objectholders.DiscordDisplayData;
@@ -183,13 +184,20 @@ public static ValuePairs<List<DiscordMessageContent>, InteractionHandler> create
183184
if ((forceShow || !discordToolTip.isHideTooltip()) && (forceShow || !discordToolTip.isBaseItem() || InteractiveChatDiscordSrvAddon.plugin.itemUseTooltipImageOnBaseItem)) {
184185
BufferedImage tooltip = ImageGeneration.getToolTipImage(toolTipComponents, NMSAddon.getInstance().getCustomTooltipResourceLocation(item));
185186

186-
if (iData.isFilledMap() && InteractiveChatDiscordSrvAddon.plugin.showMaps) {
187-
MapView mapView = FilledMapUtils.getMapView(item);
188-
boolean isContextual = mapView == null || FilledMapUtils.isContextual(mapView);
189-
ICPlayer icPlayer = iData.getPlayer().getPlayer();
190-
boolean isPlayerLocal = icPlayer != null && icPlayer.isLocal();
191-
if (!isContextual || isPlayerLocal) {
192-
BufferedImage map = ImageGeneration.getMapImage(item, isPlayerLocal ? icPlayer.getLocalPlayer() : null).get();
187+
if (InteractiveChatDiscordSrvAddon.plugin.showMaps) {
188+
if (iData.isFilledMap()) {
189+
MapView mapView = FilledMapUtils.getMapView(item);
190+
boolean isContextual = mapView == null || FilledMapUtils.isContextual(mapView);
191+
ICPlayer icPlayer = iData.getPlayer().getPlayer();
192+
boolean isPlayerLocal = icPlayer != null && icPlayer.isLocal();
193+
if (!isContextual || isPlayerLocal) {
194+
BufferedImage map = ImageGeneration.getMapImage(item, isPlayerLocal ? icPlayer.getLocalPlayer() : null).get();
195+
tooltip = ImageUtils.resizeImage(tooltip, 5);
196+
tooltip = ImageUtils.appendImageBottom(tooltip, map, 10, 0);
197+
}
198+
} else if (InteractiveChatDiscordSrvAddon.imageFrameHook && ImageFrameHook.isImageFrameCombinedImageItem(item)) {
199+
BufferedImage source = ImageFrameHook.getImageFrameCombinedImage(item);
200+
BufferedImage map = ImageGeneration.getMapImage(source);
193201
tooltip = ImageUtils.resizeImage(tooltip, 5);
194202
tooltip = ImageUtils.appendImageBottom(tooltip, map, 10, 0);
195203
}

common/src/main/java/com/loohp/interactivechatdiscordsrvaddon/utils/JarUtils.java

Lines changed: 0 additions & 116 deletions
This file was deleted.

0 commit comments

Comments
 (0)