mirror of
https://github.com/boy0001/FastAsyncWorldedit.git
synced 2025-02-11 01:51:23 +01:00
Various unfinished
Start work on command GUI Code cleanup Add new lighting mode (see config) Rename sponge -> sponge112 Fix sponge compile issues Fix fuzzy region min/max not being set on first use Fix clipboard on disk not closing on java 9 Start work on CFI chunk simplifier (for loading existing worlds) Minor tile fixes for bukkit 1.12
This commit is contained in:
parent
d78d533acd
commit
134daefa24
4
.gitignore
vendored
4
.gitignore
vendored
@ -20,6 +20,9 @@ gradle.log
|
|||||||
/forge1710/build
|
/forge1710/build
|
||||||
/sponge/build
|
/sponge/build
|
||||||
/sponge111/build
|
/sponge111/build
|
||||||
|
/nukkit/out
|
||||||
|
/sponge112/build
|
||||||
|
/core/out
|
||||||
/bukkit/build
|
/bukkit/build
|
||||||
/bukkit0/build
|
/bukkit0/build
|
||||||
/bukkit19/build
|
/bukkit19/build
|
||||||
@ -31,3 +34,4 @@ wiki_permissions.md
|
|||||||
/textures
|
/textures
|
||||||
*.iml
|
*.iml
|
||||||
/obj
|
/obj
|
||||||
|
*.jar
|
@ -3,6 +3,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':core')
|
compile project(':core')
|
||||||
|
compile 'com.sk89q:worldguard:6.0.0-SNAPSHOT'
|
||||||
compile('com.destroystokyo.paper:paper-api:1.12-R0.1-SNAPSHOT') {
|
compile('com.destroystokyo.paper:paper-api:1.12-R0.1-SNAPSHOT') {
|
||||||
exclude group: 'net.md-5'
|
exclude group: 'net.md-5'
|
||||||
}
|
}
|
||||||
@ -30,6 +31,7 @@ dependencies {
|
|||||||
compile 'org.bukkit.craftbukkit:CraftBukkit:1.8.8'
|
compile 'org.bukkit.craftbukkit:CraftBukkit:1.8.8'
|
||||||
compile 'com.comphenix.protocol:ProtocolLib-API:4.4.0-SNAPSHOT'
|
compile 'com.comphenix.protocol:ProtocolLib-API:4.4.0-SNAPSHOT'
|
||||||
compile 'com.wasteofplastic:askyblock:3.0.8.2'
|
compile 'com.wasteofplastic:askyblock:3.0.8.2'
|
||||||
|
compile 'org.inventivetalent:mapmanager:1.4.0-SNAPSHOT'
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
@ -17,6 +17,7 @@ import com.boydti.fawe.bukkit.regions.PreciousStonesFeature;
|
|||||||
import com.boydti.fawe.bukkit.regions.ResidenceFeature;
|
import com.boydti.fawe.bukkit.regions.ResidenceFeature;
|
||||||
import com.boydti.fawe.bukkit.regions.TownyFeature;
|
import com.boydti.fawe.bukkit.regions.TownyFeature;
|
||||||
import com.boydti.fawe.bukkit.regions.Worldguard;
|
import com.boydti.fawe.bukkit.regions.Worldguard;
|
||||||
|
import com.boydti.fawe.bukkit.util.BukkitReflectionUtils;
|
||||||
import com.boydti.fawe.bukkit.util.BukkitTaskMan;
|
import com.boydti.fawe.bukkit.util.BukkitTaskMan;
|
||||||
import com.boydti.fawe.bukkit.util.ItemUtil;
|
import com.boydti.fawe.bukkit.util.ItemUtil;
|
||||||
import com.boydti.fawe.bukkit.util.VaultUtil;
|
import com.boydti.fawe.bukkit.util.VaultUtil;
|
||||||
@ -374,7 +375,7 @@ public class FaweBukkit implements IFawe, Listener {
|
|||||||
public FaweQueue getNewQueue(String world, boolean fast) {
|
public FaweQueue getNewQueue(String world, boolean fast) {
|
||||||
if (playerChunk != (playerChunk = true)) {
|
if (playerChunk != (playerChunk = true)) {
|
||||||
try {
|
try {
|
||||||
Field fieldDirtyCount = ReflectionUtils.getRefClass("{nms}.PlayerChunk").getField("dirtyCount").getRealField();
|
Field fieldDirtyCount = BukkitReflectionUtils.getRefClass("{nms}.PlayerChunk").getField("dirtyCount").getRealField();
|
||||||
fieldDirtyCount.setAccessible(true);
|
fieldDirtyCount.setAccessible(true);
|
||||||
int mod = fieldDirtyCount.getModifiers();
|
int mod = fieldDirtyCount.getModifiers();
|
||||||
if ((mod & Modifier.VOLATILE) == 0) {
|
if ((mod & Modifier.VOLATILE) == 0) {
|
||||||
@ -427,7 +428,7 @@ public class FaweBukkit implements IFawe, Listener {
|
|||||||
if (fast) {
|
if (fast) {
|
||||||
if (playerChunk != (playerChunk = true)) {
|
if (playerChunk != (playerChunk = true)) {
|
||||||
try {
|
try {
|
||||||
Field fieldDirtyCount = ReflectionUtils.getRefClass("{nms}.PlayerChunk").getField("dirtyCount").getRealField();
|
Field fieldDirtyCount = BukkitReflectionUtils.getRefClass("{nms}.PlayerChunk").getField("dirtyCount").getRealField();
|
||||||
fieldDirtyCount.setAccessible(true);
|
fieldDirtyCount.setAccessible(true);
|
||||||
int mod = fieldDirtyCount.getModifiers();
|
int mod = fieldDirtyCount.getModifiers();
|
||||||
if ((mod & Modifier.VOLATILE) == 0) {
|
if ((mod & Modifier.VOLATILE) == 0) {
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
package com.boydti.fawe.bukkit.util;
|
||||||
|
|
||||||
|
import com.boydti.fawe.util.MainUtil;
|
||||||
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
|
||||||
|
public class BukkitReflectionUtils {
|
||||||
|
/**
|
||||||
|
* prefix of bukkit classes
|
||||||
|
*/
|
||||||
|
private static volatile String preClassB = null;
|
||||||
|
/**
|
||||||
|
* prefix of minecraft classes
|
||||||
|
*/
|
||||||
|
private static volatile String preClassM = null;
|
||||||
|
/**
|
||||||
|
* boolean value, TRUE if server uses forge or MCPC+
|
||||||
|
*/
|
||||||
|
private static boolean forge = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check server version and class names
|
||||||
|
*/
|
||||||
|
public static void init() {
|
||||||
|
if (Bukkit.getServer() != null) {
|
||||||
|
if (Bukkit.getVersion().contains("MCPC") || Bukkit.getVersion().contains("Forge")) {
|
||||||
|
forge = true;
|
||||||
|
}
|
||||||
|
final Server server = Bukkit.getServer();
|
||||||
|
final Class<?> bukkitServerClass = server.getClass();
|
||||||
|
String[] pas = bukkitServerClass.getName().split("\\.");
|
||||||
|
if (pas.length == 5) {
|
||||||
|
final String verB = pas[3];
|
||||||
|
preClassB = "org.bukkit.craftbukkit." + verB;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
final Method getHandle = bukkitServerClass.getDeclaredMethod("getHandle");
|
||||||
|
final Object handle = getHandle.invoke(server);
|
||||||
|
final Class handleServerClass = handle.getClass();
|
||||||
|
pas = handleServerClass.getName().split("\\.");
|
||||||
|
if (pas.length == 5) {
|
||||||
|
final String verM = pas[3];
|
||||||
|
preClassM = "net.minecraft.server." + verM;
|
||||||
|
}
|
||||||
|
} catch (final Exception ignored) {
|
||||||
|
MainUtil.handleError(ignored);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if server has forge classes
|
||||||
|
*/
|
||||||
|
public static boolean isForge() {
|
||||||
|
return forge;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get class for name. Replace {nms} to net.minecraft.server.V*. Replace {cb} to org.bukkit.craftbukkit.V*. Replace
|
||||||
|
* {nm} to net.minecraft
|
||||||
|
*
|
||||||
|
* @param classes possible class paths
|
||||||
|
* @return RefClass object
|
||||||
|
* @throws RuntimeException if no class found
|
||||||
|
*/
|
||||||
|
public static ReflectionUtils.RefClass getRefClass(final String... classes) throws RuntimeException {
|
||||||
|
if (preClassM == null) {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
for (String className : classes) {
|
||||||
|
try {
|
||||||
|
className = className.replace("{cb}", preClassB).replace("{nms}", preClassM).replace("{nm}", "net.minecraft");
|
||||||
|
return ReflectionUtils.getRefClass(Class.forName(className));
|
||||||
|
} catch (final ClassNotFoundException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("no class found: " + classes[0].replace("{cb}", preClassB).replace("{nms}", preClassM).replace("{nm}", "net.minecraft"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> getNmsClass(final String name) {
|
||||||
|
final String className = "net.minecraft.server." + getVersion() + "." + name;
|
||||||
|
return ReflectionUtils.getClass(className);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> getCbClass(final String name) {
|
||||||
|
final String className = "org.bukkit.craftbukkit." + getVersion() + "." + name;
|
||||||
|
return ReflectionUtils.getClass(className);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Class<?> getUtilClass(final String name) {
|
||||||
|
try {
|
||||||
|
return Class.forName(name); //Try before 1.8 first
|
||||||
|
} catch (final ClassNotFoundException ex) {
|
||||||
|
try {
|
||||||
|
return Class.forName("net.minecraft.util." + name); //Not 1.8
|
||||||
|
} catch (final ClassNotFoundException ex2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVersion() {
|
||||||
|
final String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
|
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
||||||
|
}
|
||||||
|
}
|
@ -25,13 +25,13 @@ public class ItemUtil {
|
|||||||
private SoftReference<Int2ObjectOpenHashMap<WeakReference<Tag>>> hashToNMSTag = new SoftReference(new Int2ObjectOpenHashMap<>());
|
private SoftReference<Int2ObjectOpenHashMap<WeakReference<Tag>>> hashToNMSTag = new SoftReference(new Int2ObjectOpenHashMap<>());
|
||||||
|
|
||||||
public ItemUtil() throws Exception {
|
public ItemUtil() throws Exception {
|
||||||
this.classCraftItemStack = ReflectionUtils.getCbClass("inventory.CraftItemStack");
|
this.classCraftItemStack = BukkitReflectionUtils.getCbClass("inventory.CraftItemStack");
|
||||||
this.classNMSItem = ReflectionUtils.getNmsClass("ItemStack");
|
this.classNMSItem = BukkitReflectionUtils.getNmsClass("ItemStack");
|
||||||
this.methodAsNMSCopy = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredMethod("asNMSCopy", ItemStack.class));
|
this.methodAsNMSCopy = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredMethod("asNMSCopy", ItemStack.class));
|
||||||
this.methodHasTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("hasTag"));
|
this.methodHasTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("hasTag"));
|
||||||
this.methodGetTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("getTag"));
|
this.methodGetTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("getTag"));
|
||||||
this.fieldHandle = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredField("handle"));
|
this.fieldHandle = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredField("handle"));
|
||||||
Class<?> classNBTTagCompound = ReflectionUtils.getNmsClass("NBTTagCompound");
|
Class<?> classNBTTagCompound = BukkitReflectionUtils.getNmsClass("NBTTagCompound");
|
||||||
this.methodSetTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("setTag", classNBTTagCompound));
|
this.methodSetTag = ReflectionUtils.setAccessible(classNMSItem.getDeclaredMethod("setTag", classNBTTagCompound));
|
||||||
this.methodAsBukkitCopy = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredMethod("asBukkitCopy", classNMSItem));
|
this.methodAsBukkitCopy = ReflectionUtils.setAccessible(classCraftItemStack.getDeclaredMethod("asBukkitCopy", classNMSItem));
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import com.boydti.fawe.Fawe;
|
|||||||
import com.boydti.fawe.FaweCache;
|
import com.boydti.fawe.FaweCache;
|
||||||
import com.boydti.fawe.bukkit.BukkitPlayer;
|
import com.boydti.fawe.bukkit.BukkitPlayer;
|
||||||
import com.boydti.fawe.bukkit.FaweBukkit;
|
import com.boydti.fawe.bukkit.FaweBukkit;
|
||||||
|
import com.boydti.fawe.bukkit.util.BukkitReflectionUtils;
|
||||||
import com.boydti.fawe.bukkit.v1_12.packet.FaweChunkPacket;
|
import com.boydti.fawe.bukkit.v1_12.packet.FaweChunkPacket;
|
||||||
import com.boydti.fawe.bukkit.v1_12.packet.MCAChunkPacket;
|
import com.boydti.fawe.bukkit.v1_12.packet.MCAChunkPacket;
|
||||||
import com.boydti.fawe.example.CharFaweChunk;
|
import com.boydti.fawe.example.CharFaweChunk;
|
||||||
@ -36,7 +37,6 @@ import java.util.UUID;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.ChunkSnapshot;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.WorldCreator;
|
import org.bukkit.WorldCreator;
|
||||||
@ -59,7 +59,7 @@ public abstract class BukkitQueue_0<CHUNK, CHUNKSECTIONS, SECTION> extends NMSMa
|
|||||||
private static Method methodGetHandle;
|
private static Method methodGetHandle;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Class<?> classCraftChunk = ReflectionUtils.getCbClass("CraftChunk");
|
Class<?> classCraftChunk = BukkitReflectionUtils.getCbClass("CraftChunk");
|
||||||
try {
|
try {
|
||||||
methodGetHandle = ReflectionUtils.setAccessible(classCraftChunk.getDeclaredMethod("getHandle"));
|
methodGetHandle = ReflectionUtils.setAccessible(classCraftChunk.getDeclaredMethod("getHandle"));
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (NoSuchMethodException e) {
|
||||||
@ -221,6 +221,11 @@ public abstract class BukkitQueue_0<CHUNK, CHUNKSECTIONS, SECTION> extends NMSMa
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeSectionLighting(SECTION sections, int layer, boolean hasSky) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static void checkVersion(String supported) {
|
public static void checkVersion(String supported) {
|
||||||
String version = Bukkit.getServer().getClass().getPackage().getName();
|
String version = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
if (!version.contains(supported)) {
|
if (!version.contains(supported)) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.boydti.fawe.bukkit.v0;
|
package com.boydti.fawe.bukkit.v0;
|
||||||
|
|
||||||
import com.boydti.fawe.FaweCache;
|
import com.boydti.fawe.FaweCache;
|
||||||
|
import com.boydti.fawe.bukkit.util.BukkitReflectionUtils;
|
||||||
import com.boydti.fawe.config.Settings;
|
import com.boydti.fawe.config.Settings;
|
||||||
import com.boydti.fawe.example.NullRelighter;
|
import com.boydti.fawe.example.NullRelighter;
|
||||||
import com.boydti.fawe.example.Relighter;
|
import com.boydti.fawe.example.Relighter;
|
||||||
@ -101,17 +102,17 @@ public class BukkitQueue_All extends BukkitQueue_0<ChunkSnapshot, ChunkSnapshot,
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
ReflectionUtils.init();
|
BukkitReflectionUtils.init();
|
||||||
classRegionFileCache = ReflectionUtils.getNmsClass("RegionFileCache");
|
classRegionFileCache = BukkitReflectionUtils.getNmsClass("RegionFileCache");
|
||||||
classRegionFile = ReflectionUtils.getNmsClass("RegionFile");
|
classRegionFile = BukkitReflectionUtils.getNmsClass("RegionFile");
|
||||||
classCraftChunk = ReflectionUtils.getCbClass("CraftChunk");
|
classCraftChunk = BukkitReflectionUtils.getCbClass("CraftChunk");
|
||||||
classNMSChunk = ReflectionUtils.getNmsClass("Chunk");
|
classNMSChunk = BukkitReflectionUtils.getNmsClass("Chunk");
|
||||||
classCraftWorld = ReflectionUtils.getCbClass("CraftWorld");
|
classCraftWorld = BukkitReflectionUtils.getCbClass("CraftWorld");
|
||||||
classNMSWorld = ReflectionUtils.getNmsClass("World");
|
classNMSWorld = BukkitReflectionUtils.getNmsClass("World");
|
||||||
classChunkProviderServer = ReflectionUtils.getNmsClass("ChunkProviderServer");
|
classChunkProviderServer = BukkitReflectionUtils.getNmsClass("ChunkProviderServer");
|
||||||
classIChunkProvider = ReflectionUtils.getNmsClass("IChunkProvider");
|
classIChunkProvider = BukkitReflectionUtils.getNmsClass("IChunkProvider");
|
||||||
classIChunkLoader = ReflectionUtils.getNmsClass("IChunkLoader");
|
classIChunkLoader = BukkitReflectionUtils.getNmsClass("IChunkLoader");
|
||||||
classChunkRegionLoader = ReflectionUtils.getNmsClass("ChunkRegionLoader");
|
classChunkRegionLoader = BukkitReflectionUtils.getNmsClass("ChunkRegionLoader");
|
||||||
|
|
||||||
methodGetHandleChunk = ReflectionUtils.setAccessible(classCraftChunk.getDeclaredMethod("getHandle"));
|
methodGetHandleChunk = ReflectionUtils.setAccessible(classCraftChunk.getDeclaredMethod("getHandle"));
|
||||||
methodGetHandleWorld = ReflectionUtils.setAccessible(classCraftWorld.getDeclaredMethod("getHandle"));
|
methodGetHandleWorld = ReflectionUtils.setAccessible(classCraftWorld.getDeclaredMethod("getHandle"));
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.boydti.fawe.bukkit.v0;
|
package com.boydti.fawe.bukkit.v0;
|
||||||
|
|
||||||
import com.boydti.fawe.FaweCache;
|
import com.boydti.fawe.FaweCache;
|
||||||
|
import com.boydti.fawe.bukkit.util.BukkitReflectionUtils;
|
||||||
import com.boydti.fawe.util.ReflectionUtils;
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
import com.sk89q.jnbt.ByteArrayTag;
|
import com.sk89q.jnbt.ByteArrayTag;
|
||||||
import com.sk89q.jnbt.ByteTag;
|
import com.sk89q.jnbt.ByteTag;
|
||||||
@ -82,13 +83,13 @@ public class FaweAdapter_All implements BukkitImplAdapter {
|
|||||||
private Map<Class<? extends Tag>, Integer> TagToId = new ConcurrentHashMap<>();
|
private Map<Class<? extends Tag>, Integer> TagToId = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public FaweAdapter_All() throws Throwable {
|
public FaweAdapter_All() throws Throwable {
|
||||||
ReflectionUtils.init();
|
BukkitReflectionUtils.init();
|
||||||
classCraftWorld = ReflectionUtils.getCbClass("CraftWorld");
|
classCraftWorld = BukkitReflectionUtils.getCbClass("CraftWorld");
|
||||||
classCraftBlock = ReflectionUtils.getCbClass("block.CraftBlock");
|
classCraftBlock = BukkitReflectionUtils.getCbClass("block.CraftBlock");
|
||||||
classCraftEntity = ReflectionUtils.getCbClass("entity.CraftEntity");
|
classCraftEntity = BukkitReflectionUtils.getCbClass("entity.CraftEntity");
|
||||||
classBiomeBase = ReflectionUtils.getNmsClass("BiomeBase");
|
classBiomeBase = BukkitReflectionUtils.getNmsClass("BiomeBase");
|
||||||
classWorld = ReflectionUtils.getNmsClass("World");
|
classWorld = BukkitReflectionUtils.getNmsClass("World");
|
||||||
classTileEntity = ReflectionUtils.getNmsClass("TileEntity");
|
classTileEntity = BukkitReflectionUtils.getNmsClass("TileEntity");
|
||||||
|
|
||||||
biomeToBiomeBase = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeToBiomeBase", Biome.class));
|
biomeToBiomeBase = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeToBiomeBase", Biome.class));
|
||||||
biomeBaseToBiome = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeBaseToBiome", classBiomeBase));
|
biomeBaseToBiome = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeBaseToBiome", classBiomeBase));
|
||||||
@ -97,7 +98,7 @@ public class FaweAdapter_All implements BukkitImplAdapter {
|
|||||||
getHandleWorld = ReflectionUtils.setAccessible(classCraftWorld.getDeclaredMethod("getHandle"));
|
getHandleWorld = ReflectionUtils.setAccessible(classCraftWorld.getDeclaredMethod("getHandle"));
|
||||||
getHandleEntity = ReflectionUtils.setAccessible(classCraftEntity.getDeclaredMethod("getHandle"));
|
getHandleEntity = ReflectionUtils.setAccessible(classCraftEntity.getDeclaredMethod("getHandle"));
|
||||||
try {
|
try {
|
||||||
classBlockPosition = ReflectionUtils.getNmsClass("BlockPosition");
|
classBlockPosition = BukkitReflectionUtils.getNmsClass("BlockPosition");
|
||||||
} catch (Throwable ignore) {
|
} catch (Throwable ignore) {
|
||||||
}
|
}
|
||||||
if (classBlockPosition != null) {
|
if (classBlockPosition != null) {
|
||||||
@ -109,9 +110,9 @@ public class FaweAdapter_All implements BukkitImplAdapter {
|
|||||||
getTileEntity2 = ReflectionUtils.setAccessible(classWorld.getDeclaredMethod("getTileEntity", int.class, int.class, int.class));
|
getTileEntity2 = ReflectionUtils.setAccessible(classWorld.getDeclaredMethod("getTileEntity", int.class, int.class, int.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
classNBTTagCompound = ReflectionUtils.getNmsClass("NBTTagCompound");
|
classNBTTagCompound = BukkitReflectionUtils.getNmsClass("NBTTagCompound");
|
||||||
classNBTBase = ReflectionUtils.getNmsClass("NBTBase");
|
classNBTBase = BukkitReflectionUtils.getNmsClass("NBTBase");
|
||||||
classNBTTagInt = ReflectionUtils.getNmsClass("NBTTagInt");
|
classNBTTagInt = BukkitReflectionUtils.getNmsClass("NBTTagInt");
|
||||||
newNBTTagInt = ReflectionUtils.setAccessible(classNBTTagInt.getConstructor(int.class));
|
newNBTTagInt = ReflectionUtils.setAccessible(classNBTTagInt.getConstructor(int.class));
|
||||||
setNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getDeclaredMethod("set", String.class, classNBTBase));
|
setNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getDeclaredMethod("set", String.class, classNBTBase));
|
||||||
newNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getConstructor());
|
newNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getConstructor());
|
||||||
@ -139,7 +140,7 @@ public class FaweAdapter_All implements BukkitImplAdapter {
|
|||||||
int noMods = Modifier.STATIC;
|
int noMods = Modifier.STATIC;
|
||||||
int hasMods = 0;
|
int hasMods = 0;
|
||||||
for (int i = 0; i < nmsClasses.size(); i++) {
|
for (int i = 0; i < nmsClasses.size(); i++) {
|
||||||
Class<?> nmsClass = ReflectionUtils.getNmsClass(nmsClasses.get(i));
|
Class<?> nmsClass = BukkitReflectionUtils.getNmsClass(nmsClasses.get(i));
|
||||||
Class<? extends Tag> weClass = weClasses.get(i);
|
Class<? extends Tag> weClass = weClasses.get(i);
|
||||||
TagToId.put(weClass, ids[i]);
|
TagToId.put(weClass, ids[i]);
|
||||||
|
|
||||||
@ -217,15 +218,15 @@ public class FaweAdapter_All implements BukkitImplAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
classEntity = ReflectionUtils.getNmsClass("Entity");
|
classEntity = BukkitReflectionUtils.getNmsClass("Entity");
|
||||||
classEntityTypes = ReflectionUtils.getNmsClass("EntityTypes");
|
classEntityTypes = BukkitReflectionUtils.getNmsClass("EntityTypes");
|
||||||
|
|
||||||
getBukkitEntity = ReflectionUtils.setAccessible(classEntity.getDeclaredMethod("getBukkitEntity"));
|
getBukkitEntity = ReflectionUtils.setAccessible(classEntity.getDeclaredMethod("getBukkitEntity"));
|
||||||
addEntity = ReflectionUtils.setAccessible(classWorld.getDeclaredMethod("addEntity", classEntity, CreatureSpawnEvent.SpawnReason.class));
|
addEntity = ReflectionUtils.setAccessible(classWorld.getDeclaredMethod("addEntity", classEntity, CreatureSpawnEvent.SpawnReason.class));
|
||||||
setLocation = ReflectionUtils.setAccessible(classEntity.getDeclaredMethod("setLocation", double.class, double.class, double.class, float.class, float.class));
|
setLocation = ReflectionUtils.setAccessible(classEntity.getDeclaredMethod("setLocation", double.class, double.class, double.class, float.class, float.class));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
classMinecraftKey = ReflectionUtils.getNmsClass("MinecraftKey");
|
classMinecraftKey = BukkitReflectionUtils.getNmsClass("MinecraftKey");
|
||||||
newMinecraftKey = classMinecraftKey.getConstructor(String.class);
|
newMinecraftKey = classMinecraftKey.getConstructor(String.class);
|
||||||
} catch (Throwable ignore) {
|
} catch (Throwable ignore) {
|
||||||
}
|
}
|
||||||
|
@ -648,19 +648,15 @@ public class BukkitQueue_1_10 extends BukkitQueue_0<net.minecraft.server.v1_10_R
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode != RelightMode.NONE) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.a(new NibbleArray());
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.b(new NibbleArray());
|
||||||
section.a(new NibbleArray()); // Emitted
|
|
||||||
if (sky) {
|
|
||||||
section.b(new NibbleArray()); // Skylight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -650,19 +650,15 @@ public class BukkitQueue_1_11 extends BukkitQueue_0<net.minecraft.server.v1_11_R
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode != RelightMode.NONE) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.a(new NibbleArray());
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.b(new NibbleArray());
|
||||||
section.a(new NibbleArray()); // Emitted
|
|
||||||
if (sky) {
|
|
||||||
section.b(new NibbleArray()); // Skylight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -245,8 +245,10 @@ public class BukkitChunk_1_12 extends CharFaweChunk<Chunk, BukkitQueue_1_12> {
|
|||||||
if (copy != null) {
|
if (copy != null) {
|
||||||
copy.storeEntity(entity);
|
copy.storeEntity(entity);
|
||||||
}
|
}
|
||||||
removeEntity(entity);
|
|
||||||
iter.remove();
|
iter.remove();
|
||||||
|
synchronized (BukkitQueue_0.class) {
|
||||||
|
removeEntity(entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,7 +292,9 @@ public class BukkitChunk_1_12 extends CharFaweChunk<Chunk, BukkitQueue_1_12> {
|
|||||||
copy.storeEntity(entity);
|
copy.storeEntity(entity);
|
||||||
}
|
}
|
||||||
iter.remove();
|
iter.remove();
|
||||||
removeEntity(entity);
|
synchronized (BukkitQueue_0.class) {
|
||||||
|
removeEntity(entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -340,7 +344,9 @@ public class BukkitChunk_1_12 extends CharFaweChunk<Chunk, BukkitQueue_1_12> {
|
|||||||
entity.f(tag);
|
entity.f(tag);
|
||||||
}
|
}
|
||||||
entity.setLocation(x, y, z, yaw, pitch);
|
entity.setLocation(x, y, z, yaw, pitch);
|
||||||
nmsWorld.addEntity(entity, CreatureSpawnEvent.SpawnReason.CUSTOM);
|
synchronized (BukkitQueue_0.class) {
|
||||||
|
nmsWorld.addEntity(entity, CreatureSpawnEvent.SpawnReason.CUSTOM);
|
||||||
|
}
|
||||||
createdEntities.add(entity.getUniqueID());
|
createdEntities.add(entity.getUniqueID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,15 +379,16 @@ public class BukkitChunk_1_12 extends CharFaweChunk<Chunk, BukkitQueue_1_12> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (toRemove != null) {
|
if (toRemove != null) {
|
||||||
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
synchronized (BukkitQueue_0.class) {
|
||||||
BlockPosition bp = entry.getKey();
|
for (Map.Entry<BlockPosition, TileEntity> entry : toRemove.entrySet()) {
|
||||||
TileEntity tile = entry.getValue();
|
BlockPosition bp = entry.getKey();
|
||||||
tiles.remove(bp);
|
TileEntity tile = entry.getValue();
|
||||||
tile.z();
|
tiles.remove(bp);
|
||||||
nmsWorld.s(bp);
|
tile.z();
|
||||||
tile.invalidateBlockCache();
|
nmsWorld.s(bp);
|
||||||
|
tile.invalidateBlockCache();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// Set blocks
|
// Set blocks
|
||||||
for (int j = 0; j < sections.length; j++) {
|
for (int j = 0; j < sections.length; j++) {
|
||||||
@ -485,16 +492,18 @@ public class BukkitChunk_1_12 extends CharFaweChunk<Chunk, BukkitQueue_1_12> {
|
|||||||
int y = (blockHash & 0xFF);
|
int y = (blockHash & 0xFF);
|
||||||
int z = (blockHash >> 8 & 0xF) + bz;
|
int z = (blockHash >> 8 & 0xF) + bz;
|
||||||
BlockPosition pos = new BlockPosition(x, y, z); // Set pos
|
BlockPosition pos = new BlockPosition(x, y, z); // Set pos
|
||||||
TileEntity tileEntity = nmsWorld.getTileEntity(pos);
|
synchronized (BukkitQueue_0.class) {
|
||||||
if (tileEntity != null) {
|
TileEntity tileEntity = nmsWorld.getTileEntity(pos);
|
||||||
NBTTagCompound tag = (NBTTagCompound) BukkitQueue_1_12.fromNative(nativeTag);
|
if (tileEntity != null) {
|
||||||
tag.set("x", new NBTTagInt(x));
|
NBTTagCompound tag = (NBTTagCompound) BukkitQueue_1_12.fromNative(nativeTag);
|
||||||
tag.set("y", new NBTTagInt(y));
|
tag.set("x", new NBTTagInt(x));
|
||||||
tag.set("z", new NBTTagInt(z));
|
tag.set("y", new NBTTagInt(y));
|
||||||
if (BukkitQueue_1_12.methodTileEntityLoad != null) {
|
tag.set("z", new NBTTagInt(z));
|
||||||
BukkitQueue_1_12.methodTileEntityLoad.invoke(tileEntity, tag); // ReadTagIntoTile
|
if (BukkitQueue_1_12.methodTileEntityLoad != null) {
|
||||||
} else {
|
BukkitQueue_1_12.methodTileEntityLoad.invoke(tileEntity, tag); // ReadTagIntoTile
|
||||||
tileEntity.load(tag);
|
} else {
|
||||||
|
tileEntity.load(tag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -730,19 +730,15 @@ public class BukkitQueue_1_12 extends BukkitQueue_0<net.minecraft.server.v1_12_R
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode != RelightMode.NONE) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.a(null);
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.b(null);
|
||||||
section.a(new NibbleArray()); // Emitted
|
|
||||||
if (sky) {
|
|
||||||
section.b(new NibbleArray()); // Skylight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -549,19 +549,15 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setEmittedLightArray(null);
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkyLightArray(null);
|
||||||
section.setEmittedLightArray(null);
|
|
||||||
if (sky) {
|
|
||||||
section.setSkyLightArray(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -542,19 +542,15 @@ public class BukkitQueue18R3 extends BukkitQueue_0<net.minecraft.server.v1_8_R3.
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.a(new NibbleArray());
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.b(new NibbleArray());
|
||||||
section.a(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.b(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -593,19 +593,15 @@ public class BukkitQueue_1_9_R1 extends BukkitQueue_0<net.minecraft.server.v1_9_
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ChunkSection[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ChunkSection section, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.a(new NibbleArray());
|
||||||
ChunkSection section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.b(new NibbleArray());
|
||||||
section.a(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.b(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -6,7 +6,6 @@ dependencies {
|
|||||||
compile 'org.yaml:snakeyaml:1.16'
|
compile 'org.yaml:snakeyaml:1.16'
|
||||||
compile 'com.google.code.gson:gson:2.2.4'
|
compile 'com.google.code.gson:gson:2.2.4'
|
||||||
compile 'net.fabiozumbi12:redprotect:1.9.6'
|
compile 'net.fabiozumbi12:redprotect:1.9.6'
|
||||||
compile 'com.sk89q:worldguard:6.0.0-SNAPSHOT'
|
|
||||||
compile group: "com.plotsquared", name: "plotsquared-api", version: "latest"
|
compile group: "com.plotsquared", name: "plotsquared-api", version: "latest"
|
||||||
compile 'org.primesoft:BlocksHub:2.0'
|
compile 'org.primesoft:BlocksHub:2.0'
|
||||||
compile 'com.github.luben:zstd-jni:1.1.1'
|
compile 'com.github.luben:zstd-jni:1.1.1'
|
||||||
@ -15,7 +14,6 @@ dependencies {
|
|||||||
compile(group: 'com.sk89q.worldedit', name: 'worldedit-core', version:'6.1.3-SNAPSHOT') {
|
compile(group: 'com.sk89q.worldedit', name: 'worldedit-core', version:'6.1.3-SNAPSHOT') {
|
||||||
exclude(module: 'bukkit-classloader-check')
|
exclude(module: 'bukkit-classloader-check')
|
||||||
}
|
}
|
||||||
compile 'org.inventivetalent:mapmanager:1.4.0-SNAPSHOT'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
@ -6,6 +6,7 @@ import com.boydti.fawe.object.FaweQueue;
|
|||||||
import com.boydti.fawe.regions.FaweMaskManager;
|
import com.boydti.fawe.regions.FaweMaskManager;
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
import com.boydti.fawe.util.cui.CUI;
|
import com.boydti.fawe.util.cui.CUI;
|
||||||
|
import com.boydti.fawe.util.gui.FormBuilder;
|
||||||
import com.boydti.fawe.util.image.ImageViewer;
|
import com.boydti.fawe.util.image.ImageViewer;
|
||||||
import com.sk89q.worldedit.world.World;
|
import com.sk89q.worldedit.world.World;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -58,4 +59,8 @@ public interface IFawe {
|
|||||||
public default String getDebugInfo() {
|
public default String getDebugInfo() {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public default FormBuilder getFormBuilder() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -394,9 +394,11 @@ public class Settings extends Config {
|
|||||||
"The relighting mode to use:",
|
"The relighting mode to use:",
|
||||||
" - 0 = None (Do no relighting)",
|
" - 0 = None (Do no relighting)",
|
||||||
" - 1 = Optimal (Relight changed light sources and changed blocks)",
|
" - 1 = Optimal (Relight changed light sources and changed blocks)",
|
||||||
" - 2 = All (Slowly relight every blocks)"
|
" - 2 = All (Slowly relight every blocks)",
|
||||||
})
|
})
|
||||||
public int MODE = 1;
|
public int MODE = 1;
|
||||||
|
@Comment({"If existing lighting should be removed before relighting"})
|
||||||
|
public boolean REMOVE_FIRST = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reload(File file) {
|
public void reload(File file) {
|
||||||
|
@ -42,7 +42,11 @@ public abstract class NMSMappedFaweQueue<WORLD, CHUNK, CHUNKSECTION, SECTION> ex
|
|||||||
TaskManager.IMP.async(new Runnable() {
|
TaskManager.IMP.async(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
getRelighter().fixLightingSafe(hasSky());
|
if (Settings.IMP.LIGHTING.REMOVE_FIRST) {
|
||||||
|
getRelighter().removeAndRelight(hasSky());
|
||||||
|
} else {
|
||||||
|
getRelighter().fixLightingSafe(hasSky());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -109,7 +113,18 @@ public abstract class NMSMappedFaweQueue<WORLD, CHUNK, CHUNKSECTION, SECTION> ex
|
|||||||
|
|
||||||
public abstract void setFullbright(CHUNKSECTION sections);
|
public abstract void setFullbright(CHUNKSECTION sections);
|
||||||
|
|
||||||
public abstract boolean removeLighting(CHUNKSECTION sections, RelightMode mode, boolean hasSky);
|
public boolean removeLighting(CHUNKSECTION sections, RelightMode mode, boolean hasSky) {
|
||||||
|
boolean result = false;
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
SECTION section = getCachedSection(sections, i);
|
||||||
|
if (section != null) {
|
||||||
|
result |= removeSectionLighting(section, i, hasSky);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract boolean removeSectionLighting(SECTION sections, int layer, boolean hasSky);
|
||||||
|
|
||||||
public boolean isSurrounded(final char[][] sections, final int x, final int y, final int z) {
|
public boolean isSurrounded(final char[][] sections, final int x, final int y, final int z) {
|
||||||
return this.isSolid(this.getId(sections, x, y + 1, z))
|
return this.isSolid(this.getId(sections, x, y + 1, z))
|
||||||
|
@ -40,6 +40,7 @@ public class NMSRelighter implements Relighter {
|
|||||||
public final IntegerTrio mutableBlockPos = new IntegerTrio();
|
public final IntegerTrio mutableBlockPos = new IntegerTrio();
|
||||||
|
|
||||||
private static final int DISPATCH_SIZE = 64;
|
private static final int DISPATCH_SIZE = 64;
|
||||||
|
private boolean removeFirst;
|
||||||
|
|
||||||
public NMSRelighter(NMSMappedFaweQueue queue) {
|
public NMSRelighter(NMSMappedFaweQueue queue) {
|
||||||
this.queue = queue;
|
this.queue = queue;
|
||||||
@ -55,6 +56,13 @@ public class NMSRelighter implements Relighter {
|
|||||||
return skyToRelight.isEmpty() && lightQueue.isEmpty() && queuedSkyToRelight.isEmpty() && concurrentLightQueue.isEmpty();
|
return skyToRelight.isEmpty() && lightQueue.isEmpty() && queuedSkyToRelight.isEmpty() && concurrentLightQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void removeAndRelight(boolean sky) {
|
||||||
|
removeFirst = true;
|
||||||
|
fixLightingSafe(true);
|
||||||
|
removeFirst = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void set(int x, int y, int z, long[][][] map) {
|
private void set(int x, int y, int z, long[][][] map) {
|
||||||
long[][] m1 = map[z];
|
long[][] m1 = map[z];
|
||||||
if (m1 == null) {
|
if (m1 == null) {
|
||||||
@ -392,6 +400,11 @@ public class NMSRelighter implements Relighter {
|
|||||||
Object section = queue.getCachedSection(sections, layer);
|
Object section = queue.getCachedSection(sections, layer);
|
||||||
if (section == null) continue;
|
if (section == null) continue;
|
||||||
chunk.smooth = false;
|
chunk.smooth = false;
|
||||||
|
|
||||||
|
if (removeFirst && (y & 15) == 15) {
|
||||||
|
queue.removeSectionLighting(sections, y >> 4, true);
|
||||||
|
}
|
||||||
|
|
||||||
for (int j = 0; j <= maxY; j++) {
|
for (int j = 0; j <= maxY; j++) {
|
||||||
int x = cacheX[j];
|
int x = cacheX[j];
|
||||||
int z = cacheZ[j];
|
int z = cacheZ[j];
|
||||||
|
@ -22,6 +22,11 @@ public class NullRelighter implements Relighter {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeLighting() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fixBlockLighting() {
|
public void fixBlockLighting() {
|
||||||
|
|
||||||
|
@ -7,6 +7,13 @@ public interface Relighter {
|
|||||||
|
|
||||||
void fixLightingSafe(boolean sky);
|
void fixLightingSafe(boolean sky);
|
||||||
|
|
||||||
|
default void removeAndRelight(boolean sky) {
|
||||||
|
removeLighting();
|
||||||
|
fixLightingSafe(sky);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeLighting();
|
||||||
|
|
||||||
void fixBlockLighting();
|
void fixBlockLighting();
|
||||||
|
|
||||||
void fixSkyLighting();
|
void fixSkyLighting();
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.boydti.fawe.jnbt.anvil;
|
||||||
|
|
||||||
|
public class ChunkSimplifier {
|
||||||
|
private final HeightMapMCAGenerator gen;
|
||||||
|
|
||||||
|
public ChunkSimplifier(HeightMapMCAGenerator gen) {
|
||||||
|
this.gen = gen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void simplify(MCAChunk chunk) {
|
||||||
|
// Copy biome
|
||||||
|
// Calculate water level
|
||||||
|
// Determine floor block
|
||||||
|
// Determine overlay block
|
||||||
|
// determine main block
|
||||||
|
// Copy bedrock
|
||||||
|
// copy anomalies to blocks
|
||||||
|
}
|
||||||
|
}
|
@ -510,7 +510,6 @@ public class MCAChunk extends FaweChunk<Void> {
|
|||||||
if (entities == null) {
|
if (entities == null) {
|
||||||
entities = new HashMap<UUID, CompoundTag>();
|
entities = new HashMap<UUID, CompoundTag>();
|
||||||
}
|
}
|
||||||
|
|
||||||
long least = entityTag.getLong("UUIDLeast");
|
long least = entityTag.getLong("UUIDLeast");
|
||||||
long most = entityTag.getLong("UUIDMost");
|
long most = entityTag.getLong("UUIDMost");
|
||||||
entities.put(new UUID(most, least), entityTag);
|
entities.put(new UUID(most, least), entityTag);
|
||||||
@ -733,16 +732,20 @@ public class MCAChunk extends FaweChunk<Void> {
|
|||||||
|
|
||||||
public void removeLight() {
|
public void removeLight() {
|
||||||
for (int i = 0; i < skyLight.length; i++) {
|
for (int i = 0; i < skyLight.length; i++) {
|
||||||
byte[] array1 = skyLight[i];
|
removeLight(i);
|
||||||
if (array1 == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
byte[] array2 = blockLight[i];
|
|
||||||
Arrays.fill(array1, (byte) 0);
|
|
||||||
Arrays.fill(array2, (byte) 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeLight(int i) {
|
||||||
|
byte[] array1 = skyLight[i];
|
||||||
|
if (array1 == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
byte[] array2 = blockLight[i];
|
||||||
|
Arrays.fill(array1, (byte) 0);
|
||||||
|
Arrays.fill(array2, (byte) 0);
|
||||||
|
}
|
||||||
|
|
||||||
public int getNibble(int index, byte[] array) {
|
public int getNibble(int index, byte[] array) {
|
||||||
int indexShift = index >> 1;
|
int indexShift = index >> 1;
|
||||||
if ((index & 1) == 0) {
|
if ((index & 1) == 0) {
|
||||||
|
@ -687,6 +687,22 @@ public class MCAQueue extends NMSMappedFaweQueue<FaweQueue, FaweChunk, FaweChunk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeSectionLighting(FaweChunk sections, int layer, boolean hasSky) {
|
||||||
|
if (sections.getClass() == MCAChunk.class) {
|
||||||
|
((MCAChunk) sections).removeLight(layer);
|
||||||
|
} else if (parentNMS != null) {
|
||||||
|
int cx = sections.getX();
|
||||||
|
int cz = sections.getZ();
|
||||||
|
parentNMS.ensureChunkLoaded(cx, cz);
|
||||||
|
Object parentSections = parentNMS.getCachedSections(parentNMS.getWorld(), cx, cz);
|
||||||
|
if (parentSections != null) {
|
||||||
|
parentNMS.removeSectionLighting(sections, layer, hasSky);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(FaweChunk sections, RelightMode mode, boolean hasSky) {
|
public boolean removeLighting(FaweChunk sections, RelightMode mode, boolean hasSky) {
|
||||||
if (mode != RelightMode.NONE) {
|
if (mode != RelightMode.NONE) {
|
||||||
|
@ -6,7 +6,6 @@ import com.boydti.fawe.object.FawePlayer;
|
|||||||
import com.boydti.fawe.object.changeset.AbstractDelegateChangeSet;
|
import com.boydti.fawe.object.changeset.AbstractDelegateChangeSet;
|
||||||
import com.boydti.fawe.object.changeset.FaweChangeSet;
|
import com.boydti.fawe.object.changeset.FaweChangeSet;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.primesoft.blockshub.IBlocksHubApi;
|
import org.primesoft.blockshub.IBlocksHubApi;
|
||||||
import org.primesoft.blockshub.api.IPlayer;
|
import org.primesoft.blockshub.api.IPlayer;
|
||||||
import org.primesoft.blockshub.api.IWorld;
|
import org.primesoft.blockshub.api.IWorld;
|
||||||
@ -15,7 +14,7 @@ public class LoggingChangeSet extends AbstractDelegateChangeSet {
|
|||||||
|
|
||||||
private static boolean initialized = false;
|
private static boolean initialized = false;
|
||||||
|
|
||||||
public static FaweChangeSet wrap(FawePlayer<Player> player, FaweChangeSet parent) {
|
public static FaweChangeSet wrap(FawePlayer player, FaweChangeSet parent) {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
initialized = true;
|
initialized = true;
|
||||||
api = (IBlocksHubApi) Fawe.imp().getBlocksHubApi();
|
api = (IBlocksHubApi) Fawe.imp().getBlocksHubApi();
|
||||||
|
@ -23,6 +23,7 @@ import java.io.Closeable;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.RandomAccessFile;
|
import java.io.RandomAccessFile;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.MappedByteBuffer;
|
import java.nio.MappedByteBuffer;
|
||||||
@ -273,6 +274,16 @@ public class DiskOptimizedClipboard extends FaweClipboard implements Closeable {
|
|||||||
clean.setAccessible(true);
|
clean.setAccessible(true);
|
||||||
clean.invoke(cleaner.invoke(cb));
|
clean.invoke(cleaner.invoke(cb));
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
try {
|
||||||
|
final Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
|
||||||
|
final Field theUnsafeField = unsafeClass.getDeclaredField("theUnsafe");
|
||||||
|
theUnsafeField.setAccessible(true);
|
||||||
|
final Object theUnsafe = theUnsafeField.get(null);
|
||||||
|
final Method invokeCleanerMethod = unsafeClass.getMethod("invokeCleaner", ByteBuffer.class);
|
||||||
|
invokeCleanerMethod.invoke(theUnsafe, cb);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.gc();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cb = null;
|
cb = null;
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ import java.io.Serializable;
|
|||||||
* <p>
|
* <p>
|
||||||
* A <code>SparseBitSet</code> is not safe for multithreaded use without
|
* A <code>SparseBitSet</code> is not safe for multithreaded use without
|
||||||
* external synchronization.
|
* external synchronization.
|
||||||
*
|
* @see <a href="https://github.com/brettwooldridge/SparseBitSet">source</a>
|
||||||
* @author Bruce K. Haddon
|
* @author Bruce K. Haddon
|
||||||
* @author Arthur van Hoff
|
* @author Arthur van Hoff
|
||||||
* @author Michael McCloskey
|
* @author Michael McCloskey
|
||||||
|
@ -0,0 +1,214 @@
|
|||||||
|
package com.boydti.fawe.object.queue;
|
||||||
|
|
||||||
|
import com.boydti.fawe.object.FaweChunk;
|
||||||
|
import com.boydti.fawe.object.FawePlayer;
|
||||||
|
import com.boydti.fawe.object.FaweQueue;
|
||||||
|
import com.boydti.fawe.object.RunnableVal2;
|
||||||
|
import com.boydti.fawe.object.exception.FaweException;
|
||||||
|
import com.boydti.fawe.util.SetQueue;
|
||||||
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
|
import com.sk89q.worldedit.world.World;
|
||||||
|
import com.sk89q.worldedit.world.biome.BaseBiome;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.UUID;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public class NullFaweQueue implements FaweQueue {
|
||||||
|
private final String worldName;
|
||||||
|
|
||||||
|
public NullFaweQueue(String worldName) {
|
||||||
|
this.worldName = worldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setBlock(int x, int y, int z, int id, int data) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTile(int x, int y, int z, CompoundTag tag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEntity(int x, int y, int z, CompoundTag tag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeEntity(int x, int y, int z, UUID uuid) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setBiome(int x, int z, BaseBiome biome) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FaweChunk getFaweChunk(int x, int z) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<FaweChunk> getFaweChunks() {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChunk(FaweChunk chunk) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getSaveFolder() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWorld(String world) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public World getWEWorld() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getWorldName() {
|
||||||
|
return worldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getModified() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setModified(long modified) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RunnableVal2<ProgressType, Integer> getProgressTask() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProgressTask(RunnableVal2<ProgressType, Integer> progressTask) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChangeTask(RunnableVal2<FaweChunk, FaweChunk> changeTask) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RunnableVal2<FaweChunk, FaweChunk> getChangeTask() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SetQueue.QueueStage getStage() {
|
||||||
|
return SetQueue.QueueStage.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStage(SetQueue.QueueStage stage) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNotifyTask(Runnable runnable) {
|
||||||
|
runnable.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void runTasks() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTask(Runnable whenFree) {
|
||||||
|
whenFree.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean regenerateChunk(int x, int z, @Nullable BaseBiome biome, @Nullable Long seed) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendBlockUpdate(FaweChunk chunk, FawePlayer... players) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean next(int amount, long time) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendChunk(FaweChunk chunk) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendChunk(int x, int z, int bitMask) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNotifyTask(int x, int z, Runnable runnable) {
|
||||||
|
runnable.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getBiomeId(int x, int z) throws FaweException.FaweChunkLoadException {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCombinedId4Data(int x, int y, int z) throws FaweException.FaweChunkLoadException {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCachedCombinedId4Data(int x, int y, int z) throws FaweException.FaweChunkLoadException {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasSky() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSkyLight(int x, int y, int z) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEmmittedLight(int x, int y, int z) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundTag getTileEntity(int x, int y, int z) throws FaweException.FaweChunkLoadException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -48,7 +48,8 @@ public class FuzzyRegion extends AbstractRegion {
|
|||||||
public void select(int x, int y, int z) {
|
public void select(int x, int y, int z) {
|
||||||
RecursiveVisitor search = new RecursiveVisitor(mask, new RegionFunction() {
|
RecursiveVisitor search = new RecursiveVisitor(mask, new RegionFunction() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Vector position) throws WorldEditException {
|
public boolean apply(Vector p) throws WorldEditException {
|
||||||
|
setMinMax(p.getBlockX(), p.getBlockY(), p.getBlockZ());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}, 256, extent instanceof HasFaweQueue ? (HasFaweQueue) extent : null);
|
}, 256, extent instanceof HasFaweQueue ? (HasFaweQueue) extent : null);
|
||||||
@ -62,8 +63,7 @@ public class FuzzyRegion extends AbstractRegion {
|
|||||||
return (Iterator) set.iterator();
|
return (Iterator) set.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(int x, int y, int z) throws RegionOperationException {
|
private final void setMinMax(int x, int y, int z) {
|
||||||
set.add(x, y, z);
|
|
||||||
if (x > maxX) {
|
if (x > maxX) {
|
||||||
maxX = x;
|
maxX = x;
|
||||||
}
|
}
|
||||||
@ -84,6 +84,11 @@ public class FuzzyRegion extends AbstractRegion {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void set(int x, int y, int z) throws RegionOperationException {
|
||||||
|
set.add(x, y, z);
|
||||||
|
setMinMax(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean contains(int x, int y, int z) {
|
public boolean contains(int x, int y, int z) {
|
||||||
return set.contains(x, y, z);
|
return set.contains(x, y, z);
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ import com.intellectualcrafters.plot.commands.SubCommand;
|
|||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
import com.intellectualcrafters.plot.object.Location;
|
import com.intellectualcrafters.plot.object.Location;
|
||||||
import com.intellectualcrafters.plot.object.PlotPlayer;
|
import com.intellectualcrafters.plot.object.PlotPlayer;
|
||||||
|
import com.intellectualcrafters.plot.util.WorldUtil;
|
||||||
import com.plotsquared.general.commands.CommandDeclaration;
|
import com.plotsquared.general.commands.CommandDeclaration;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
@CommandDeclaration(
|
@CommandDeclaration(
|
||||||
command = "trimchunks",
|
command = "trimchunks",
|
||||||
@ -32,7 +32,7 @@ public class FaweTrim extends SubCommand {
|
|||||||
plotPlayer.sendMessage("use /plot trimall <world> <boolean-delete-unowned>");
|
plotPlayer.sendMessage("use /plot trimall <world> <boolean-delete-unowned>");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (Bukkit.getWorld(strings[0]) == null) {
|
if (!WorldUtil.IMP.isWorld(strings[0])) {
|
||||||
C.NOT_VALID_PLOT_WORLD.send(plotPlayer, strings[0]);
|
C.NOT_VALID_PLOT_WORLD.send(plotPlayer, strings[0]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import com.intellectualcrafters.plot.object.RunnableVal2;
|
|||||||
import com.intellectualcrafters.plot.object.RunnableVal3;
|
import com.intellectualcrafters.plot.object.RunnableVal3;
|
||||||
import com.intellectualcrafters.plot.object.SetupObject;
|
import com.intellectualcrafters.plot.object.SetupObject;
|
||||||
import com.intellectualcrafters.plot.util.SetupUtils;
|
import com.intellectualcrafters.plot.util.SetupUtils;
|
||||||
|
import com.intellectualcrafters.plot.util.WorldUtil;
|
||||||
import com.plotsquared.general.commands.Command;
|
import com.plotsquared.general.commands.Command;
|
||||||
import com.plotsquared.general.commands.CommandDeclaration;
|
import com.plotsquared.general.commands.CommandDeclaration;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -33,8 +34,6 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
@CommandDeclaration(
|
@CommandDeclaration(
|
||||||
command = "moveto512",
|
command = "moveto512",
|
||||||
@ -160,9 +159,7 @@ public class MoveTo512 extends Command {
|
|||||||
check(area, C.COMMAND_SYNTAX, getUsage());
|
check(area, C.COMMAND_SYNTAX, getUsage());
|
||||||
checkTrue(area instanceof HybridPlotWorld, C.NOT_VALID_HYBRID_PLOT_WORLD);
|
checkTrue(area instanceof HybridPlotWorld, C.NOT_VALID_HYBRID_PLOT_WORLD);
|
||||||
|
|
||||||
for (World world : Bukkit.getWorlds()) {
|
WorldUtil.IMP.saveWorld(area.worldname);
|
||||||
world.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
FaweQueue defaultQueue = SetQueue.IMP.getNewQueue(area.worldname, true, false);
|
FaweQueue defaultQueue = SetQueue.IMP.getNewQueue(area.worldname, true, false);
|
||||||
MCAQueue queueFrom = new MCAQueue(area.worldname, defaultQueue.getSaveFolder(), defaultQueue.hasSky());
|
MCAQueue queueFrom = new MCAQueue(area.worldname, defaultQueue.getSaveFolder(), defaultQueue.hasSky());
|
||||||
|
@ -4,8 +4,10 @@ import com.boydti.fawe.jnbt.anvil.MCAChunk;
|
|||||||
import com.boydti.fawe.jnbt.anvil.MCAFile;
|
import com.boydti.fawe.jnbt.anvil.MCAFile;
|
||||||
import com.boydti.fawe.jnbt.anvil.MCAFilter;
|
import com.boydti.fawe.jnbt.anvil.MCAFilter;
|
||||||
import com.boydti.fawe.jnbt.anvil.MCAQueue;
|
import com.boydti.fawe.jnbt.anvil.MCAQueue;
|
||||||
|
import com.boydti.fawe.object.FaweQueue;
|
||||||
import com.boydti.fawe.util.MainUtil;
|
import com.boydti.fawe.util.MainUtil;
|
||||||
import com.boydti.fawe.util.MathMan;
|
import com.boydti.fawe.util.MathMan;
|
||||||
|
import com.boydti.fawe.util.SetQueue;
|
||||||
import com.intellectualcrafters.plot.PS;
|
import com.intellectualcrafters.plot.PS;
|
||||||
import com.intellectualcrafters.plot.object.ChunkLoc;
|
import com.intellectualcrafters.plot.object.ChunkLoc;
|
||||||
import com.intellectualcrafters.plot.object.Location;
|
import com.intellectualcrafters.plot.object.Location;
|
||||||
@ -21,14 +23,11 @@ import java.util.HashSet;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
public class PlotTrim implements Listener {
|
public class PlotTrim {
|
||||||
private final MCAQueue queue;
|
private final MCAQueue queue;
|
||||||
private final PlotArea area;
|
private final PlotArea area;
|
||||||
private final PlotPlayer player;
|
private final PlotPlayer player;
|
||||||
@ -39,8 +38,10 @@ public class PlotTrim implements Listener {
|
|||||||
private boolean deleteUnowned = true;
|
private boolean deleteUnowned = true;
|
||||||
|
|
||||||
public PlotTrim(PlotPlayer player, PlotArea area, String worldName, boolean deleteUnowned) {
|
public PlotTrim(PlotPlayer player, PlotArea area, String worldName, boolean deleteUnowned) {
|
||||||
this.root = new File(Bukkit.getWorldContainer(), worldName + "-Copy" + File.separator + "region");
|
FaweQueue tmpQueue = SetQueue.IMP.getNewQueue(worldName, true, false);
|
||||||
this.originalRoot = new File(Bukkit.getWorldContainer(), worldName + File.separator + "region");
|
File saveFolder = tmpQueue.getSaveFolder();
|
||||||
|
this.root = new File(saveFolder.getParentFile().getParentFile(), worldName + "-Copy" + File.separator + "region");
|
||||||
|
this.originalRoot = saveFolder;
|
||||||
this.originalQueue = new MCAQueue(worldName, originalRoot, true);
|
this.originalQueue = new MCAQueue(worldName, originalRoot, true);
|
||||||
this.queue = new MCAQueue(worldName + "-Copy", root, true);
|
this.queue = new MCAQueue(worldName + "-Copy", root, true);
|
||||||
this.area = area;
|
this.area = area;
|
||||||
@ -76,7 +77,6 @@ public class PlotTrim implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
Bukkit.getPluginManager().registerEvents(this, (Plugin) PS.get().IMP);
|
|
||||||
final Set<ChunkLoc> mcas = new HashSet<>();
|
final Set<ChunkLoc> mcas = new HashSet<>();
|
||||||
if (deleteUnowned && area != null) {
|
if (deleteUnowned && area != null) {
|
||||||
originalQueue.filterWorld(new MCAFilter() {
|
originalQueue.filterWorld(new MCAFilter() {
|
||||||
|
@ -12,8 +12,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Server;
|
|
||||||
import sun.reflect.ConstructorAccessor;
|
import sun.reflect.ConstructorAccessor;
|
||||||
import sun.reflect.FieldAccessor;
|
import sun.reflect.FieldAccessor;
|
||||||
import sun.reflect.ReflectionFactory;
|
import sun.reflect.ReflectionFactory;
|
||||||
@ -24,49 +22,6 @@ import sun.reflect.ReflectionFactory;
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings({"UnusedDeclaration", "rawtypes"})
|
@SuppressWarnings({"UnusedDeclaration", "rawtypes"})
|
||||||
public class ReflectionUtils {
|
public class ReflectionUtils {
|
||||||
/**
|
|
||||||
* prefix of bukkit classes
|
|
||||||
*/
|
|
||||||
private static volatile String preClassB = null;
|
|
||||||
/**
|
|
||||||
* prefix of minecraft classes
|
|
||||||
*/
|
|
||||||
private static volatile String preClassM = null;
|
|
||||||
/**
|
|
||||||
* boolean value, TRUE if server uses forge or MCPC+
|
|
||||||
*/
|
|
||||||
private static boolean forge = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* check server version and class names
|
|
||||||
*/
|
|
||||||
public static void init() {
|
|
||||||
if (Bukkit.getServer() != null) {
|
|
||||||
if (Bukkit.getVersion().contains("MCPC") || Bukkit.getVersion().contains("Forge")) {
|
|
||||||
forge = true;
|
|
||||||
}
|
|
||||||
final Server server = Bukkit.getServer();
|
|
||||||
final Class<?> bukkitServerClass = server.getClass();
|
|
||||||
String[] pas = bukkitServerClass.getName().split("\\.");
|
|
||||||
if (pas.length == 5) {
|
|
||||||
final String verB = pas[3];
|
|
||||||
preClassB = "org.bukkit.craftbukkit." + verB;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
final Method getHandle = bukkitServerClass.getDeclaredMethod("getHandle");
|
|
||||||
final Object handle = getHandle.invoke(server);
|
|
||||||
final Class handleServerClass = handle.getClass();
|
|
||||||
pas = handleServerClass.getName().split("\\.");
|
|
||||||
if (pas.length == 5) {
|
|
||||||
final String verM = pas[3];
|
|
||||||
preClassM = "net.minecraft.server." + verM;
|
|
||||||
}
|
|
||||||
} catch (final Exception ignored) {
|
|
||||||
MainUtil.handleError(ignored);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> T as(Class<T> t, Object o) {
|
public static <T> T as(Class<T> t, Object o) {
|
||||||
return t.isInstance(o) ? t.cast(o) : null;
|
return t.isInstance(o) ? t.cast(o) : null;
|
||||||
}
|
}
|
||||||
@ -200,33 +155,6 @@ public class ReflectionUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Class<?> getNmsClass(final String name) {
|
|
||||||
final String className = "net.minecraft.server." + getVersion() + "." + name;
|
|
||||||
return getClass(className);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> getCbClass(final String name) {
|
|
||||||
final String className = "org.bukkit.craftbukkit." + getVersion() + "." + name;
|
|
||||||
return getClass(className);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> getUtilClass(final String name) {
|
|
||||||
try {
|
|
||||||
return Class.forName(name); //Try before 1.8 first
|
|
||||||
} catch (final ClassNotFoundException ex) {
|
|
||||||
try {
|
|
||||||
return Class.forName("net.minecraft.util." + name); //Not 1.8
|
|
||||||
} catch (final ClassNotFoundException ex2) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getVersion() {
|
|
||||||
final String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
|
||||||
return packageName.substring(packageName.lastIndexOf('.') + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object getHandle(final Object wrapper) {
|
public static Object getHandle(final Object wrapper) {
|
||||||
final Method getHandle = makeMethod(wrapper.getClass(), "getHandle");
|
final Method getHandle = makeMethod(wrapper.getClass(), "getHandle");
|
||||||
return callMethod(getHandle, wrapper);
|
return callMethod(getHandle, wrapper);
|
||||||
@ -414,34 +342,6 @@ public class ReflectionUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return true if server has forge classes
|
|
||||||
*/
|
|
||||||
public static boolean isForge() {
|
|
||||||
return forge;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get class for name. Replace {nms} to net.minecraft.server.V*. Replace {cb} to org.bukkit.craftbukkit.V*. Replace
|
|
||||||
* {nm} to net.minecraft
|
|
||||||
*
|
|
||||||
* @param classes possible class paths
|
|
||||||
* @return RefClass object
|
|
||||||
* @throws RuntimeException if no class found
|
|
||||||
*/
|
|
||||||
public static RefClass getRefClass(final String... classes) throws RuntimeException {
|
|
||||||
if (preClassM == null) {
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
for (String className : classes) {
|
|
||||||
try {
|
|
||||||
className = className.replace("{cb}", preClassB).replace("{nms}", preClassM).replace("{nm}", "net.minecraft");
|
|
||||||
return getRefClass(Class.forName(className));
|
|
||||||
} catch (final ClassNotFoundException ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new RuntimeException("no class found: " + classes[0].replace("{cb}", preClassB).replace("{nms}", preClassM).replace("{nm}", "net.minecraft"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get RefClass object by real class
|
* get RefClass object by real class
|
||||||
|
29
core/src/main/java/com/boydti/fawe/util/gui/FormBuilder.java
Normal file
29
core/src/main/java/com/boydti/fawe/util/gui/FormBuilder.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package com.boydti.fawe.util.gui;
|
||||||
|
|
||||||
|
import com.boydti.fawe.object.FawePlayer;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
public interface FormBuilder<T> {
|
||||||
|
FormBuilder setTitle(String text);
|
||||||
|
|
||||||
|
FormBuilder setIcon(URL icon);
|
||||||
|
|
||||||
|
FormBuilder addButton(String text, @Nullable URL image);
|
||||||
|
|
||||||
|
FormBuilder addDropdown(String text, int def, String... options);
|
||||||
|
|
||||||
|
FormBuilder addInput(String text, String placeholder, String def);
|
||||||
|
|
||||||
|
FormBuilder addLabel(String text);
|
||||||
|
|
||||||
|
FormBuilder addSlider(String text, double min, double max, int step, double def);
|
||||||
|
|
||||||
|
FormBuilder addStepSlider(String text, int def, String... options);
|
||||||
|
|
||||||
|
FormBuilder addToggle(String text, boolean def);
|
||||||
|
|
||||||
|
void display(FawePlayer<T> fp, Consumer<List<String>> response);
|
||||||
|
}
|
@ -31,6 +31,7 @@ import com.boydti.fawe.util.MathMan;
|
|||||||
import com.boydti.fawe.util.StringMan;
|
import com.boydti.fawe.util.StringMan;
|
||||||
import com.boydti.fawe.util.chat.Message;
|
import com.boydti.fawe.util.chat.Message;
|
||||||
import com.boydti.fawe.util.chat.UsageMessage;
|
import com.boydti.fawe.util.chat.UsageMessage;
|
||||||
|
import com.boydti.fawe.util.gui.FormBuilder;
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.sk89q.minecraft.util.commands.Command;
|
import com.sk89q.minecraft.util.commands.Command;
|
||||||
import com.sk89q.minecraft.util.commands.CommandContext;
|
import com.sk89q.minecraft.util.commands.CommandContext;
|
||||||
@ -100,6 +101,7 @@ import java.util.concurrent.Executors;
|
|||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@ -889,6 +891,33 @@ public class UtilityCommands extends MethodCommands {
|
|||||||
help(args, we, actor, "/", null);
|
help(args, we, actor, "/", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Command(
|
||||||
|
aliases = {"/gui"},
|
||||||
|
desc = "Open the GUI"
|
||||||
|
)
|
||||||
|
@Logging(PLACEMENT)
|
||||||
|
public void gui(FawePlayer fp, LocalSession session, CommandContext args) throws WorldEditException {
|
||||||
|
FormBuilder gui = Fawe.imp().getFormBuilder();
|
||||||
|
if (gui == null) throw new UnsupportedOperationException("Not implemented");
|
||||||
|
|
||||||
|
Dispatcher callable = worldEdit.getPlatformManager().getCommandManager().getDispatcher();
|
||||||
|
CommandLocals locals = args.getLocals();
|
||||||
|
|
||||||
|
// TODO build form
|
||||||
|
|
||||||
|
|
||||||
|
gui.display(fp, new Consumer<List<String>>() {
|
||||||
|
@Override
|
||||||
|
public void accept(List<String> strings) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void help(CommandCallable callable) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void help(CommandContext args, WorldEdit we, Actor actor, String prefix, CommandCallable callable) {
|
public static void help(CommandContext args, WorldEdit we, Actor actor, String prefix, CommandCallable callable) {
|
||||||
try {
|
try {
|
||||||
if (callable == null) {
|
if (callable == null) {
|
||||||
|
@ -473,19 +473,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray());
|
||||||
section.setBlocklightArray(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -549,19 +549,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray());
|
||||||
section.setBlocklightArray(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -674,19 +674,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlockLight(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkyLight(new NibbleArray());
|
||||||
section.setBlockLight(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkyLight(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -469,19 +469,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray(4096, 4));
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray(4096, 4));
|
||||||
section.setBlocklightArray(new NibbleArray(4096, 4));
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray(4096, 4));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -435,19 +435,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray());
|
||||||
section.setBlocklightArray(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -465,19 +465,14 @@ public class ForgeQueue_All extends NMSMappedFaweQueue<World, Chunk, ExtendedBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage sections, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray());
|
||||||
section.setBlocklightArray(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPalette(ExtendedBlockStorage section, BlockStateContainer palette) throws NoSuchFieldException, IllegalAccessException {
|
public void setPalette(ExtendedBlockStorage section, BlockStateContainer palette) throws NoSuchFieldException, IllegalAccessException {
|
||||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
1
gradle/wrapper/gradle-wrapper.properties
vendored
1
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,3 +1,4 @@
|
|||||||
|
#Fri Jan 12 10:28:44 AEDT 2018
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
74
gradlew
vendored
74
gradlew
vendored
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##
|
##
|
||||||
@ -6,12 +6,30 @@
|
|||||||
##
|
##
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
# Attempt to set APP_HOME
|
||||||
DEFAULT_JVM_OPTS=""
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
APP_NAME="Gradle"
|
APP_NAME="Gradle"
|
||||||
APP_BASE_NAME=`basename "$0"`
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD="maximum"
|
MAX_FD="maximum"
|
||||||
|
|
||||||
@ -30,6 +48,7 @@ die ( ) {
|
|||||||
cygwin=false
|
cygwin=false
|
||||||
msys=false
|
msys=false
|
||||||
darwin=false
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
case "`uname`" in
|
case "`uname`" in
|
||||||
CYGWIN* )
|
CYGWIN* )
|
||||||
cygwin=true
|
cygwin=true
|
||||||
@ -40,31 +59,11 @@ case "`uname`" in
|
|||||||
MINGW* )
|
MINGW* )
|
||||||
msys=true
|
msys=true
|
||||||
;;
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
|
||||||
if $cygwin ; then
|
|
||||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
|
||||||
# Resolve links: $0 may be a link
|
|
||||||
PRG="$0"
|
|
||||||
# Need this for relative symlinks.
|
|
||||||
while [ -h "$PRG" ] ; do
|
|
||||||
ls=`ls -ld "$PRG"`
|
|
||||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
||||||
if expr "$link" : '/.*' > /dev/null; then
|
|
||||||
PRG="$link"
|
|
||||||
else
|
|
||||||
PRG=`dirname "$PRG"`"/$link"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
SAVED="`pwd`"
|
|
||||||
cd "`dirname \"$PRG\"`/" >&-
|
|
||||||
APP_HOME="`pwd -P`"
|
|
||||||
cd "$SAVED" >&-
|
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
@ -90,7 +89,7 @@ location of your Java installation."
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
# Increase the maximum file descriptors if we can.
|
||||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
MAX_FD_LIMIT=`ulimit -H -n`
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
if [ $? -eq 0 ] ; then
|
if [ $? -eq 0 ] ; then
|
||||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
@ -114,6 +113,7 @@ fi
|
|||||||
if $cygwin ; then
|
if $cygwin ; then
|
||||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
# We build the pattern for arguments to be converted via cygpath
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
@ -154,11 +154,19 @@ if $cygwin ; then
|
|||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
# Escape application args
|
||||||
function splitJvmOpts() {
|
save ( ) {
|
||||||
JVM_OPTS=("$@")
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
}
|
}
|
||||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
APP_ARGS=$(save "$@")
|
||||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
|
||||||
|
|
||||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||||
|
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
||||||
|
@ -3,7 +3,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':core')
|
compile project(':core')
|
||||||
compile group: "cn.nukkit", name: "nukkit", version: "1.0-20170704.231613-609"
|
compile group: "cn.nukkit", name: "nukkit", version: "1.0"
|
||||||
compile name: 'worldedit-core-6.1.4-SNAPSHOT-dist'
|
compile name: 'worldedit-core-6.1.4-SNAPSHOT-dist'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package com.boydti.fawe.nukkit.core;
|
package com.boydti.fawe.nukkit.core;
|
||||||
|
|
||||||
|
import cn.nukkit.AdventureSettings;
|
||||||
import cn.nukkit.Player;
|
import cn.nukkit.Player;
|
||||||
import cn.nukkit.inventory.PlayerInventory;
|
import cn.nukkit.inventory.PlayerInventory;
|
||||||
import cn.nukkit.item.Item;
|
import cn.nukkit.item.Item;
|
||||||
@ -174,7 +175,8 @@ public class NukkitPlayer extends LocalPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setPosition(new Vector(x + 0.5, y, z + 0.5));
|
setPosition(new Vector(x + 0.5, y, z + 0.5));
|
||||||
player.getAdventureSettings().setCanFly(true);
|
player.getAdventureSettings().set(AdventureSettings.Type.ALLOW_FLIGHT, true);
|
||||||
|
player.getAdventureSettings().set(AdventureSettings.Type.FLYING, true);
|
||||||
player.getAdventureSettings().update();
|
player.getAdventureSettings().update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.boydti.fawe.nukkit.core.gui;
|
||||||
|
|
||||||
|
import cn.nukkit.form.response.FormResponse;
|
||||||
|
import cn.nukkit.form.window.FormWindow;
|
||||||
|
|
||||||
|
public class DelegateFormWindow extends FormWindow {
|
||||||
|
private final FormWindow parent;
|
||||||
|
|
||||||
|
public DelegateFormWindow(FormWindow parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String getJSONData() {
|
||||||
|
return parent.getJSONData();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setResponse(String s) {
|
||||||
|
parent.setResponse(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormResponse getResponse() {
|
||||||
|
return parent.getResponse();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,147 @@
|
|||||||
|
package com.boydti.fawe.nukkit.core.gui;
|
||||||
|
|
||||||
|
import cn.nukkit.Player;
|
||||||
|
import cn.nukkit.form.element.Element;
|
||||||
|
import cn.nukkit.form.element.ElementButton;
|
||||||
|
import cn.nukkit.form.element.ElementButtonImageData;
|
||||||
|
import cn.nukkit.form.element.ElementDropdown;
|
||||||
|
import cn.nukkit.form.element.ElementInput;
|
||||||
|
import cn.nukkit.form.element.ElementLabel;
|
||||||
|
import cn.nukkit.form.element.ElementSlider;
|
||||||
|
import cn.nukkit.form.element.ElementStepSlider;
|
||||||
|
import cn.nukkit.form.element.ElementToggle;
|
||||||
|
import cn.nukkit.form.window.FormWindow;
|
||||||
|
import cn.nukkit.form.window.FormWindowCustom;
|
||||||
|
import cn.nukkit.form.window.FormWindowSimple;
|
||||||
|
import com.boydti.fawe.object.FawePlayer;
|
||||||
|
import com.boydti.fawe.util.gui.FormBuilder;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
public class NukkitFormBuilder implements FormBuilder<Player> {
|
||||||
|
private final List<Element> elements;
|
||||||
|
private final List<ElementButton> buttons;
|
||||||
|
private String title = "";
|
||||||
|
private String icon;
|
||||||
|
|
||||||
|
public NukkitFormBuilder() {
|
||||||
|
this.elements = new ArrayList<>();
|
||||||
|
this.buttons = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder setTitle(String text) {
|
||||||
|
checkNotNull(text);
|
||||||
|
this.title = text;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder setIcon(URL icon) {
|
||||||
|
checkNotNull(icon);
|
||||||
|
this.icon = icon.toString();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addButton(String text, URL image) {
|
||||||
|
checkNotNull(text);
|
||||||
|
if (!elements.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
ElementButton button;
|
||||||
|
if (image != null) {
|
||||||
|
ElementButtonImageData imageData = new ElementButtonImageData("url", image.toString());
|
||||||
|
button = new ElementButton(text, imageData);
|
||||||
|
} else {
|
||||||
|
button = new ElementButton(text);
|
||||||
|
}
|
||||||
|
buttons.add(button);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addDropdown(String text, int def, String... options) {
|
||||||
|
checkNotNull(text);
|
||||||
|
checkNotNull(options);
|
||||||
|
for (String option : options) checkNotNull(option);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementDropdown(text, Arrays.asList(options), def));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addInput(String text, String placeholder, String def) {
|
||||||
|
checkNotNull(text);
|
||||||
|
checkNotNull(placeholder);
|
||||||
|
checkNotNull(def);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementInput(text, placeholder, def));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addLabel(String text) {
|
||||||
|
checkNotNull(text);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementLabel(text));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addSlider(String text, double min, double max, int step, double def) {
|
||||||
|
checkNotNull(text);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementSlider(text, (float) min, (float) max, step, (float) def));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addStepSlider(String text, int def, String... options) {
|
||||||
|
checkNotNull(text);
|
||||||
|
checkNotNull(options);
|
||||||
|
for (String option : options) checkNotNull(option);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementStepSlider(text, Arrays.asList(options), def));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder addToggle(String text, boolean def) {
|
||||||
|
checkNotNull(text);
|
||||||
|
if (!buttons.isEmpty()) throw new UnsupportedOperationException("GUI does not support mixed buttons / elements");
|
||||||
|
|
||||||
|
elements.add(new ElementToggle(text, def));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void display(FawePlayer<Player> fp, Consumer<List<String>> response) {
|
||||||
|
FormWindow window;
|
||||||
|
if (buttons.isEmpty()) {
|
||||||
|
if (icon == null) {
|
||||||
|
window = new FormWindowCustom("Title", elements);
|
||||||
|
} else {
|
||||||
|
window = new FormWindowCustom("Title", elements, icon);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
window = new FormWindowSimple("Title", "", buttons);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response != null) {
|
||||||
|
window = new ResponseFormWindow(window, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = fp.parent;
|
||||||
|
player.showFormWindow(window);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.boydti.fawe.nukkit.core.gui;
|
||||||
|
|
||||||
|
import cn.nukkit.form.window.FormWindow;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
public class ResponseFormWindow extends DelegateFormWindow {
|
||||||
|
private final Consumer<List<String>> task;
|
||||||
|
|
||||||
|
public ResponseFormWindow(FormWindow parent, Consumer<List<String>> onResponse) {
|
||||||
|
super(parent);
|
||||||
|
checkNotNull(onResponse);
|
||||||
|
this.task = onResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void respond(List<String> response) {
|
||||||
|
task.accept(response);
|
||||||
|
}
|
||||||
|
}
|
@ -4,12 +4,14 @@ import cn.nukkit.Nukkit;
|
|||||||
import cn.nukkit.Player;
|
import cn.nukkit.Player;
|
||||||
import cn.nukkit.event.EventHandler;
|
import cn.nukkit.event.EventHandler;
|
||||||
import cn.nukkit.event.Listener;
|
import cn.nukkit.event.Listener;
|
||||||
|
import cn.nukkit.event.player.PlayerFormRespondedEvent;
|
||||||
import cn.nukkit.event.player.PlayerQuitEvent;
|
import cn.nukkit.event.player.PlayerQuitEvent;
|
||||||
import com.boydti.fawe.Fawe;
|
import com.boydti.fawe.Fawe;
|
||||||
import com.boydti.fawe.IFawe;
|
import com.boydti.fawe.IFawe;
|
||||||
import com.boydti.fawe.config.Settings;
|
import com.boydti.fawe.config.Settings;
|
||||||
import com.boydti.fawe.nukkit.core.NukkitTaskManager;
|
import com.boydti.fawe.nukkit.core.NukkitTaskManager;
|
||||||
import com.boydti.fawe.nukkit.core.NukkitWorldEdit;
|
import com.boydti.fawe.nukkit.core.NukkitWorldEdit;
|
||||||
|
import com.boydti.fawe.nukkit.core.gui.NukkitFormBuilder;
|
||||||
import com.boydti.fawe.nukkit.listener.BrushListener;
|
import com.boydti.fawe.nukkit.listener.BrushListener;
|
||||||
import com.boydti.fawe.nukkit.optimization.queue.NukkitQueue;
|
import com.boydti.fawe.nukkit.optimization.queue.NukkitQueue;
|
||||||
import com.boydti.fawe.object.FaweChunk;
|
import com.boydti.fawe.object.FaweChunk;
|
||||||
@ -19,6 +21,7 @@ import com.boydti.fawe.object.FaweQueue;
|
|||||||
import com.boydti.fawe.object.brush.visualization.VisualChunk;
|
import com.boydti.fawe.object.brush.visualization.VisualChunk;
|
||||||
import com.boydti.fawe.regions.FaweMaskManager;
|
import com.boydti.fawe.regions.FaweMaskManager;
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
|
import com.boydti.fawe.util.gui.FormBuilder;
|
||||||
import com.sk89q.worldedit.world.World;
|
import com.sk89q.worldedit.world.World;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -34,6 +37,9 @@ public class FaweNukkit implements IFawe, Listener {
|
|||||||
this.plugin = mod;
|
this.plugin = mod;
|
||||||
FaweChunk.HEIGHT = 256;
|
FaweChunk.HEIGHT = 256;
|
||||||
VisualChunk.VISUALIZE_BLOCK = 20 << 4;
|
VisualChunk.VISUALIZE_BLOCK = 20 << 4;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
try {
|
try {
|
||||||
new BrushListener(mod);
|
new BrushListener(mod);
|
||||||
@ -44,6 +50,11 @@ public class FaweNukkit implements IFawe, Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FormBuilder getFormBuilder() {
|
||||||
|
return new NukkitFormBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPlayerCount() {
|
public int getPlayerCount() {
|
||||||
return plugin.getServer().getOnlinePlayers().size();
|
return plugin.getServer().getOnlinePlayers().size();
|
||||||
@ -59,6 +70,11 @@ public class FaweNukkit implements IFawe, Listener {
|
|||||||
return Nukkit.VERSION;
|
return Nukkit.VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onFormSubmit(PlayerFormRespondedEvent event) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -86,6 +102,8 @@ public class FaweNukkit implements IFawe, Listener {
|
|||||||
@Override
|
@Override
|
||||||
public void setupCommand(String label, final FaweCommand cmd) {
|
public void setupCommand(String label, final FaweCommand cmd) {
|
||||||
plugin.getServer().getCommandMap().register(label, new NukkitCommand(label, cmd));
|
plugin.getServer().getCommandMap().register(label, new NukkitCommand(label, cmd));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -193,6 +193,21 @@ public class NukkitQueue extends NMSMappedFaweQueue<Level, BaseFullChunk, BaseFu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeSectionLighting(BaseFullChunk section, int layer, boolean hasSky) {
|
||||||
|
int minY = layer << 4;
|
||||||
|
int maxY = minY + 15;
|
||||||
|
for (int y = minY; y < maxY; y++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
section.setBlockSkyLight(x, y, z, 0);
|
||||||
|
section.setBlockLight(x, y, z, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(BaseFullChunk sections, RelightMode mode, boolean hasSky) {
|
public boolean removeLighting(BaseFullChunk sections, RelightMode mode, boolean hasSky) {
|
||||||
for (int y = 0; y < 256; y++) {
|
for (int y = 0; y < 256; y++) {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
rootProject.name = 'FastAsyncWorldEdit'
|
rootProject.name = 'FastAsyncWorldEdit'
|
||||||
|
|
||||||
include 'core', 'bukkit', 'favs', 'nukkit', 'forge1710', 'forge189', 'forge194', 'forge110', 'forge111', 'sponge', 'forge112', 'sponge111'
|
include 'core', 'bukkit', 'favs', 'nukkit', 'forge1710', 'forge189', 'forge194', 'forge110', 'forge111', 'sponge112', 'forge112', 'sponge111'
|
Binary file not shown.
Binary file not shown.
@ -563,19 +563,14 @@ public class SpongeQueue_1_11 extends NMSMappedFaweQueue<World, net.minecraft.wo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage section, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlocklightArray(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkylightArray(new NibbleArray());
|
||||||
section.setBlocklightArray(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkylightArray(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,8 +70,8 @@ shadowJar {
|
|||||||
include(dependency('com.github.luben:zstd-jni:1.1.1'))
|
include(dependency('com.github.luben:zstd-jni:1.1.1'))
|
||||||
// include(dependency('org.javassist:javassist:3.22.0-CR1'))
|
// include(dependency('org.javassist:javassist:3.22.0-CR1'))
|
||||||
include(dependency('co.aikar:fastutil-lite:1.0'))
|
include(dependency('co.aikar:fastutil-lite:1.0'))
|
||||||
include(dependency(name: 'worldedit-core-6.1.7-SNAPSHOT-dist'))
|
include(dependency(name: 'worldedit-core-6.1.9-SNAPSHOT-dist'))
|
||||||
include(dependency('com.sk89q.worldedit:worldedit-sponge:6.1.7-SNAPSHOT'))
|
include(dependency('com.sk89q.worldedit:worldedit-sponge:6.1.9-SNAPSHOT'))
|
||||||
include(dependency('org.yaml:snakeyaml:1.16'))
|
include(dependency('org.yaml:snakeyaml:1.16'))
|
||||||
}
|
}
|
||||||
archiveName = "${parent.name}-${project.name}-${parent.version}.jar"
|
archiveName = "${parent.name}-${project.name}-${parent.version}.jar"
|
@ -565,19 +565,14 @@ public class SpongeQueue_1_12 extends NMSMappedFaweQueue<World, net.minecraft.wo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeLighting(ExtendedBlockStorage[] sections, RelightMode mode, boolean sky) {
|
public boolean removeSectionLighting(ExtendedBlockStorage section, int layer, boolean sky) {
|
||||||
if (mode == RelightMode.ALL) {
|
if (section != null) {
|
||||||
for (int i = 0; i < sections.length; i++) {
|
section.setBlockLight(new NibbleArray());
|
||||||
ExtendedBlockStorage section = sections[i];
|
if (sky) {
|
||||||
if (section != null) {
|
section.setSkyLight(new NibbleArray());
|
||||||
section.setBlockLight(new NibbleArray());
|
|
||||||
if (sky) {
|
|
||||||
section.setSkyLight(new NibbleArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return section != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
Loading…
Reference in New Issue
Block a user