Skip to content

Commit 583b4cc

Browse files
committed
Interaction Working
1 parent 68ea63b commit 583b4cc

File tree

6 files changed

+65
-30
lines changed

6 files changed

+65
-30
lines changed

TODO

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
High Priority Tasks:
2-
- Fix Interaction Support for Virtual Machine and Browser Maps
32
- Rewrite all JavaDocs / Code Clean Up
43
- Write Documentation for Plugin
54

mcav-common/src/main/java/me/brandonli/mcav/media/player/driver/ChromeDriverPlayer.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import me.brandonli.mcav.media.source.BrowserSource;
3131
import me.brandonli.mcav.utils.ExecutorUtils;
3232
import org.openqa.selenium.Dimension;
33+
import org.openqa.selenium.WebDriver;
3334
import org.openqa.selenium.chrome.ChromeDriver;
3435
import org.openqa.selenium.chrome.ChromeDriverService;
3536
import org.openqa.selenium.chrome.ChromeOptions;
@@ -106,7 +107,10 @@ private void startScreenCapture() {
106107
final int width = metadata.getVideoWidth();
107108
final int height = metadata.getVideoHeight();
108109
final Dimension size = new Dimension(width, height);
109-
this.driver.manage().window().setSize(size);
110+
final WebDriver.Options options = this.driver.manage();
111+
final WebDriver.Window window = options.window();
112+
window.setSize(size);
113+
window.maximize();
110114

111115
final String resource = this.source.getResource();
112116
this.driver.get(resource);
@@ -172,11 +176,17 @@ public void sendMouseEvent(final int x, final int y, final MouseClick type) {
172176

173177
private int[] translateCoordinates(final int x, final int y) {
174178
final VideoMetadata videoMetadata = this.source.getMetadata();
175-
final int targetWidth = videoMetadata.getVideoWidth();
176-
final int targetHeight = videoMetadata.getVideoHeight();
177-
final int newX = (int) (((float) x / this.frameWidth) * targetWidth);
178-
final int newY = (int) (((float) y / this.frameHeight) * targetHeight);
179-
return new int[] { newX, newY };
179+
final int sourceWidth = videoMetadata.getVideoWidth();
180+
final int sourceHeight = videoMetadata.getVideoHeight();
181+
final int targetWidth = (int) this.frameWidth;
182+
final int targetHeight = (int) this.frameHeight;
183+
final double widthRatio = (double) targetWidth / sourceWidth;
184+
final double heightRatio = (double) targetHeight / sourceHeight;
185+
final int newX = (int) (x * widthRatio);
186+
final int newY = (int) (y * heightRatio);
187+
final int clampedX = Math.clamp(newX, 0, targetWidth - 1);
188+
final int clampedY = Math.clamp(newY, 0, targetHeight - 1);
189+
return new int[] { clampedX, clampedY };
180190
}
181191

182192
/**

mcav-common/src/main/java/me/brandonli/mcav/media/player/driver/ChromeDriverServiceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public final class ChromeDriverServiceProvider {
4848
manager.clearResolutionCache();
4949
manager.cachePath(raw);
5050
manager.setup();
51-
SERVICE = new ChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).usingAnyFreePort().build();
51+
SERVICE = new ChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.WARNING).usingAnyFreePort().build();
5252
}
5353

5454
private ChromeDriverServiceProvider() {

mcav-common/src/main/java/me/brandonli/mcav/media/player/vnc/VNCPlayerImpl.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,16 +196,20 @@ public void moveMouse(final int x, final int y) {
196196
}
197197

198198
private int[] translateCoordinates(final int x, final int y) {
199-
final int originWidth = this.videoMetadata.getVideoWidth();
200-
final int originHeight = this.videoMetadata.getVideoHeight();
201199
if (this.current == null) {
202200
throw new PlayerException("VNC source not started!");
203201
}
202+
final int sourceWidth = this.videoMetadata.getVideoWidth();
203+
final int sourceHeight = this.videoMetadata.getVideoHeight();
204204
final int targetWidth = this.current.getWidth();
205205
final int targetHeight = this.current.getHeight();
206-
final int newX = (int) (((float) x / originWidth) * targetWidth);
207-
final int newY = (int) (((float) y / originHeight) * targetHeight);
208-
return new int[] { newX, newY };
206+
final double widthRatio = (double) targetWidth / sourceWidth;
207+
final double heightRatio = (double) targetHeight / sourceHeight;
208+
final int newX = (int) (x * widthRatio);
209+
final int newY = (int) (y * heightRatio);
210+
final int clampedX = Math.clamp(newX, 0, targetWidth - 1);
211+
final int clampedY = Math.clamp(newY, 0, targetHeight - 1);
212+
return new int[] { clampedX, clampedY };
209213
}
210214

211215
/**

sandbox/src/main/java/me/brandonli/mcav/sandbox/command/interaction/AbstractInteractiveCommand.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package me.brandonli.mcav.sandbox.command.interaction;
1919

2020
import io.papermc.paper.event.player.AsyncChatEvent;
21+
import java.util.Collection;
2122
import java.util.Collections;
2223
import java.util.Set;
2324
import java.util.WeakHashMap;
@@ -27,7 +28,10 @@
2728
import me.brandonli.mcav.sandbox.utils.Keys;
2829
import net.kyori.adventure.text.Component;
2930
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
31+
import org.bukkit.FluidCollisionMode;
32+
import org.bukkit.Location;
3033
import org.bukkit.Server;
34+
import org.bukkit.World;
3135
import org.bukkit.block.Block;
3236
import org.bukkit.command.CommandSender;
3337
import org.bukkit.entity.Entity;
@@ -63,6 +67,10 @@ public void registerFeature(final MCAVSandbox plugin, final AnnotationParser<Com
6367

6468
@Override
6569
public void shutdown() {
70+
if (this.player != null) {
71+
this.releasePlayer();
72+
this.player = null;
73+
}
6674
HandlerList.unregisterAll(this);
6775
}
6876

@@ -74,31 +82,37 @@ public void onBlockBreak(final BlockBreakEvent event) {
7482
}
7583

7684
final Player mcPlayer = event.getPlayer();
77-
if (!this.activePlayers.contains(mcPlayer)) {
78-
return;
79-
}
80-
81-
final RayTraceResult entityRay = mcPlayer.rayTraceEntities(100, false);
85+
final RayTraceResult entityRay = mcPlayer.rayTraceBlocks(100, FluidCollisionMode.NEVER);
8286
if (entityRay == null) {
8387
return;
8488
}
8589

86-
final Entity entity = entityRay.getHitEntity();
87-
if (!(entity instanceof final ItemFrame frame)) {
90+
final Block block = entityRay.getHitBlock();
91+
if (block == null) {
8892
return;
8993
}
9094

91-
final PersistentDataContainer data = frame.getPersistentDataContainer();
92-
if (!data.has(Keys.MAP_KEY, PersistentDataType.BOOLEAN)) {
95+
final Location blockLocation = block.getLocation();
96+
final World world = blockLocation.getWorld();
97+
final Collection<Entity> entities = world.getNearbyEntities(blockLocation, 0.5, 0.5, 0.5);
98+
for (final Entity entity : entities) {
99+
if (!(entity instanceof final ItemFrame frame)) {
100+
continue;
101+
}
102+
103+
final PersistentDataContainer data = frame.getPersistentDataContainer();
104+
if (!data.has(Keys.MAP_KEY, PersistentDataType.BOOLEAN)) {
105+
continue;
106+
}
107+
event.setCancelled(true);
108+
109+
final int[] coordinates = InteractUtils.getBoardCoordinates(mcPlayer, frame);
110+
final int x = coordinates[0];
111+
final int y = coordinates[1];
112+
this.handleLeftClick(player, x, y);
113+
93114
return;
94115
}
95-
event.setCancelled(true);
96-
97-
final Block block = event.getBlock();
98-
final int[] coordinates = InteractUtils.getBoardCoordinates(mcPlayer);
99-
final int x = coordinates[0];
100-
final int y = coordinates[1];
101-
this.handleLeftClick(player, x, y);
102116
}
103117

104118
@EventHandler
@@ -166,6 +180,7 @@ public void onChatMessage(final AsyncChatEvent event) {
166180
if (player == null) {
167181
return;
168182
}
183+
event.setCancelled(true);
169184

170185
final Component message = event.message();
171186
final String raw = PLAIN_TEXT_SERIALIZER.serialize(message);

sandbox/src/main/java/me/brandonli/mcav/sandbox/utils/InteractUtils.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@ private InteractUtils() {
3838

3939
public static int[] getBoardCoordinates(final Player player) {
4040
final Entity firstEntity = player.getTargetEntity(100);
41-
if (!(firstEntity instanceof final ItemFrame frame)) {
41+
if (firstEntity == null) {
42+
throw new IllegalArgumentException("No target entity found within range");
43+
}
44+
return getBoardCoordinates(player, firstEntity);
45+
}
46+
47+
public static int[] getBoardCoordinates(final Player player, final Entity entity) {
48+
if (!(entity instanceof final ItemFrame frame)) {
4249
throw new IllegalArgumentException("Target entity is not an ItemFrame");
4350
}
4451

0 commit comments

Comments
 (0)