Merge pull request #15 from SBDPlugins/development

v1.4.3: Release
This commit is contained in:
Stijn Bannink 2023-03-16 19:40:57 +01:00 committed by GitHub
commit dcd1aa38a8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 135 additions and 72 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
~ This file is part of MapReflectionAPI. ~ This file is part of MapReflectionAPI.
~ Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved ~ Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
~ ~
~ This program is free software: you can redistribute it and/or modify ~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by ~ it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@
<groupId>tech.sbdevelopment</groupId> <groupId>tech.sbdevelopment</groupId>
<artifactId>MapReflectionAPI</artifactId> <artifactId>MapReflectionAPI</artifactId>
<version>1.4.2</version> <version>1.4.3</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>MapReflectionAPI</name> <name>MapReflectionAPI</name>
@ -161,7 +161,7 @@
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
<version>1.19.3-R0.1-SNAPSHOT</version> <version>1.19.4-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -3,4 +3,6 @@
These classes are from [BKCommonLib](https://github.com/bergerhealer/BKCommonLib). Only the required classes and methods These classes are from [BKCommonLib](https://github.com/bergerhealer/BKCommonLib). Only the required classes and methods
are extracted. are extracted.
Current version: master#25ad90b702cabbbf632c40f6ed209241aee38a41 (1.19.1-v1 release) **Current version:** master#3fc97d5981742f43348cac1f752404f95daa6c07
_Last update: 16-03-2023_

View file

@ -1,6 +1,6 @@
/* /*
* This file is part of MapReflectionAPI. * This file is part of MapReflectionAPI.
* Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved * Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -26,6 +26,7 @@ import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.IntPredicate;
import java.util.zip.InflaterInputStream; import java.util.zip.InflaterInputStream;
/** /**
@ -99,7 +100,7 @@ public class MCSDBubbleFormat extends MapColorSpaceData {
private void initColors() { private void initColors() {
// Set initial cell colors // Set initial cell colors
this.clearRGBData(); this.clearRGBData();
for (Bubble cell : bubbles) { for (MCSDBubbleFormat.Bubble cell : bubbles) {
for (int z = cell.z_min; z <= cell.z_max; z++) { for (int z = cell.z_min; z <= cell.z_max; z++) {
this.set(cell.x, cell.y, z, cell.color); this.set(cell.x, cell.y, z, cell.color);
} }
@ -108,63 +109,120 @@ public class MCSDBubbleFormat extends MapColorSpaceData {
} }
private void spreadColors() { private void spreadColors() {
final boolean[] all_strands = new boolean[1 << 24]; // As we'll be processing pretty much every element, allocate the full space (60MB)
for (int z = 0; z < 256; z++) { // The range of the buffer we process shrinks as we spread
System.arraycopy(this.strands[z], 0, all_strands, z << 16, 1 << 16); StrandBuffer buf;
} {
final int[] buffer = new int[1 << 24];
boolean mode = false; int count = -1;
boolean hasChanges; for (int z = 0; z < 256; z++) {
do { boolean[] layerStrands = this.strands[z];
hasChanges = false; int indexOffset = z << 16;
for (int i = 0; i < (1 << 16); i++) {
// Alternate the direction in which we process every step if (!layerStrands[i]) {
// This prevents really slow filling when the direction is 'wrong' buffer[++count] = indexOffset + i;
// The below logic is partially based on the light fixing algorithm in Light Cleaner
final int index_end, index_delta;
int index;
byte color;
if (mode = !mode) {
index_delta = 1;
index = 0;
index_end = (1 << 24);
} else {
index_delta = -1;
index = (1 << 24) - 1;
index_end = 0;
}
do {
if (!all_strands[index]) {
all_strands[index] = true;
if ((index & 0xFF) < 0xFF) {
if ((color = this.get(index + 1)) != 0) {
this.set(index, color);
hasChanges = true;
} else if ((color = this.get(index)) != 0) {
this.set(index + 1, color);
hasChanges = true;
} else {
all_strands[index] = false; // retry
}
}
if ((index & 0xFF00) < 0xFF00) {
if ((color = this.get(index + 256)) != 0) {
this.set(index, color);
hasChanges = true;
} else if ((color = this.get(index)) != 0) {
this.set(index + 256, color);
hasChanges = true;
} else {
all_strands[index] = false; // retry
}
} }
} }
} while ((index += index_delta) != index_end); }
} while (hasChanges); count++;
buf = new StrandBuffer(buffer, count);
}
// Process all until no more changes remain
buf.process(index -> {
byte color;
boolean col = ((index & 0xFF) < 0xFF);
boolean row = ((index & 0xFF00) < 0xFF00);
if (col && row) {
if ((color = this.get(index)) != 0) {
this.set(index + 1, color);
this.set(index + 256, color);
return true;
} else if ((color = this.get(index + 1)) != 0) {
this.set(index, color);
this.set(index + 256, color);
return true;
} else if ((color = this.get(index + 256)) != 0) {
this.set(index, color);
this.set(index + 1, color);
return true;
}
} else if (col) {
if ((color = this.get(index)) != 0) {
this.set(index + 1, color);
return true;
} else if ((color = this.get(index + 1)) != 0) {
this.set(index, color);
return true;
}
} else if (row) {
if ((color = this.get(index)) != 0) {
this.set(index + 256, color);
return true;
} else if ((color = this.get(index + 256)) != 0) {
this.set(index, color);
return true;
}
}
return false;
});
} }
private static class StrandBuffer {
private final int[] buf;
private int start, end;
public StrandBuffer(int[] buffer, int count) {
this.buf = buffer;
this.start = 0;
this.end = count - 1;
}
public void process(IntPredicate strandIndexProc) {
while (forward(strandIndexProc) && reverse(strandIndexProc)) {
// Process alternating over and over until there are no more changes
}
}
public boolean forward(IntPredicate strandIndexProc) {
int[] buf = this.buf;
int writeIdx = start - 1;
int endIdx = end;
boolean changed = false;
for (int i = start; i <= endIdx; ++i) {
int strandIndex = buf[i];
if (strandIndexProc.test(strandIndex)) {
changed = true;
} else {
buf[++writeIdx] = strandIndex;
}
}
this.end = writeIdx;
return changed;
}
public boolean reverse(IntPredicate strandIndexProc) {
int[] buf = this.buf;
int writeIdx = end + 1;
int startIdx = start;
boolean changed = false;
for (int i = end; i >= startIdx; --i) {
int strandIndex = buf[i];
if (strandIndexProc.test(strandIndex)) {
changed = true;
} else {
buf[--writeIdx] = strandIndex;
}
}
this.start = writeIdx;
return changed;
}
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (o == this) { if (o == this) {

View file

@ -1,6 +1,6 @@
/* /*
* This file is part of MapReflectionAPI. * This file is part of MapReflectionAPI.
* Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved * Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -64,11 +64,11 @@ public class MapReflectionAPI extends JavaPlugin {
instance = this; instance = this;
getLogger().info("----------------"); getLogger().info("----------------");
getLogger().info("MapReflectionAPI v" + getDescription().getVersion() + ""); getLogger().info("MapReflectionAPI v" + getDescription().getVersion());
getLogger().info("Made by © Copyright SBDevelopment 2022"); getLogger().info("Made by © Copyright SBDevelopment 2023");
if (!ReflectionUtil.supports(12)) { if (!ReflectionUtil.supports(12)) {
getLogger().severe("MapReflectionAPI only supports Minecraft 1.12.x - 1.19.x!"); getLogger().severe("MapReflectionAPI only supports Minecraft 1.12 - 1.19.4!");
Bukkit.getPluginManager().disablePlugin(this); Bukkit.getPluginManager().disablePlugin(this);
return; return;
} }

View file

@ -1,6 +1,6 @@
/* /*
* This file is part of MapReflectionAPI. * This file is part of MapReflectionAPI.
* Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved * Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -168,7 +168,7 @@ public class MapWrapper extends AbstractMapWrapper {
String inventoryMenuName; String inventoryMenuName;
if (ReflectionUtil.supports(19)) { //1.19 if (ReflectionUtil.supports(19)) { //1.19
inventoryMenuName = "bT"; inventoryMenuName = ReflectionUtil.VER_MINOR == 3 ? "bO" : "bT"; //1.19.4 = bO, >= 1.19.3 = bT
} else if (ReflectionUtil.supports(18)) { //1.18 } else if (ReflectionUtil.supports(18)) { //1.18
inventoryMenuName = ReflectionUtil.VER_MINOR == 1 ? "bV" : "bU"; //1.18.1 = ap, 1.18(.2) = ao inventoryMenuName = ReflectionUtil.VER_MINOR == 1 ? "bV" : "bU"; //1.18.1 = ap, 1.18(.2) = ao
} else if (ReflectionUtil.supports(17)) { //1.17, same as 1.18(.2) } else if (ReflectionUtil.supports(17)) { //1.17, same as 1.18(.2)
@ -322,8 +322,8 @@ public class MapWrapper extends AbstractMapWrapper {
Object nmsStack = createCraftItemStack(stack, mapId); Object nmsStack = createCraftItemStack(stack, mapId);
String dataWatcherObjectName; String dataWatcherObjectName;
if (ReflectionUtil.supports(19)) { //1.19, same as 1.17 and 1.18(.2) if (ReflectionUtil.supports(19)) { //1.19
dataWatcherObjectName = "ao"; dataWatcherObjectName = ReflectionUtil.VER_MINOR == 3 ? "g" : "ao"; //1.19.4 = g, >= 1.19.3 = ao
} else if (ReflectionUtil.supports(18)) { //1.18 } else if (ReflectionUtil.supports(18)) { //1.18
dataWatcherObjectName = ReflectionUtil.VER_MINOR == 1 ? "ap" : "ao"; //1.18.1 = ap, 1.18(.2) = ao dataWatcherObjectName = ReflectionUtil.VER_MINOR == 1 ? "ap" : "ao"; //1.18.1 = ap, 1.18(.2) = ao
} else if (ReflectionUtil.supports(17)) { //1.17 } else if (ReflectionUtil.supports(17)) { //1.17

View file

@ -1,6 +1,6 @@
/* /*
* This file is part of MapReflectionAPI. * This file is part of MapReflectionAPI.
* Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved * Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -115,7 +115,7 @@ public class PacketListener implements Listener {
} else if (packet.getClass().isAssignableFrom(packetPlayInSetCreativeSlotClass)) { } else if (packet.getClass().isAssignableFrom(packetPlayInSetCreativeSlotClass)) {
Object packetPlayInSetCreativeSlot = packetPlayInSetCreativeSlotClass.cast(packet); Object packetPlayInSetCreativeSlot = packetPlayInSetCreativeSlotClass.cast(packet);
int slot = (int) ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, ReflectionUtil.supports(13) ? "b" : "a"); //1.13 = b, 1.12 = a int slot = (int) ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, ReflectionUtil.supports(19, 3) ? "a" : ReflectionUtil.supports(13) ? "b" : "a"); //1.19.4 = a, 1.19.3 - 1.13 = b, 1.12 = a
Object nmsStack = ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, ReflectionUtil.supports(18) ? "c" : "getItemStack"); //1.18 = c, 1.17 = getItemStack Object nmsStack = ReflectionUtil.callDeclaredMethod(packetPlayInSetCreativeSlot, ReflectionUtil.supports(18) ? "c" : "getItemStack"); //1.18 = c, 1.17 = getItemStack
ItemStack craftStack = (ItemStack) ReflectionUtil.callMethod(craftStackClass, "asBukkitCopy", nmsStack); ItemStack craftStack = (ItemStack) ReflectionUtil.callMethod(craftStackClass, "asBukkitCopy", nmsStack);
@ -143,8 +143,8 @@ public class PacketListener implements Listener {
private Channel getChannel(Player player) { private Channel getChannel(Player player) {
Object playerHandle = getHandle(player); Object playerHandle = getHandle(player);
Object playerConnection = getDeclaredField(playerHandle, ReflectionUtil.supports(17) ? "b" : "playerConnection"); //1.17 = b, 1.16 = playerConnection Object playerConnection = getDeclaredField(playerHandle, ReflectionUtil.supports(17) ? "b" : "playerConnection"); //1.17 = b, 1.16 = playerConnection
Object networkManager = getDeclaredField(playerConnection, ReflectionUtil.supports(19) ? "b" : ReflectionUtil.supports(17) ? "a" : "networkManager"); //1.19 = b, 1.18 = a, 1.16 = networkManager Object networkManager = getDeclaredField(playerConnection, ReflectionUtil.supports(19, 3) ? "h" : ReflectionUtil.supports(19) ? "b" : ReflectionUtil.supports(17) ? "a" : "networkManager"); //1.19.4 = h, >= 1.19.3 = b, 1.18 = a, 1.16 = networkManager
return (Channel) getDeclaredField(networkManager, ReflectionUtil.supports(18) ? "m" : ReflectionUtil.supports(17) ? "k" : "channel"); //1.18 = m, 1.17 = k, 1.16 = channel return (Channel) getDeclaredField(networkManager, ReflectionUtil.supports(18) ? "m" : ReflectionUtil.supports(17) ? "k" : "channel"); //1.19 & 1.18 = m, 1.17 = k, 1.16 = channel
} }
private Vector vec3DToVector(Object vec3d) { private Vector vec3DToVector(Object vec3d) {

View file

@ -1,6 +1,6 @@
/* /*
* This file is part of MapReflectionAPI. * This file is part of MapReflectionAPI.
* Copyright (c) 2022 inventivetalent / SBDevelopment - All Rights Reserved * Copyright (c) 2022-2023 inventivetalent / SBDevelopment - All Rights Reserved
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -187,6 +187,9 @@ public class ReflectionUtil {
/** /**
* Checks whether the server version is equal or greater than the given version. * Checks whether the server version is equal or greater than the given version.
* <p>
* PAY ATTENTION! The minor version is based on the NMS version.
* This means that v1_19_R3 has major version 19 and minor version 3.
* *
* @param major the major version to compare the server version with. * @param major the major version to compare the server version with.
* @param minor the minor version to compare the server version with. * @param minor the minor version to compare the server version with.