Some fixes

Feb 7
This commit is contained in:
Norbi Peti 2019-02-19 15:10:23 +01:00
parent aa6d7bc236
commit 865526f4d0
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
3 changed files with 14 additions and 21 deletions

View file

@ -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)

View file

@ -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)
}

View file

@ -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!");