Server version independence, deps

Hopefully made the renderer version-independent
This commit is contained in:
Norbi Peti 2019-04-22 01:04:01 +02:00
parent b0ad790f72
commit 515fb1f4d1
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
5 changed files with 37 additions and 25 deletions

View file

@ -134,12 +134,6 @@
<version>6.0</version> <version>6.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
<version>1.12.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View file

@ -51,22 +51,12 @@
<version>1.12-R0.1-SNAPSHOT</version> <version>1.12-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <!-- <dependency> - Not using anything from here directly so we're not that dependent on versions
<groupId>org.virtualbox</groupId>
<artifactId>VirtualBox</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.virtualbox</groupId>
<artifactId>VirtualBox-MSCOM</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.bukkit</groupId> <groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId> <artifactId>craftbukkit</artifactId>
<version>1.12.2-R0.1-SNAPSHOT</version> <version>1.12.2-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency> -->
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --> <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency> <dependency>
<groupId>net.java.dev.jna</groupId> <groupId>net.java.dev.jna</groupId>

View file

@ -1,6 +1,6 @@
package sznp.virtualcomputer.renderer; package sznp.virtualcomputer.renderer;
import net.minecraft.server.v1_12_R1.WorldMap; import lombok.val;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.map.MapCanvas; import org.bukkit.map.MapCanvas;
@ -10,18 +10,22 @@ import org.bukkit.map.MapView;
import sznp.virtualcomputer.PluginMain; import sznp.virtualcomputer.PluginMain;
import sznp.virtualcomputer.util.Timing; import sznp.virtualcomputer.util.Timing;
import java.awt.*;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.function.BiConsumer;
public class GPURenderer extends MapRenderer implements IRenderer { public class GPURenderer extends MapRenderer implements IRenderer {
private byte[] buffer; private byte[] buffer;
private final GPURendererInternal kernel; private final GPURendererInternal kernel;
private WorldMap wmap;
private int mapx, mapy; private int mapx, mapy;
//Store at central location after conversion //Store at central location after conversion
private static int[] colors_; private static int[] colors_;
private int changedX = 0, changedY = 0, changedWidth = 640, changedHeight = 480; private int changedX = 0, changedY = 0, changedWidth = 640, changedHeight = 480;
private BiConsumer<Integer, Integer> flagDirty; //This way it's version independent, as long as it's named the same
private static ArrayList<GPURenderer> renderers = new ArrayList<>(); private static ArrayList<GPURenderer> renderers = new ArrayList<>();
private static Method flagDirtyMethod;
public GPURenderer(short id, World world, int mapx, int mapy) throws Exception { public GPURenderer(short id, World world, int mapx, int mapy) throws Exception {
MapView map = IRenderer.prepare(id, world); MapView map = IRenderer.prepare(id, world);
@ -43,7 +47,16 @@ public class GPURenderer extends MapRenderer implements IRenderer {
this.mapy = mapy; this.mapy = mapy;
Field field = map.getClass().getDeclaredField("worldMap"); Field field = map.getClass().getDeclaredField("worldMap");
field.setAccessible(true); field.setAccessible(true);
wmap = (WorldMap) field.get(map); val wmap = field.get(map);
if (flagDirtyMethod == null)
flagDirtyMethod = wmap.getClass().getMethod("flagDirty", int.class, int.class);
flagDirty = (x, y) -> {
try {
flagDirtyMethod.invoke(wmap, x, y);
} catch (Exception e) {
e.printStackTrace();
}
};
kernel = new GPURendererInternal(mapx, mapy, colors_); kernel = new GPURendererInternal(mapx, mapy, colors_);
renderers.add(this); renderers.add(this);
@ -78,16 +91,16 @@ public class GPURenderer extends MapRenderer implements IRenderer {
int yy = y + changedHeight >= 128 ? 127 : y + changedHeight; int yy = y + changedHeight >= 128 ? 127 : y + changedHeight;
//System.out.println("local: ("+x+", "+y+") "+w+"x"+h); //System.out.println("local: ("+x+", "+y+") "+w+"x"+h);
kernel.render(buffer); kernel.render(buffer);
wmap.flagDirty(x, y); flagDirty.accept(x, y);
wmap.flagDirty(xx, yy); // Send the changes only flagDirty.accept(xx, yy); // Send the changes only
changedX = Integer.MAX_VALUE; //Finished rendering changedX = Integer.MAX_VALUE; //Finished rendering
changedY = Integer.MAX_VALUE; //TODO: Render as soon as we receive new image changedY = Integer.MAX_VALUE; //TODO: Render as soon as we receive new image
changedWidth = -1; //Finished rendering changedWidth = -1; //Finished rendering
changedHeight = -1; changedHeight = -1;
} else { } else {
kernel.render(buffer); kernel.render(buffer);
wmap.flagDirty(0, 0); flagDirty.accept(0, 0);
wmap.flagDirty(127, 127); // Send everything flagDirty.accept(127, 127); // Send everything
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View file

@ -14,4 +14,12 @@
<version>2.1-SNAPSHOT</version> <version>2.1-SNAPSHOT</version>
</parent> </parent>
<dependencies>
<dependency>
<groupId>org.virtualbox</groupId>
<artifactId>VirtualBox-MSCOM</artifactId>
<version>6.0</version>
</dependency>
</dependencies>
</project> </project>

View file

@ -11,5 +11,12 @@
<artifactId>VirtualComputer-XPCOM</artifactId> <artifactId>VirtualComputer-XPCOM</artifactId>
<dependencies>
<dependency>
<groupId>org.virtualbox</groupId>
<artifactId>VirtualBox</artifactId>
<version>6.0</version>
</dependency>
</dependencies>
</project> </project>