From 865526f4d04cb195cf530ab60bb55afa32100659 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Tue, 19 Feb 2019 15:10:23 +0100 Subject: [PATCH] Some fixes Feb 7 --- .../sznp/virtualcomputer/DirectRenderer.java | 25 ++++++++----------- .../src/sznp/virtualcomputer/PXCLib.java | 5 +--- .../src/sznp/virtualcomputer/PluginMain.java | 5 ++-- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/VirtualComputer/src/sznp/virtualcomputer/DirectRenderer.java b/VirtualComputer/src/sznp/virtualcomputer/DirectRenderer.java index ba829d9..1e88ecf 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/DirectRenderer.java +++ b/VirtualComputer/src/sznp/virtualcomputer/DirectRenderer.java @@ -1,18 +1,16 @@ package sznp.virtualcomputer; +import com.sun.jna.Pointer; import net.minecraft.server.v1_12_R1.WorldMap; import org.bukkit.World; import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_12_R1.map.RenderData; import org.bukkit.entity.Player; import org.bukkit.map.MapCanvas; -import org.bukkit.map.MapPalette; import org.bukkit.map.MapRenderer; import org.bukkit.map.MapView; -import java.awt.*; import java.lang.reflect.Field; -import java.nio.ByteBuffer; import java.util.Map; public class DirectRenderer implements IRenderer { @@ -52,23 +50,17 @@ public class DirectRenderer implements IRenderer { private final class DummyRenderer extends MapRenderer { @Override public void render(MapView map, MapCanvas canvas, Player player) { - if(allpixels != null) - DirectRenderer.this.render(allpixels, x, y, width, height); //Render after zeroing whole map + DirectRenderer.this.render(x, y, width, height); //Render after zeroing whole map } } private Exception ex; - private ByteBuffer allpixels; private long x, y, width, height; private long lastrender; - public void setAllpixels(ByteBuffer bb) { - allpixels = bb; - } - @SuppressWarnings("deprecation") - public void render(ByteBuffer allpixels, long x, long y, long width, long height) { // TODO - this.allpixels = allpixels; //TODO: |CRASH| Prevent trying to read memory after computer is stopped + public void render(long x, long y, long width, long height) { // TODO + //TODO: |CRASH| Prevent trying to read memory after computer is stopped this.x=x; this.y=y; this.width=width; @@ -76,12 +68,15 @@ public class DirectRenderer implements IRenderer { if(System.nanoTime()-lastrender<100*1000*1000) return; try { + long p = PluginMain.pxc.updateAndGetMap((int) x, (int) y, (int) width, (int) height, null); + if (p == 0) return; + byte[] img = new Pointer(p).getByteArray(0, 128 * 128); boolean hascolor=false; - for (int i = startindex, j = 0; i < allpixels.limit() - 4 && j < buffer.length; i += 4, j++) { + for (int j = 0; j < buffer.length; j++) { if (PluginMain.Instance.checkMachineNotRunning(null)) return; - buffer[j] = MapPalette.matchColor(new Color(Byte.toUnsignedInt(allpixels.get(i)), Byte.toUnsignedInt(allpixels.get(i + 1)), Byte.toUnsignedInt(allpixels.get(i + 2)))); - if(allpixels.get(i+2)>10) + buffer[j] = img[j]; + if (img[j] != 0) hascolor=true; } if(hascolor) diff --git a/VirtualComputer/src/sznp/virtualcomputer/PXCLib.java b/VirtualComputer/src/sznp/virtualcomputer/PXCLib.java index 59ae17b..f08c21b 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/PXCLib.java +++ b/VirtualComputer/src/sznp/virtualcomputer/PXCLib.java @@ -2,9 +2,6 @@ package sznp.virtualcomputer; import jnr.ffi.Pointer; -import java.awt.*; -import java.nio.Buffer; - @SuppressWarnings("unused") public interface PXCLib { /** @@ -29,5 +26,5 @@ public interface PXCLib { * Updates map and returns it's content, where affected * @return Partial map data [mapc][data] */ - Buffer updateAndGetMap(int x, int y, int width, int height, Pointer out_changed); //TODO: Only update parts that actually updated and return them per-map (flagDirty) + long updateAndGetMap(int x, int y, int width, int height, Pointer out_changed); //TODO: Only update parts that actually updated and return them per-map (flagDirty) } diff --git a/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java b/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java index ea657fa..160e06a 100644 --- a/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java +++ b/VirtualComputer/src/sznp/virtualcomputer/PluginMain.java @@ -70,17 +70,18 @@ public class PluginMain extends JavaPlugin { vbox = manager.getVBox(); session = manager.getSessionObject(); // TODO: Events ccs.sendMessage("§bLoading Screen..."); - pxc = LibraryLoader.create(PXCLib.class).search(getDataFolder().getAbsolutePath()).load("pxc"); try { //throw new NoClassDefFoundError("Test error pls ignore"); for (short i = 0; i < 20; i++) renderers.add(new DirectRenderer(i, Bukkit.getWorlds().get(0), i * 128 * 128 * 4)); // TODO: The pixels are selected in a horribly wrong way probably + pxc = LibraryLoader.create(PXCLib.class).search(getDataFolder().getAbsolutePath()).load("pxc"); direct=true; ccs.sendMessage("§bUsing Direct Renderer, all good"); - } catch (NoClassDefFoundError e) { + } catch (NoClassDefFoundError | Exception e) { for (short i = 0; i < 20; i++) renderers.add(new BukkitRenderer(i, Bukkit.getWorlds().get(0), i * 128 * 128 * 4)); direct=false; + e.printStackTrace(); ccs.sendMessage("§6Compatibility error, using slower renderer"); } ccs.sendMessage("§bLoaded!");