diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index 83b7e03f6..735e88e63 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -13,15 +13,16 @@ repositories { maven { url = uri("https://papermc.io/repo/repository/maven-public/") } maven { url = uri("http://empcraft.com/maven2") } maven { url = uri("https://maven.enginehub.org/repo/") } - maven { url = uri("http://ci.frostcast.net/plugin/repository/everything") } - maven { url = uri("http://dl.bintray.com/tastybento/maven-repo") } maven { url = uri("http://ci.emc.gs/nexus/content/groups/aikar/") } - maven(fun MavenArtifactRepository.() { + maven { this.name = "JitPack" this.url = uri("https://jitpack.io") - }) - maven { url = uri("https://repo.destroystokyo.com/repository/maven-public//") } - maven { url = uri("http://repo.dmulloy2.net/content/groups/public/") } + } + maven { url = uri("https://repo.destroystokyo.com/repository/maven-public/") } + maven { + name = "ProtocolLib Repo" + url = uri("https://repo.dmulloy2.net/nexus/repository/public/") + } maven { url = uri("https://repo.inventivetalent.org/content/groups/public/")} flatDir {dir(File("src/main/resources"))} } @@ -64,7 +65,7 @@ dependencies { "implementation"("com.bekvon.bukkit.residence:Residence:4.5._13.1") { isTransitive = false } "implementation"("com.palmergames.bukkit:towny:0.84.0.9") { isTransitive = false } "implementation"("com.thevoxelbox.voxelsniper:voxelsniper:5.171.0") { isTransitive = false } - "implementation"("com.comphenix.protocol:ProtocolLib-API:4.4.0-SNAPSHOT") { isTransitive = false } + "implementation"("com.comphenix.protocol:ProtocolLib:4.5.0") { isTransitive = false } } tasks.named("processResources") { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java index 31eb2c686..df2cb23ae 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java @@ -27,7 +27,6 @@ import com.boydti.fawe.util.Jars; import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.util.WEManager; import com.boydti.fawe.util.image.ImageViewer; -import com.boydti.fawe.util.task.Task; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitPlayer; import io.papermc.lib.PaperLib; @@ -38,7 +37,6 @@ import java.util.Collection; import java.util.UUID; import java.util.function.Supplier; import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -159,24 +157,6 @@ public class FaweBukkit implements IFawe, Listener { } - @Override - public com.sk89q.worldedit.entity.Player wrap(final Object obj) { - Player player = null; - if (obj.getClass() == Player.class) { - player = (Player) obj; - } else if (obj.getClass() == String.class) { - String name = (String) obj; - player = Bukkit.getPlayer(name); - } else if (obj.getClass() == UUID.class) { - UUID uuid = (UUID) obj; - player = Bukkit.getPlayer(uuid); - } - if (player == null) { - throw new IllegalArgumentException("Unknown player type: " + obj); - } - return BukkitAdapter.adapt(player); - } - public ItemUtil getItemUtil() { ItemUtil tmp = itemUtil; if (tmp == null) { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/FaweAdapter_All.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/FaweAdapter_All.java deleted file mode 100644 index d4aa283d1..000000000 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/FaweAdapter_All.java +++ /dev/null @@ -1,453 +0,0 @@ -//package com.boydti.fawe.bukkit.v0; -// -//import com.boydti.fawe.FaweCache; -//import com.boydti.fawe.bukkit.util.BukkitReflectionUtils; -//import com.boydti.fawe.util.ReflectionUtils; -//import com.sk89q.jnbt.ByteArrayTag; -//import com.sk89q.jnbt.ByteTag; -//import com.sk89q.jnbt.CompoundTag; -//import com.sk89q.jnbt.DoubleTag; -//import com.sk89q.jnbt.EndTag; -//import com.sk89q.jnbt.FloatTag; -//import com.sk89q.jnbt.IntArrayTag; -//import com.sk89q.jnbt.IntTag; -//import com.sk89q.jnbt.ListTag; -//import com.sk89q.jnbt.LongTag; -//import com.sk89q.jnbt.NBTConstants; -//import com.sk89q.jnbt.ShortTag; -//import com.sk89q.jnbt.StringTag; -//import com.sk89q.jnbt.Tag; -//import com.sk89q.worldedit.blocks.BaseBlock; -//import com.sk89q.worldedit.world.block.BlockState; -//import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter; -//import com.sk89q.worldedit.entity.BaseEntity; -//import com.sk89q.worldedit.internal.Constants; -//import java.lang.reflect.Constructor; -//import java.lang.reflect.Field; -//import java.lang.reflect.InvocationTargetException; -//import java.lang.reflect.Method; -//import java.lang.reflect.Modifier; -//import java.util.ArrayList; -//import java.util.Arrays; -//import java.util.HashMap; -//import java.util.List; -//import java.util.Map; -//import java.util.concurrent.ConcurrentHashMap; -//import javax.annotation.Nullable; -//import org.bukkit.Location; -//import org.bukkit.Material; -//import org.bukkit.World; -//import org.bukkit.block.Biome; -//import org.bukkit.entity.Entity; -//import org.bukkit.event.entity.CreatureSpawnEvent; -// -//public class FaweAdapter_All implements BukkitImplAdapter { -// -// private final Class classCraftBlock; -// private final Method biomeToBiomeBase; -// private final Class classBiomeBase; -// private final Method biomeBaseToTypeId; -// private final Method getBiome; -// private final Method biomeBaseToBiome; -// private final Class classCraftWorld; -// private final Method getHandleWorld; -// private final Class classWorld; -// private final Method getTileEntity1; -// private final Method getTileEntity2; -// private final Class classNBTTagCompound; -// private final Constructor newNBTTagCompound; -// private final Class classTileEntity; -// private final Class classCraftEntity; -// private final Method getHandleEntity; -// private final Class classNBTTagInt; -// private final Class classNBTBase; -// private final Constructor newNBTTagInt; -// private final Method setNBTTagCompound; -// private Class classEntity; -// private Method getBukkitEntity; -// private Method addEntity; -// private Method setLocation; -// private Class classEntityTypes; -// private Method getEntityId; -// private Method createEntityFromId; -// private Method readTagIntoEntity; -// private Method readEntityIntoTag; -// private Constructor newMinecraftKey; -// private Class classMinecraftKey; -// private Method readTagIntoTileEntity; -// private Method readTileEntityIntoTag; -// private Class classBlockPosition; -// private Constructor newBlockPosition; -// -// private Map, NMSTagConstructor> WEToNMS = new ConcurrentHashMap<>(); -// private Map NMSToWE = new ConcurrentHashMap<>(); -// private Map, Integer> TagToId = new ConcurrentHashMap<>(); -// -// public FaweAdapter_All() throws Throwable { -// BukkitReflectionUtils.init(); -// classCraftWorld = BukkitReflectionUtils.getCbClass("CraftWorld"); -// classCraftBlock = BukkitReflectionUtils.getCbClass("block.CraftBlock"); -// classCraftEntity = BukkitReflectionUtils.getCbClass("entity.CraftEntity"); -// classBiomeBase = BukkitReflectionUtils.getNmsClass("BiomeBase"); -// classWorld = BukkitReflectionUtils.getNmsClass("World"); -// classTileEntity = BukkitReflectionUtils.getNmsClass("TileEntity"); -// -// biomeToBiomeBase = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeToBiomeBase", Biome.class)); -// biomeBaseToBiome = ReflectionUtils.setAccessible(classCraftBlock.getDeclaredMethod("biomeBaseToBiome", classBiomeBase)); -// getBiome = ReflectionUtils.setAccessible(classBiomeBase.getDeclaredMethod("getBiome", int.class)); -// biomeBaseToTypeId = ReflectionUtils.findMethod(classBiomeBase, int.class, classBiomeBase); -// getHandleWorld = ReflectionUtils.setAccessible(classCraftWorld.getDeclaredMethod("getHandle")); -// getHandleEntity = ReflectionUtils.setAccessible(classCraftEntity.getDeclaredMethod("getHandle")); -// try { -// classBlockPosition = BukkitReflectionUtils.getNmsClass("BlockPosition"); -// } catch (Throwable ignore) { -// } -// if (classBlockPosition != null) { -// getTileEntity1 = classWorld.getDeclaredMethod("getTileEntity", classBlockPosition); -// getTileEntity2 = null; -// newBlockPosition = ReflectionUtils.setAccessible(classBlockPosition.getConstructor(int.class, int.class, int.class)); -// } else { -// getTileEntity1 = null; -// getTileEntity2 = ReflectionUtils.setAccessible(classWorld.getDeclaredMethod("getTileEntity", int.class, int.class, int.class)); -// } -// -// classNBTTagCompound = BukkitReflectionUtils.getNmsClass("NBTTagCompound"); -// classNBTBase = BukkitReflectionUtils.getNmsClass("NBTBase"); -// classNBTTagInt = BukkitReflectionUtils.getNmsClass("NBTTagInt"); -// newNBTTagInt = ReflectionUtils.setAccessible(classNBTTagInt.getConstructor(int.class)); -// setNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getDeclaredMethod("set", String.class, classNBTBase)); -// newNBTTagCompound = ReflectionUtils.setAccessible(classNBTTagCompound.getConstructor()); -// try { -// readTileEntityIntoTag = ReflectionUtils.setAccessible(classTileEntity.getDeclaredMethod("save", classNBTTagCompound)); -// } catch (Throwable ignore) { -// readTileEntityIntoTag = ReflectionUtils.findMethod(classTileEntity, classNBTTagCompound, classNBTTagCompound); -// if (readTileEntityIntoTag == null) { -// readTileEntityIntoTag = ReflectionUtils.findMethod(classTileEntity, 1, Void.TYPE, classNBTTagCompound); -// } -// } -// -// -// try { -// readTagIntoTileEntity = ReflectionUtils.setAccessible(classTileEntity.getDeclaredMethod("load", classNBTTagCompound)); -// } catch (Throwable ignore) { -// readTagIntoTileEntity = ReflectionUtils.findMethod(classTileEntity, 0, Void.TYPE, classNBTTagCompound); -// } -// -// -// List nmsClasses = Arrays.asList("NBTTagCompound", "NBTTagByte", "NBTTagByteArray", "NBTTagDouble", "NBTTagFloat", "NBTTagInt", "NBTTagIntArray", "NBTTagList", "NBTTagEnd", "NBTTagString", "NBTTagShort", "NBTTagLong"); -// List> weClasses = Arrays.asList(CompoundTag.class, ByteTag.class, ByteArrayTag.class, DoubleTag.class, FloatTag.class, IntTag.class, IntArrayTag.class, ListTag.class, EndTag.class, StringTag.class, ShortTag.class, LongTag.class); -// int[] ids = new int[]{10, 1, 7, 6, 5, 3, 11, 9, 0, 8, 2, 4}; -// -// int noMods = Modifier.STATIC; -// int hasMods = 0; -// for (int i = 0; i < nmsClasses.size(); i++) { -// Class nmsClass = BukkitReflectionUtils.getNmsClass(nmsClasses.get(i)); -// Class weClass = weClasses.get(i); -// TagToId.put(weClass, ids[i]); -// -// Constructor nmsConstructor = ReflectionUtils.setAccessible(nmsClass.getDeclaredConstructor()); -// -// if (weClass == EndTag.class) { -// NMSToWE.put(nmsClass, value -> new EndTag()); -// WEToNMS.put(weClass, value -> nmsConstructor.newInstance()); -// } else if (weClass == CompoundTag.class) { -// Field mapField = ReflectionUtils.findField(nmsClass, Map.class, hasMods, noMods); -// Constructor weConstructor = ReflectionUtils.setAccessible(CompoundTag.class.getConstructor(Map.class)); -// -// NMSToWE.put(nmsClass, value -> { -// Map map = (Map) mapField.get(value); -// Map weMap = new HashMap(); -// for (Map.Entry entry : map.entrySet()) { -// weMap.put(entry.getKey(), toNative(entry.getValue())); -// } -// return new CompoundTag(weMap); -// }); -// -// WEToNMS.put(weClass, value -> { -// Map map = ReflectionUtils.getMap(((CompoundTag) value).getValue()); -// Object nmsTag = nmsConstructor.newInstance(); -// Map nmsMap = (Map) mapField.get(nmsTag); -// for (Map.Entry entry : map.entrySet()) { -// nmsMap.put(entry.getKey(), fromNative(entry.getValue())); -// } -// return nmsTag; -// }); -// } else if (weClass == ListTag.class) { -// Field listField = ReflectionUtils.findField(nmsClass, List.class, hasMods, noMods); -// Field typeField = ReflectionUtils.findField(nmsClass, byte.class, hasMods, noMods); -// Constructor weConstructor = ReflectionUtils.setAccessible(ListTag.class.getConstructor(Class.class, List.class)); -// -// NMSToWE.put(nmsClass, tag -> { -// int type = ((Number) typeField.get(tag)).intValue(); -// List list = (List) listField.get(tag); -// -// Class weType = NBTConstants.getClassFromType(type); -// ArrayList weList = new ArrayList<>(); -// for (Object nmsTag : list) { -// weList.add(toNative(nmsTag)); -// } -// return new ListTag(weType, weList); -// }); -// WEToNMS.put(weClass, tag -> { -// ListTag lt = (ListTag) tag; -// List list = ReflectionUtils.getList(lt.getValue()); -// Class type = lt.getType(); -// -// int typeId = TagToId.get(type); -// Object nmsTagList = nmsConstructor.newInstance(); -// typeField.set(nmsTagList, (byte) typeId); -// ArrayList nmsList = (ArrayList) listField.get(nmsTagList); -// for (Tag weTag : list) { -// nmsList.add(fromNative(weTag)); -// } -// return nmsTagList; -// }); -// } else { -// Field typeField = ReflectionUtils.findField(nmsClass, null, hasMods, noMods); -// Constructor weConstructor = ReflectionUtils.setAccessible(weClass.getConstructor(typeField.getType())); -// -// NMSToWE.put(nmsClass, tag -> { -// Object value = typeField.get(tag); -// return weConstructor.newInstance(value); -// }); -// -// WEToNMS.put(weClass, tag -> { -// Object nmsTag = nmsConstructor.newInstance(); -// typeField.set(nmsTag, tag.getValue()); -// return nmsTag; -// }); -// } -// } -// try { -// classEntity = BukkitReflectionUtils.getNmsClass("Entity"); -// classEntityTypes = BukkitReflectionUtils.getNmsClass("EntityTypes"); -// -// getBukkitEntity = ReflectionUtils.setAccessible(classEntity.getDeclaredMethod("getBukkitEntity")); -// 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)); -// -// try { -// classMinecraftKey = BukkitReflectionUtils.getNmsClass("MinecraftKey"); -// newMinecraftKey = classMinecraftKey.getConstructor(String.class); -// } catch (Throwable ignore) { -// } -// if (classMinecraftKey != null) { -// getEntityId = ReflectionUtils.findMethod(classEntityTypes, classMinecraftKey, classEntity); -// createEntityFromId = ReflectionUtils.findMethod(classEntityTypes, classEntity, classMinecraftKey, classWorld); -// } else { -// getEntityId = ReflectionUtils.findMethod(classEntityTypes, String.class, classEntity); -// createEntityFromId = ReflectionUtils.findMethod(classEntityTypes, classEntity, String.class, classWorld); -// } -// -// noMods = Modifier.ABSTRACT | Modifier.PROTECTED | Modifier.PRIVATE; -// try { -// readEntityIntoTag = classEntity.getDeclaredMethod("save", classNBTTagCompound); -// } catch (Throwable ignore) { -// readEntityIntoTag = ReflectionUtils.findMethod(classEntity, classNBTTagCompound, classNBTTagCompound); -// if (readEntityIntoTag == null) { -// readEntityIntoTag = ReflectionUtils.findMethod(classEntity, 0, 0, noMods, Void.TYPE, classNBTTagCompound); -// } -// } -// ReflectionUtils.setAccessible(readEntityIntoTag); -// readTagIntoEntity = ReflectionUtils.findMethod(classEntity, 1, 0, noMods, Void.TYPE, classNBTTagCompound); -// if (readTagIntoEntity == null) { -// readTagIntoEntity = ReflectionUtils.findMethod(classEntity, 0, 0, noMods, Void.TYPE, classNBTTagCompound); -// } -// } catch (Throwable e) { -// e.printStackTrace(); -// classEntity = null; -// } -// } -// -// @Nullable -// @Override -// public BaseEntity getEntity(Entity entity) { -// try { -// if (classEntity == null) return null; -// Object nmsEntity = getHandleEntity.invoke(entity); -// -// String id = getEntityId(nmsEntity); -// -// if (id != null) { -// Object tag = newNBTTagCompound.newInstance(); -// readEntityIntoTag.invoke(nmsEntity, tag); -// return new BaseEntity(id, (CompoundTag) toNative(tag)); -// } -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// return null; -// } -// -// private String getEntityId(Object entity) throws InvocationTargetException, IllegalAccessException { -// Object res = getEntityId.invoke(null, entity); -// return res == null ? null : res.toString(); -// } -// -// private Object createEntityFromId(String id, Object world) throws InvocationTargetException, IllegalAccessException, InstantiationException { -// if (classMinecraftKey != null) { -// Object key = newMinecraftKey.newInstance(id); -// return createEntityFromId.invoke(null, key, world); -// } else { -// return createEntityFromId.invoke(null, id, world); -// } -// } -// -// @Nullable -// @Override -// public Entity createEntity(Location location, BaseEntity state) { -// try { -// if (classEntity == null) return null; -// World world = location.getWorld(); -// Object nmsWorld = getHandleWorld.invoke(world); -// -// Object createdEntity = createEntityFromId(state.getTypeId(), nmsWorld); -// -// if (createdEntity != null) { -// CompoundTag nativeTag = state.getNbtData(); -// Map rawMap = ReflectionUtils.getMap(nativeTag.getValue()); -// for (String name : Constants.NO_COPY_ENTITY_NBT_FIELDS) { -// rawMap.remove(name); -// } -// if (nativeTag != null) { -// Object tag = fromNative(nativeTag); -// readTagIntoEntity.invoke(createdEntity, tag); -// } -// -// setLocation.invoke(createdEntity, location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); -// -// addEntity.invoke(nmsWorld, createdEntity, CreatureSpawnEvent.SpawnReason.CUSTOM); -// return (Entity) getBukkitEntity.invoke(createdEntity); -// } -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// return null; -// } -// -// public Tag toNative(Object nmsTag) { -// try { -// return NMSToWE.get(nmsTag.getClass()).construct(nmsTag); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// -// public Object fromNative(Tag tag) { -// try { -// return WEToNMS.get(tag.getClass()).construct(tag); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// -// @Override -// public int getBlockId(Material material) { -// return material.getId(); -// } -// -// @Override -// public Material getMaterial(int id) { -// return Material.getMaterial(id); -// } -// -// @Override -// public BiomeType getBiomeType(Biome biome) { -// try { -// Object biomeBase = biomeToBiomeBase.invoke(null, biome); -// if (biomeBase != null) return (int) biomeBaseToTypeId.invoke(null, biomeBase); -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// return 0; -// } -// -// @Override -// public Biome getBiome(int id) { -// try { -// Object biomeBase = getBiome.invoke(null, id); -// if (biomeBase != null) return (Biome) biomeBaseToBiome.invoke(null, biomeBase); -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// return Biome.OCEAN; -// } -// -// @Override -// public BaseBlock getBlock(Location location) { -// try { -// World craftWorld = location.getWorld(); -// int x = location.getBlockX(); -// int y = location.getBlockY(); -// int z = location.getBlockZ(); -// -// org.bukkit.block.Block bukkitBlock = location.getBlock(); -// BaseBlock block = FaweCache.IMP.getBlock(bukkitBlock.getTypeId(), bukkitBlock.getData()); -// -// // Read the NBT data -// Object nmsWorld = getHandleWorld.invoke(craftWorld); -// Object tileEntity = getTileEntity(nmsWorld, x, y, z); -// -// if (tileEntity != null) { -// block = new BaseBlock(block); -// Object tag = newNBTTagCompound.newInstance(); -// readTileEntityIntoTag.invoke(tileEntity, tag); -// block.setNbtData((CompoundTag) toNative(tag)); -// } -// return block; -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// } -// -// public Object getTileEntity(Object nmsWorld, int x, int y, int z) { -// try { -// if (getTileEntity1 != null) { -// Object pos = newBlockPosition.newInstance(x, y, z); -// return getTileEntity1.invoke(nmsWorld, pos); -// } else { -// return getTileEntity2.invoke(nmsWorld, x, y, z); -// } -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// -// @Override -// public boolean setBlock(Location location, BaseBlock block, boolean notifyAndLight) { -// World craftWorld = location.getWorld(); -// int x = location.getBlockX(); -// int y = location.getBlockY(); -// int z = location.getBlockZ(); -// -// boolean changed = location.getBlock().setTypeIdAndData(block.getId(), (byte) block.getData(), notifyAndLight); -// -// CompoundTag nativeTag = block.getNbtData(); -// if (nativeTag != null) { -// try { -// Object nmsWorld = getHandleWorld.invoke(craftWorld); -// Object tileEntity = getTileEntity(nmsWorld, x, y, z); -// if (tileEntity != null) { -// Object tag = fromNative(nativeTag); -// -// setNBTTagCompound.invoke(tag, "x", newNBTTagInt.newInstance(x)); -// setNBTTagCompound.invoke(tag, "y", newNBTTagInt.newInstance(y)); -// setNBTTagCompound.invoke(tag, "z", newNBTTagInt.newInstance(z)); -// readTagIntoTileEntity.invoke(tileEntity, tag); // Load data -// } -// } catch (Throwable e) { -// throw new RuntimeException(e); -// } -// } -// -// return changed; -// } -// -// private interface NMSTagConstructor { -// Object construct(Tag value) throws Exception; -// } -// -// private interface WETagConstructor { -// Tag construct(Object value) throws Exception; -// } -//} diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitAdapter_1_14.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitAdapter_1_14.java index 09f174e1d..841525974 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitAdapter_1_14.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitAdapter_1_14.java @@ -12,6 +12,9 @@ import com.boydti.fawe.util.TaskManager; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Method; import java.util.concurrent.locks.ReentrantLock; import net.jpountz.util.UnsafeUtils; import net.minecraft.server.v1_14_R1.Block; @@ -52,6 +55,8 @@ public final class BukkitAdapter_1_14 extends NMSAdapter { private final static Field fieldDirtyCount; private final static Field fieldDirtyBits; + private final static MethodHandle methodGetVisibleChunk; + private static final int CHUNKSECTION_BASE; private static final int CHUNKSECTION_SHIFT; @@ -78,6 +83,10 @@ public final class BukkitAdapter_1_14 extends NMSAdapter { fieldDirtyBits = PlayerChunk.class.getDeclaredField("r"); fieldDirtyBits.setAccessible(true); + Method declaredGetVisibleChunk = PlayerChunkMap.class.getDeclaredMethod("getVisibleChunk", long.class); + declaredGetVisibleChunk.setAccessible(true); + methodGetVisibleChunk = MethodHandles.lookup().unreflect(declaredGetVisibleChunk); + { Field tmp; try { @@ -154,11 +163,11 @@ public final class BukkitAdapter_1_14 extends NMSAdapter { public static PlayerChunk getPlayerChunk(net.minecraft.server.v1_14_R1.WorldServer nmsWorld, final int cx, final int cz) { PlayerChunkMap chunkMap = nmsWorld.getChunkProvider().playerChunkMap; - PlayerChunk playerChunk = chunkMap.visibleChunks.get(ChunkCoordIntPair.pair(cx, cz)); - if (playerChunk == null) { - return null; + try { + return (PlayerChunk)methodGetVisibleChunk.invoke(chunkMap, ChunkCoordIntPair.pair(cx, cz)); + } catch (Throwable thr) { + throw new RuntimeException(thr); } - return playerChunk; } public static void sendChunk(net.minecraft.server.v1_14_R1.WorldServer nmsWorld, int X, int Z, int mask) { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15/BukkitAdapter_1_15.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15/BukkitAdapter_1_15.java index 0496cc979..98c8acac2 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15/BukkitAdapter_1_15.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15/BukkitAdapter_1_15.java @@ -12,6 +12,9 @@ import com.boydti.fawe.util.TaskManager; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.reflect.Method; import java.util.concurrent.locks.ReentrantLock; import net.jpountz.util.UnsafeUtils; import net.minecraft.server.v1_15_R1.*; @@ -40,6 +43,8 @@ public final class BukkitAdapter_1_15 extends NMSAdapter { private final static Field fieldDirtyCount; private final static Field fieldDirtyBits; + private final static MethodHandle methodGetVisibleChunk; + private static final int CHUNKSECTION_BASE; private static final int CHUNKSECTION_SHIFT; @@ -66,6 +71,10 @@ public final class BukkitAdapter_1_15 extends NMSAdapter { fieldDirtyBits = PlayerChunk.class.getDeclaredField("r"); fieldDirtyBits.setAccessible(true); + Method declaredGetVisibleChunk = PlayerChunkMap.class.getDeclaredMethod("getVisibleChunk", long.class); + declaredGetVisibleChunk.setAccessible(true); + methodGetVisibleChunk = MethodHandles.lookup().unreflect(declaredGetVisibleChunk); + Field tmp = DataPaletteBlock.class.getDeclaredField("j"); ReflectionUtils.setAccessibleNonFinal(tmp); fieldLock = tmp; @@ -135,8 +144,11 @@ public final class BukkitAdapter_1_15 extends NMSAdapter { public static PlayerChunk getPlayerChunk(net.minecraft.server.v1_15_R1.WorldServer nmsWorld, final int cx, final int cz) { PlayerChunkMap chunkMap = nmsWorld.getChunkProvider().playerChunkMap; - PlayerChunk playerChunk = chunkMap.visibleChunks.get(ChunkCoordIntPair.pair(cx, cz)); - return playerChunk; + try { + return (PlayerChunk)methodGetVisibleChunk.invoke(chunkMap, ChunkCoordIntPair.pair(cx, cz)); + } catch (Throwable thr) { + throw new RuntimeException(thr); + } } public static void sendChunk(net.minecraft.server.v1_15_R1.WorldServer nmsWorld, int X, int Z, int mask) { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitAdapter_1_15_2.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitAdapter_1_15_2.java index e42b624fd..4e67ef329 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitAdapter_1_15_2.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitAdapter_1_15_2.java @@ -12,6 +12,10 @@ import com.boydti.fawe.util.TaskManager; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockTypesCache; import io.papermc.lib.PaperLib; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Method; import java.util.concurrent.locks.ReentrantLock; import net.jpountz.util.UnsafeUtils; import net.minecraft.server.v1_15_R1.*; @@ -40,6 +44,8 @@ public final class BukkitAdapter_1_15_2 extends NMSAdapter { private final static Field fieldDirtyCount; private final static Field fieldDirtyBits; + private final static MethodHandle methodGetVisibleChunk; + private static final int CHUNKSECTION_BASE; private static final int CHUNKSECTION_SHIFT; @@ -66,6 +72,10 @@ public final class BukkitAdapter_1_15_2 extends NMSAdapter { fieldDirtyBits = PlayerChunk.class.getDeclaredField("r"); fieldDirtyBits.setAccessible(true); + Method declaredGetVisibleChunk = PlayerChunkMap.class.getDeclaredMethod("getVisibleChunk", long.class); + declaredGetVisibleChunk.setAccessible(true); + methodGetVisibleChunk = MethodHandles.lookup().unreflect(declaredGetVisibleChunk); + Field tmp = DataPaletteBlock.class.getDeclaredField("j"); ReflectionUtils.setAccessibleNonFinal(tmp); fieldLock = tmp; @@ -136,8 +146,11 @@ public final class BukkitAdapter_1_15_2 extends NMSAdapter { public static PlayerChunk getPlayerChunk(WorldServer nmsWorld, final int cx, final int cz) { PlayerChunkMap chunkMap = nmsWorld.getChunkProvider().playerChunkMap; - PlayerChunk playerChunk = chunkMap.visibleChunks.get(ChunkCoordIntPair.pair(cx, cz)); - return playerChunk; + try { + return (PlayerChunk)methodGetVisibleChunk.invoke(chunkMap, ChunkCoordIntPair.pair(cx, cz)); + } catch (Throwable thr) { + throw new RuntimeException(thr); + } } public static void sendChunk(WorldServer nmsWorld, int X, int Z, int mask) { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/FaweLocalBlockQueue.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/FaweLocalBlockQueue.java index 10c0883ab..be0c7f8eb 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/FaweLocalBlockQueue.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/FaweLocalBlockQueue.java @@ -18,21 +18,21 @@ import com.sk89q.worldedit.world.block.BlockState; // TODO FIXME public class FaweLocalBlockQueue extends LocalBlockQueue { - public final IQueueExtent IMP; + public final IQueueExtent instance; private final World world; private BlockVector3 mutable = new MutableBlockVector3(); public FaweLocalBlockQueue(String worldName) { super(worldName); this.world = FaweAPI.getWorld(worldName); - IMP = Fawe.get().getQueueHandler().getQueue(world); + instance = Fawe.get().getQueueHandler().getQueue(world); Fawe.get().getQueueHandler().unCache(); } @Override public boolean next() { - if (!IMP.isEmpty()) { - IMP.flush(); + if (!instance.isEmpty()) { + instance.flush(); } return false; } @@ -49,7 +49,7 @@ public class FaweLocalBlockQueue extends LocalBlockQueue { @Override public int size() { - return IMP.isEmpty() ? 0 : 1; + return instance.isEmpty() ? 0 : 1; } @Override @@ -62,33 +62,33 @@ public class FaweLocalBlockQueue extends LocalBlockQueue { @Override public long getModified() { - return IMP.size(); + return instance.size(); } @Override public boolean setBlock(final int x, final int y, final int z, final BlockState id) { - return IMP.setBlock(x, y, z, id); + return instance.setBlock(x, y, z, id); } @Override public boolean setBlock(int x, int y, int z, Pattern pattern) { mutable.setComponents(x, y, z); - return pattern.apply(IMP, mutable, mutable); + return pattern.apply(instance, mutable, mutable); } @Override public boolean setBlock(final int x, final int y, final int z, final BaseBlock id) { - return IMP.setBlock(x, y, z, id); + return instance.setBlock(x, y, z, id); } @Override public BlockState getBlock(int x, int y, int z) { - return IMP.getBlock(x, y, z); + return instance.getBlock(x, y, z); } @Override public boolean setBiome(int x, int z, BiomeType biomeType) { - return IMP.setBiome(x, 0, z, biomeType); + return instance.setBiome(x, 0, z, biomeType); } @Override @@ -98,13 +98,13 @@ public class FaweLocalBlockQueue extends LocalBlockQueue { @Override public void flush() { - IMP.flush(); + instance.flush(); } @Override public boolean enqueue() { boolean val = super.enqueue(); - IMP.enableQueue(); + instance.enableQueue(); return val; } @@ -119,12 +119,12 @@ public class FaweLocalBlockQueue extends LocalBlockQueue { @Override public void regenChunk(int x, int z) { - IMP.regenerateChunk(x, z, null, null); + instance.regenerateChunk(x, z, null, null); } @Override public boolean setTile(int x, int y, int z, CompoundTag tag) { - IMP.setTile(x, y, z, (com.sk89q.jnbt.CompoundTag) FaweCache.IMP.asTag(tag)); + instance.setTile(x, y, z, (com.sk89q.jnbt.CompoundTag) FaweCache.IMP.asTag(tag)); return true; } } diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/PlotSetBiome.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/PlotSetBiome.java index 1d142d132..fe9ebea84 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/PlotSetBiome.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/regions/plotsquared/PlotSetBiome.java @@ -19,6 +19,7 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions; import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.extension.platform.Capability; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.world.biome.BiomeType; @@ -29,6 +30,7 @@ import java.util.Collection; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadLocalRandom; +import org.bukkit.Bukkit; @CommandDeclaration( command = "generatebiome", @@ -71,11 +73,11 @@ public class PlotSetBiome extends Command { } plot.addRunning(); TaskManager.IMP.async(() -> { - EditSession session = new EditSessionBuilder(FaweAPI.getWorld(plot.getArea().worldname)) + EditSession session = new EditSessionBuilder(BukkitAdapter.adapt(Bukkit.getWorld(plot.getArea().worldname))) .autoQueue(false) .checkMemory(false) .allowedRegionsEverywhere() - .player(Fawe.imp().wrap(player.getUUID())) + .player(BukkitAdapter.adapt(Bukkit.getPlayer(player.getUUID()))) .limitUnlimited() .build(); long seed = ThreadLocalRandom.current().nextLong(); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java index ec7b9fd35..48af96fd3 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java @@ -292,11 +292,11 @@ public class Fawe { } public void setupConfigs() { - MainUtil.copyFile(MainUtil.getJarFile(), "lang/strings.json", null); + MainUtil.copyFile(MainUtil.getJarFile(), "lang" + File.separator + "strings.json", null); // Setting up config.yml File file = new File(this.IMP.getDirectory(), "config.yml"); Settings.IMP.PLATFORM = IMP.getPlatform().replace("\"", ""); - try (InputStream stream = getClass().getResourceAsStream("/fawe.properties"); + try (InputStream stream = getClass().getResourceAsStream(File.separator + "fawe.properties"); BufferedReader br = new BufferedReader(new InputStreamReader(stream))) { String versionString = br.readLine(); String commitString = br.readLine(); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/IFawe.java b/worldedit-core/src/main/java/com/boydti/fawe/IFawe.java index 0c72d462d..20a15faab 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/IFawe.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/IFawe.java @@ -17,8 +17,6 @@ public interface IFawe { File getDirectory(); - Player wrap(final Object obj); - TaskManager getTaskManager(); Collection getMaskManagers(); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/Pool.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/Pool.java index a56b17942..bab5bbf63 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/Pool.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/Pool.java @@ -1,5 +1,6 @@ package com.boydti.fawe.beta.implementation.queue; +@FunctionalInterface public interface Pool { T poll(); default boolean offer(T recycle) { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java index 4a4283255..2524d3c40 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java @@ -188,13 +188,13 @@ public class SingleThreadQueueExtent extends ExtentBatchProcessorHolder implemen * Get a new IChunk from either the pool, or create a new one
+ Initialize it at the * coordinates * - * @param X - * @param Z + * @param chunkX + * @param chunkZ * @return IChunk */ - private ChunkHolder poolOrCreate(int X, int Z) { + private ChunkHolder poolOrCreate(int chunkX, int chunkZ) { ChunkHolder next = create(false); - next.init(this, X, Z); + next.init(this, chunkX, chunkZ); return next; } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/config/Settings.java b/worldedit-core/src/main/java/com/boydti/fawe/config/Settings.java index a02b6a7e9..931e4cf04 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/config/Settings.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/config/Settings.java @@ -93,7 +93,7 @@ public class Settings extends Config { " - Use a shared directory or NFS/Samba" }) public String CLIPBOARD = "clipboard"; - @Comment("Each player has their own sub directory for schematics") + @Comment("Each player has his or her own sub directory for schematics") public boolean PER_PLAYER_SCHEMATICS = true; public String COMMANDS = "commands"; } @@ -288,7 +288,7 @@ public class Settings extends Config { "Increase or decrease queue intensity (ms) [-50,50]:", " 0 = balance of performance / stability", " -10 = Allocate 10ms less for chunk placement", - "Too high will can cause lag spikes (you might be okay with this)", + "Too high can cause lag spikes (you might be okay with this)", "Too low will result in slow edits", }) public int EXTRA_TIME_MS = 0; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/InspectBrush.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/InspectBrush.java index a31a3c543..b4594b97e 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/InspectBrush.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/InspectBrush.java @@ -31,7 +31,7 @@ import java.util.Iterator; import java.util.UUID; import java.util.function.Supplier; -public class InspectBrush extends BrushTool implements DoubleActionTraceTool { +public class InspectBrush extends BrushTool { /** * Construct the tool. @@ -61,13 +61,14 @@ public class InspectBrush extends BrushTool implements DoubleActionTraceTool { } public boolean perform(final Player player, LocalSession session, boolean rightClick) { - if (!session.isToolControlEnabled() || !player.hasPermission("worldedit.tool.inspect")) { + if (!player.hasPermission("worldedit.tool.inspect")) { player.print(Caption.of("", "worldedit.tool.inspect")); System.out.println("No tool control"); return false; } if (!Settings.IMP.HISTORY.USE_DATABASE) { - player.print(Caption.of("fawe.error.setting.disable", ("history.use-database (Import with /history import )"))); + player.print(Caption.of("fawe.error.setting.disable", + "history.use-database (Import with /history import )")); System.out.println("No db"); return false; } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java index 8e0f79881..8b39d0460 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -1493,9 +1493,7 @@ public class LocalSession implements TextureHolder { private void prepareEditingExtents(EditSession editSession, Actor actor) { editSession.setFastMode(fastMode); - /* editSession.setReorderMode(reorderMode); - */ if (editSession.getSurvivalExtent() != null) { editSession.getSurvivalExtent().setStripNbt(!actor.hasPermission("worldedit.setnbt")); } @@ -1526,7 +1524,6 @@ public class LocalSession implements TextureHolder { * @return The reorder mode */ public EditSession.ReorderMode getReorderMode() { -// return reorderMode; return EditSession.ReorderMode.FAST; } @@ -1536,7 +1533,6 @@ public class LocalSession implements TextureHolder { * @param reorderMode The reorder mode */ public void setReorderMode(EditSession.ReorderMode reorderMode) { -// this.reorderMode = reorderMode; } /**