Merge branch 'main' of https://github.com/LAX1DUDE/eaglercraft into LAX1DUDE-main

This commit is contained in:
ayunami2000 2022-05-18 20:51:27 -04:00
commit 108f34c201
70 changed files with 100260 additions and 126508 deletions

View File

@ -63,7 +63,7 @@ teavm {
classesToPreserve = null;
stopOnErrors = false;
optimizationLevel = "FULL"; //org.teavm.vm.TeaVMOptimizationLevel.SIMPLE;
optimizationLevel = "ADVANCED"; //org.teavm.vm.TeaVMOptimizationLevel.SIMPLE;
fastGlobalAnalysis = false;
targetType = "JAVASCRIPT"; //org.teavm.tooling.TeaVMTargetType.JAVASCRIPT;
cacheDirectory = null;

View File

@ -38,6 +38,7 @@ public interface QueryConnection {
toSend.put("brand", EaglercraftBungee.brand);
toSend.put("vers", EaglercraftBungee.version);
toSend.put("cracked", EaglercraftBungee.cracked);
toSend.put("secure", false);
toSend.put("time", System.currentTimeMillis());
toSend.put("uuid", BungeeCord.getInstance().config.getUuid());
toSend.put("data", msg);
@ -51,6 +52,7 @@ public interface QueryConnection {
toSend.put("brand", EaglercraftBungee.brand);
toSend.put("vers", EaglercraftBungee.version);
toSend.put("cracked", EaglercraftBungee.cracked);
toSend.put("secure", false);
toSend.put("time", System.currentTimeMillis());
toSend.put("uuid", BungeeCord.getInstance().config.getUuid());
toSend.put("data", msg);

View File

@ -26,6 +26,7 @@ public class Configuration {
private boolean onlineMode;
private int playerLimit;
private String name;
private boolean showBanType;
public Configuration() {
this.timeout = 30000;
@ -51,6 +52,7 @@ public class Configuration {
this.onlineMode = false;
this.playerLimit = adapter.getInt("player_limit", this.playerLimit);
this.name = adapter.getString("server_name", EaglercraftBungee.name + " Server");
this.showBanType = adapter.getBoolean("display_ban_type_on_kick", false);
Preconditions.checkArgument(this.listeners != null && !this.listeners.isEmpty(), (Object) "No listeners defined.");
final Map<String, ServerInfo> newServers = adapter.getServers();
Preconditions.checkArgument(newServers != null && !newServers.isEmpty(), (Object) "No servers defined");
@ -102,4 +104,9 @@ public class Configuration {
public String getServerName() {
return name;
}
public boolean shouldShowBanType() {
return this.showBanType;
}
}

View File

@ -41,6 +41,7 @@ import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.eaglercraft.BanList;
import net.md_5.bungee.eaglercraft.WebSocketProxy;
import net.md_5.bungee.eaglercraft.BanList.BanCheck;
import net.md_5.bungee.eaglercraft.BanList.BanState;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.protocol.packet.PacketFEPing;
import net.md_5.bungee.Util;
@ -164,7 +165,11 @@ public class InitialHandler extends PacketHandler implements PendingConnection {
default:
System.err.println("Player '" + un + "' is banned: " + bc.string);
}
this.disconnect("" + ChatColor.RED + "You are banned.\n" + ChatColor.DARK_GRAY + "Reason: " + bc.string);
if(bc.reason == BanState.USER_BANNED || ((BungeeCord)bungee).config.shouldShowBanType()) {
this.disconnect("" + ChatColor.RED + "You are banned.\n" + ChatColor.DARK_GRAY + "Reason: " + bc.string);
}else {
this.disconnect("" + ChatColor.RED + "You are banned.");
}
return;
}
final int limit = BungeeCord.getInstance().config.getPlayerLimit();
@ -266,7 +271,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection {
@Override
public InetSocketAddress getVirtualHost() {
return (this.handshake == null) ? null : new InetSocketAddress(this.handshake.getHost(), this.handshake.getPort());
return (this.handshake == null) ? null : new InetSocketAddress(this.handshake.getHost(), this.handshake.getPort() & 0xFFFF);
}
@Override

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -40,7 +40,7 @@ public class VideoMapPacketCodec {
this.requiresFullResetPacket = true;
this.isDisabled = true;
}
/**
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
* @param posX audio playback X coord
@ -48,7 +48,14 @@ public class VideoMapPacketCodec {
* @param posZ audio playback Z coord
*/
public VideoMapPacketCodec(int[][] mapIds, double posX, double posY, double posZ) {
this(mapIds, posX, posY, posZ, 1.0f);
this(mapIds, posX, posY, posZ, 0.5f);
}
/**
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
*/
public VideoMapPacketCodec(int[][] mapIds) {
this(mapIds, 0, 100, 0, 0.5f);
}
/**
@ -167,7 +174,7 @@ public class VideoMapPacketCodec {
/**
* @param url URL to an MP4 or other HTML5 supported video file
* @param loop If the video file should loop
* @param durationSeconds duration of the video in seconds
* @param duration duration of the video in seconds
* @return packet to send to players
*/
public byte[] beginPlayback(String url, boolean loop, float duration) {

View File

@ -20,7 +20,7 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
public VideoMapPacketCodecBukkit(int[][] mapIds, double posX, double posY, double posZ, float volume) {
super(mapIds, posX, posY, posZ, volume);
}
/**
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
* @param posX audio playback X coord
@ -28,13 +28,23 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
* @param posZ audio playback Z coord
*/
public VideoMapPacketCodecBukkit(int[][] mapIds, double posX, double posY, double posZ) {
super(mapIds, posX, posY, posZ, 1.0f);
super(mapIds, posX, posY, posZ);
}
/**
* @param mapIds 2D grid of map IDs that make up the screen (mapIds[y][x])
*/
public VideoMapPacketCodecBukkit(int[][] mapIds) {
super(mapIds);
}
public static class VideoMapPacket {
protected final Object packet;
protected VideoMapPacket(byte[] packet) {
this.packet = new Packet131ItemData((short)104, (short)0, packet);
this(packet, false);
}
protected VideoMapPacket(byte[] packet, boolean image) {
this.packet = new Packet131ItemData((short)(104 + (image ? 1 : 0)), (short)0, packet);
}
public Object getNativePacket() {
return packet;
@ -72,7 +82,15 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
public VideoMapPacket disableVideoBukkit() {
return new VideoMapPacket(disableVideo());
}
/**
* unloads image and resets all map object to vanilla renderer
* @return packet to send to players
*/
public VideoMapPacket disableImageBukkit() {
return new VideoMapPacket(disableVideo(), true);
}
/**
* syncs the server side video timestamp with players
* @return packet to send to players
@ -80,7 +98,15 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
public VideoMapPacket syncPlaybackWithPlayersBukkit() {
return new VideoMapPacket(syncPlaybackWithPlayers());
}
/**
* syncs the server side image with players
* @return packet to send to players
*/
public VideoMapPacket syncPlaybackWithPlayersImageBukkit() {
return new VideoMapPacket(syncPlaybackWithPlayers(), true);
}
/**
* @param url URL to an MP4 or other HTML5 supported video file
* @param loop If the video file should loop
@ -90,7 +116,15 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
public VideoMapPacket beginPlaybackBukkit(String url, boolean loop, float duration) {
return new VideoMapPacket(beginPlayback(url, loop, duration));
}
/**
* @param url URL to a PNG, JPEG, GIF, or other HTML5 supported image file
* @return packet to send to players
*/
public VideoMapPacket beginPlaybackImageBukkit(String url) {
return new VideoMapPacket(beginPlayback(url));
}
/**
* Tells the browser to pre-load a URL to a video to be played in the future
* @param url the URL of the video
@ -101,6 +135,16 @@ public class VideoMapPacketCodecBukkit extends VideoMapPacketCodec {
return new VideoMapPacket(bufferVideo(url, ttl));
}
/**
* Tells the browser to pre-load a URL to an image to be played in the future
* @param url the URL of the image
* @param ttl the amount of time the image should stay loaded
* @return packet to send to players
*/
public static VideoMapPacket bufferImageBukkit(String url, int ttl) {
return new VideoMapPacket(bufferVideo(url, ttl), true);
}
/**
* @param time time in seconds to seek the video to
*/

View File

@ -13,6 +13,7 @@ import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
@ -34,6 +35,7 @@ import java.util.LinkedList;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@ -65,6 +67,7 @@ import org.lwjgl.util.glu.GLU;
import de.cuina.fireandfuel.CodecJLayerMP3;
import net.lax1dude.eaglercraft.AssetRepository;
import net.lax1dude.eaglercraft.EaglerImage;
import net.lax1dude.eaglercraft.EarlyLoadScreen;
import net.lax1dude.eaglercraft.ServerQuery;
import net.lax1dude.eaglercraft.adapter.EaglerAdapterImpl2.ProgramGL;
@ -635,6 +638,18 @@ public class EaglerAdapterImpl2 {
return GL20.glGetAttribLocation(p1.obj, p2);
}
public static final EaglerImage loadPNG(byte[] data) {
try {
BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
int[] pxls = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
return new EaglerImage(pxls, img.getWidth(), img.getHeight(), true);
} catch (IOException e) {
System.err.println("Could not load PNG file:");
e.printStackTrace();
return null;
}
}
public static final boolean isVideoSupported() {
return false;
}
@ -703,6 +718,43 @@ public class EaglerAdapterImpl2 {
throw new UnsupportedOperationException("Video is not supported in LWJGL runtime");
}
public static final boolean isImageSupported() {
return false;
}
public static final void loadImage(String src) {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void loadImage(String src, String setJavascriptPointer) {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void loadImage(String src, String setJavascriptPointer, String javascriptOnloadFunction) {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void bufferImage(String src, int ttl) {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void unloadImage() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final boolean isImageLoaded() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void updateImageTexture() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void bindImageTexture() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final int getImageWidth() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final int getImageHeight() {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
public static final void setImageFrameRate(float seconds) {
throw new UnsupportedOperationException("Image is not supported in LWJGL runtime");
}
// =======================================================================================
// =======================================================================================
// =======================================================================================
@ -1369,7 +1421,7 @@ public class EaglerAdapterImpl2 {
}
public static final String getUserAgent() {
return System.getProperty("os.name");
return "Desktop/" + System.getProperty("os.name");
}
public static final String getClipboard() {

View File

@ -1,62 +0,0 @@
package com.baislsl.png.chunk;
import com.baislsl.png.util.ByteHandler;
/**
* Created by baislsl on 17-7-9.
*/
public class Chunk {
protected long length;
protected ChunkType type;
protected byte[] data;
protected byte[] crc = new byte[4];
public byte[] dump() {
byte[] output = new byte[4 + 4 + data.length + 4];
Byte[] lengthBytes = new Byte[4];
for (int i = 0; i < 4; i++) {
output[3 - i] = (byte) (length & 0xff);
}
String typeName = type.name().toUpperCase();
for (int i = 0; i < 4; i++) {
output[4 + i] = (byte) typeName.charAt(i);
}
System.arraycopy(data, 0, output, 8, data.length);
System.arraycopy(crc, 0, output, output.length - crc.length, crc.length);
return output;
}
protected Chunk(byte[] length, byte[] type, byte[] data, byte[] crc) {
this.length = ByteHandler.byteToLong(length);
this.data = data;
this.crc = crc;
for (ChunkType chunkType : ChunkType.values()) {
if (chunkType.name().equals(ByteHandler.byteToString(type))) {
this.type = chunkType;
break;
}
}
}
public long dataLength() {
return data.length;
}
public long getLength() {
return length;
}
public ChunkType getType() {
return type;
}
public byte[] getData() {
return data;
}
public byte[] getCrc() {
return crc;
}
}

View File

@ -1,44 +0,0 @@
package com.baislsl.png.chunk;
import com.baislsl.png.decode.DecodeException;
import com.baislsl.png.decode.PNG;
/**
* Created by baislsl on 17-7-9.
*/
public enum ChunkType {
IHDR {
@Override
public void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
png.setIhdr(new IHDR(length, type, data, crc));
}
},
tRNS {
@Override
public void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
png.setTrns(new tRNS(length, type, data, crc));
}
},
PLTE {
@Override
public void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
png.setPlte(new PLTE(length, type, data, crc));
}
},
IDAT {
@Override
public void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
png.add(new IDAT(length, type, data, crc));
}
},
IEND {
@Override
public void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
png.setIend(new IEND(length, type, data, crc));
}
};
public abstract void apply(PNG png, byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException;
}

View File

@ -1,11 +0,0 @@
package com.baislsl.png.chunk;
/**
* Created by baislsl on 17-7-10.
*/
public class IDAT extends Chunk {
public IDAT(byte[] length, byte[] type, byte[] data, byte[] crc) {
super(length, type, data, crc);
}
}

View File

@ -1,10 +0,0 @@
package com.baislsl.png.chunk;
/**
* Created by baislsl on 17-7-9.
*/
public class IEND extends Chunk {
public IEND(byte[] length, byte[] type, byte[] data, byte[] crc) {
super(length, type, data, crc);
}
}

View File

@ -1,119 +0,0 @@
package com.baislsl.png.chunk;
import com.baislsl.png.decode.DecodeException;
import com.baislsl.png.util.ByteHandler;
/**
* Created by baislsl on 17-7-9.
*/
public class IHDR extends Chunk {
private long width, height;
private int bitDepth, colorType, compressionMethod, filterMethod, interlaceMethod;
final private static int[] colorTypeValid = { 0, 2, 3, 4, 6 };
final private static int[][] mapColorBitDepth = { { 1, 2, 4, 8, 16 }, // color type = 0
{}, { 8, 16 }, // color type = 2
{ 1, 2, 4, 8 }, // color type = 3
{ 8, 16 }, // color type = 4
{}, { 8, 16 } // color type = 6
};
// the number of bytes per complete pixel, rounding up to one
public int getBpp() {
if (colorType == 2) { // Each pixel is an R,G,B triple.
return 3;
} else if (colorType == 6) { // Each pixel is an R,G,B triple, followed by an alpha sample.
return 4;
} else if (colorType == 3) { // palette index, roll up to 1
return 1;
} else {
// LOG.error("Error when find bpp");
return 0;
}
}
public IHDR(byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
super(length, type, data, crc);
build();
checkLegal();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("width=");
sb.append(width);
sb.append("height=");
sb.append(height);
sb.append("bitDepth=");
sb.append(bitDepth);
sb.append("colorType=");
sb.append(colorType);
sb.append("compressionMethod=");
sb.append(compressionMethod);
sb.append("filterMethod=");
sb.append(filterMethod);
sb.append("interlaceMethod=");
sb.append(interlaceMethod);
return sb.toString();
}
private void build() {
this.width = ByteHandler.byteToLong(data);
this.height = ByteHandler.byteToLong(data, 4);
this.bitDepth = ((int) data[8]) & 0xFF;
this.colorType = ((int) data[9]) & 0xFF;
this.compressionMethod = ((int) data[10]) & 0xFF;
this.filterMethod = ((int) data[11]) & 0xFF;
this.interlaceMethod = ((int) data[12]) & 0xFF;
}
private void checkLegal() throws DecodeException {
boolean legal = false;
for (int c : colorTypeValid) {
if (c == colorType) {
legal = true;
break;
}
}
if (!legal) {
throw new DecodeException("Initialize IHDR : color type not legal to be " + colorType);
}
for (int b : mapColorBitDepth[colorType]) {
if (b == bitDepth) {
return;
}
}
throw new DecodeException(
"Initialzie IHDR : bit depth " + bitDepth + " not valid matching color type " + colorType);
}
public long getWidth() {
return this.width;
}
public long getHeight() {
return this.height;
}
public int getBitDepth() {
return bitDepth;
}
public int getColorType() {
return colorType;
}
public int getCompressionMethod() {
return compressionMethod;
}
public int getFilterMethod() {
return filterMethod;
}
public int getInterlaceMethod() {
return interlaceMethod;
}
}

View File

@ -1,35 +0,0 @@
package com.baislsl.png.chunk;
import com.baislsl.png.decode.DecodeException;
/**
* Created by baislsl on 17-7-9.
*/
public class PLTE extends Chunk {
private int[] color;
public PLTE(byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
super(length, type, data, crc);
build();
}
private void build() throws DecodeException {
if (this.length % 3 != 0)
throw new DecodeException("PLTE length can not be divide by 3");
int size = (int) length / 3;
color = new int[size];
for (int i = 0; i < size; i++) {
color[i] = (((int) data[i * 3]) & 0xFF) << 16 | (((int) data[i * 3 + 1]) & 0xFF) << 8
| (((int) data[i * 3 + 2]) & 0xFF) | 0xFF000000;
}
}
public int getColor(int i) {
return color[i];
}
public int getPaletteSize() {
return color.length;
}
}

View File

@ -1,18 +0,0 @@
package com.baislsl.png.chunk;
import com.baislsl.png.decode.DecodeException;
/**
* Created by baislsl on 17-7-9.
*/
public class tRNS extends Chunk {
public tRNS(byte[] length, byte[] type, byte[] data, byte[] crc) throws DecodeException {
super(length, type, data, crc);
}
public int getAlpha() {
return (int)data[0] & 0xFF;
}
}

View File

@ -1,22 +0,0 @@
package com.baislsl.png.decode;
/**
* Created by baislsl on 17-7-9.
*/
public class DecodeException extends Exception {
public DecodeException() {
}
public DecodeException(String message) {
super(message);
}
public DecodeException(String message, Throwable cause) {
super(message, cause);
}
public DecodeException(Throwable cause) {
super(cause);
}
}

View File

@ -1,96 +0,0 @@
package com.baislsl.png.decode;
import com.baislsl.png.chunk.ChunkType;
import com.baislsl.png.util.CRC;
import com.baislsl.png.util.ByteHandler;
import java.io.IOException;
import java.io.InputStream;
import static com.baislsl.png.util.ByteHandler.byteToLong;
/**
* Created by baislsl on 17-7-9.
*/
public class Decoder {
// private final static Logger LOG = LoggerFactory.getLogger(Decoder.class);
private final InputStream in;
private final static char[] head = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };
public Decoder(InputStream in) {
this.in = in;
}
private void readHeader() throws DecodeException, IOException {
byte[] header = readBytes(8);
for (int i = 0; i < 8; i++) {
if ((header[i] & 0xff) != (int) head[i])
throw new DecodeException("It seems that this is not a PNG files");
}
// LOG.info(ByteHandler.byteToString(header));
}
private boolean readChunk(PNG png, String chunkName, byte[] length, byte[] type, byte[] data, byte[] crc)
throws IOException, DecodeException {
for (ChunkType chunkType : ChunkType.values()) {
if (chunkType.name().equalsIgnoreCase(chunkName)) {
chunkType.apply(png, length, type, data, crc);
return true;
}
}
return false;
}
private boolean checkCrc(byte[] data, long crcNumber) {
return crcNumber == CRC.crc(data, data.length);
}
private boolean checkCrc(byte[] type, byte[] data, byte[] crc) {
long crcNumber = byteToLong(crc);
byte[] crcData = new byte[4 + data.length];
System.arraycopy(type, 0, crcData, 0, 4);
System.arraycopy(data, 0, crcData, 4, data.length);
return checkCrc(crcData, crcNumber);
}
public PNG readInPNG() throws IOException, DecodeException {
PNG png = new PNG();
readHeader();
String chunkName;
do {
byte[] length = readBytes(4);
long size = byteToLong(length);
byte[] type = readBytes(4);
chunkName = ByteHandler.byteToString(type).toUpperCase();
if ("IEND".equals(chunkName)) {
break;
}
byte[] data = readBytes((int) size);
byte[] crc = readBytes(4);
// LOG.info(ByteHandler.byteToString(type));
boolean found = readChunk(png, chunkName, length, type, data, crc);
if (!found) {
// LOG.info("Not support chunk name {}", chunkName);
}
boolean crcMatch = checkCrc(type, data, crc);
if (!crcMatch) {
throw new DecodeException("Error data stream for incorrect crc");
}
} while (!"IEND".equals(chunkName));
return png;
}
private byte[] readBytes(int size) throws IOException {
byte[] result = new byte[size];
int ret = in.read(result, 0, size);
if (ret == -1)
return null;
return result;
}
}

View File

@ -1,23 +0,0 @@
package com.baislsl.png.decode;
import com.baislsl.png.chunk.IDAT;
import java.util.ArrayList;
public class IDATManager extends ArrayList<IDAT> {
public byte[] getIDATData() {
int dataSize = 0;
for (IDAT idat : this) {
dataSize += idat.dataLength();
}
byte[] data = new byte[dataSize];
int curPos = 0;
for (IDAT idat : this) {
System.arraycopy(idat.getData(), 0, data, curPos, (int) idat.dataLength());
curPos += idat.dataLength();
}
return data;
}
}

View File

@ -1,132 +0,0 @@
package com.baislsl.png.decode;
import com.baislsl.png.chunk.*;
import com.baislsl.png.util.ReverseFilter;
import net.lax1dude.eaglercraft.EaglerInflater;
import java.io.IOException;
/**
* Created by baislsl on 17-7-9.
*/
public class PNG {
// private final static Logger LOG = LoggerFactory.getLogger(PNG.class);
public IHDR ihdr;
public IDATManager idats = new IDATManager();
public PLTE plte;
public tRNS trns;
public IEND iend;
public PNG() {
}
public boolean isAlpha() {
return this.trns != null || ihdr.getBpp() == 4;
}
public int[] getColor() throws DecodeException {
byte[] rawData = idats.getIDATData();
byte[] uncompressData = applyLZ77(rawData);
byte[][] transferData = applyReverseFilter(uncompressData);
int[] colors = applyColorTransfer(transferData);
return colors;
}
private int[] applyColorTransfer(byte[][] data) throws DecodeException {
int bpp = ihdr.getBpp();
int width = (int) ihdr.getWidth();
int height = (int) ihdr.getHeight();
int colorType = ihdr.getColorType();
int bitDepth = ihdr.getBitDepth();
int[] colors = new int[width * height];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int idx = i * width + j;
switch (colorType) {
case 2:
if (bitDepth == 8) { // bpp = 3
colors[idx] = ((int) data[i][bpp * j] & 0xff) << 16 | ((int) data[i][bpp * j + 1] & 0xff) << 8
| ((int) data[i][bpp * j + 2] & 0xff);
} else {
throw new DecodeException("not supported");
}
break;
case 6:
if (bitDepth == 8) { // bpp = 4
colors[idx] = ((int) data[i][bpp * j] & 0xff) << 16 | ((int) data[i][bpp * j + 1] & 0xff) << 8
| ((int) data[i][bpp * j + 2] & 0xff) | ((int) data[i][bpp * j + 3] & 0xff) << 24;
} else {
throw new DecodeException("not supported");
}
break;
case 3:
int gap = 8 / bitDepth;
int a = (1 << bitDepth) - 1;
int b = gap - (j % gap) - 1;
int pi = (data[i][j / gap] >> (b * bitDepth)) & a;
if (trns != null && trns.getAlpha() == pi) {
colors[idx] = 0;
}else {
colors[idx] = plte.getColor(pi);
}
break;
default:
throw new DecodeException("Do not support color type " + colorType);
}
}
}
return colors;
}
private byte[] applyLZ77(byte[] data) throws DecodeException {
byte[] result;
try {
result = EaglerInflater.uncompress(data);
} catch (IOException e) {
// LOG.error("LZ77 decode error", e);
throw new DecodeException(e);
}
// LOG.info("Size after decode={}", result.length);
return result;
}
private byte[][] applyReverseFilter(byte[] data) {
int width = (int) ihdr.getWidth(), height = (int) ihdr.getHeight();
return ReverseFilter.apply(data, width, height, ihdr.getBpp());
}
public void setIdats(IDATManager idats) {
this.idats = idats;
}
public void setIhdr(IHDR ihdr) {
this.ihdr = ihdr;
}
public void setPlte(PLTE plte) {
this.plte = plte;
}
public void setTrns(tRNS trns) {
this.trns = trns;
}
public void setIend(IEND iend) {
this.iend = iend;
}
public void add(IDAT idat) throws DecodeException {
idats.add(idat);
}
public long getWidth() {
return ihdr.getWidth();
}
public long getHeight() {
return ihdr.getHeight();
}
}

View File

@ -1,32 +0,0 @@
package com.baislsl.png.util;
/**
* Created by baislsl on 17-7-10.
*/
public class ByteHandler {
public static long byteToLong(byte[] data, int offset, int size) {
long result = 0;
for (int i = 0; i < size; i++) {
result <<= 8;
result |= ((long) data[offset + i] & 0xff);
}
return result;
}
public static long byteToLong(byte[] data, int offset) {
return byteToLong(data, offset, 4);
}
public static long byteToLong(byte[] data) {
return byteToLong(data, 0, 4);
}
public static String byteToString(byte[] data) {
StringBuilder str = new StringBuilder();
for (byte b : data) {
str.append((char) (0x0ff & b));
}
return str.toString();
}
}

View File

@ -1,35 +0,0 @@
package com.baislsl.png.util;
/**
* Created by baislsl on 17-7-9.
*/
public class CRC {
private final static long[] crcTable = new long[256];
static {
for (int i = 0; i < 256; i++) {
long c = i;
for (int k = 0; k < 8; k++) {
if ((c & 1) != 0) {
c = 0xedb88320L ^ (c >> 1);
} else {
c >>= 1;
}
}
crcTable[i] = c;
}
}
private static long updateCrc(long crc, byte[] buf, int size) {
long ans = crc;
for (int i = 0; i < size; i++) {
ans = crcTable[(int) ((ans ^ buf[i]) & 0xff)] ^ (ans >> 8);
}
return ans;
}
public static long crc(byte[] buf, int size) {
return updateCrc(0xffffffffL, buf, size) ^ 0xffffffffL;
}
}

View File

@ -1,64 +0,0 @@
package com.baislsl.png.util;
public class ReverseFilter {
private ReverseFilter() {
}
private static int paethPredictor(int a, int b, int c) {
int p = a + b - c;
int pa = Math.abs(p - a), pb = Math.abs(p - b), pc = Math.abs(p - c);
if (pa <= pb && pa <= pc)
return a;
if (pb <= pc)
return b;
return c;
}
// apply reverse Filter Algorithms to byte data
// bpp = 3
public static byte[][] apply(byte[] data, int width, int height, int bpp) {
int[] filterType = new int[height];
int[][] blocks = new int[height][width * bpp];
int dataIndex = 0;
for (int i = 0; i < height; i++) {
filterType[i] = (int) (data[dataIndex++]) & 0xFF;
for (int j = 0; j < width * bpp; j++) {
blocks[i][j] = (int) (data[dataIndex++]) & 0xFF;
}
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width * bpp; j++) {
int prior = (i == 0) ? 0 : blocks[i - 1][j];
int rawBpp = (j < bpp) ? 0 : blocks[i][j - bpp];
int bppPrior = (i == 0 || j < bpp) ? 0 : blocks[i - 1][j - bpp];
switch (filterType[i]) {
case 0: // none
break;
case 1: // sub
blocks[i][j] = blocks[i][j] + rawBpp;
break;
case 2: // up
blocks[i][j] = blocks[i][j] + prior;
break;
case 3: // average
blocks[i][j] = blocks[i][j] + (rawBpp + prior) / 2;
break;
case 4: // paeth
blocks[i][j] = blocks[i][j] + paethPredictor(rawBpp, prior, bppPrior);
break;
default:
}
blocks[i][j] &= 0xff;
}
}
byte[][] result = new byte[height][width * bpp];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width * bpp; j++) {
result[i][j] = (byte) blocks[i][j];
}
}
return result;
}
}

View File

@ -6,7 +6,7 @@ public class ConfigConstants {
public static boolean profanity = false;
public static final String version = "22w16h";
public static final String version = "22w20b";
public static final String mainMenuString = "ayuncraft " + version;
public static final String forkMe = "https://github.com/ayunami2000/ayuncraft";
@ -26,4 +26,9 @@ public class ConfigConstants {
+ "(([0-9]{1,3}\\.){3})[0-9]{1,3})" // Ip
+ "(:"
+ "[0-9]{1,5})?$"); // Port
public static int mainMenuItem = -1;
public static String mainMenuItemLine0 = null;
public static String mainMenuItemLine1 = null;
public static String mainMenuItemLine2 = null;
public static String mainMenuItemLink = null;
}

View File

@ -1,12 +1,5 @@
package net.lax1dude.eaglercraft;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import com.baislsl.png.decode.DecodeException;
import com.baislsl.png.decode.Decoder;
import com.baislsl.png.decode.PNG;
public class EaglerImage {
public final int[] data;
@ -37,16 +30,7 @@ public class EaglerImage {
}
public static final EaglerImage loadImage(byte[] file) {
try {
PNG p = (new Decoder(new ByteArrayInputStream(file))).readInPNG();
return new EaglerImage(p.getColor(), (int)p.getWidth(), (int)p.getHeight(), p.isAlpha());
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (DecodeException e) {
e.printStackTrace();
return null;
}
return EaglerAdapter.loadPNG(file);
}
public EaglerImage getSubImage(int x, int y, int pw, int ph) {

View File

@ -24,7 +24,8 @@ public class EarlyLoadScreen {
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_MIN_FILTER, _wGL_NEAREST);
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_WRAP_S, _wGL_CLAMP);
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_WRAP_T, _wGL_CLAMP);
EaglerImage img = EaglerImage.loadImage(Base64.decodeBase64(loadScreen));
//EaglerImage img = EaglerImage.loadImage(Base64.decodeBase64(loadScreen));
EaglerImage img = EaglerAdapter.loadPNG(Base64.decodeBase64(loadScreen));
IntBuffer upload = GLAllocation.createDirectIntBuffer(192*192);
upload.put(img.data);
upload.flip();
@ -116,7 +117,8 @@ public class EarlyLoadScreen {
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_MIN_FILTER, _wGL_NEAREST);
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_WRAP_S, _wGL_CLAMP);
_wglTexParameteri(_wGL_TEXTURE_2D, _wGL_TEXTURE_WRAP_T, _wGL_CLAMP);
EaglerImage img = EaglerImage.loadImage(Base64.decodeBase64(enableScreen));
//EaglerImage img = EaglerImage.loadImage(Base64.decodeBase64(enableScreen));
EaglerImage img = EaglerAdapter.loadPNG(Base64.decodeBase64(enableScreen));
IntBuffer upload = GLAllocation.createDirectIntBuffer(128*128);
upload.put(img.data);
upload.flip();

View File

@ -0,0 +1,47 @@
package net.lax1dude.eaglercraft;
public enum EnumBrowser {
DESKTOP("Desktop"), CHROME("Chrome"), EDGE("Edge"), IE("IE"),