Merge remote-tracking branch 'upstream/main' into upstream
This commit is contained in:
@@ -36,10 +36,6 @@ public class BukkitPermissionAttachmentManager {
|
||||
if (p == null) {
|
||||
return;
|
||||
}
|
||||
if (p.hasMetadata("NPC") && noopAttachment != null) {
|
||||
p.removeAttachment(noopAttachment);
|
||||
return;
|
||||
}
|
||||
PermissionAttachment attach = attachments.remove(p);
|
||||
if (attach != null) {
|
||||
p.removeAttachment(attach);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.fastasyncworldedit.bukkit.util;
|
||||
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Utility class for retrieving and comparing minecraft server versions.
|
||||
@@ -44,18 +46,15 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
|
||||
|
||||
/**
|
||||
* Construct a new version with major, minor and release based on the server version.
|
||||
* @deprecated use {@link MinecraftVersion#getCurrent()} instead.
|
||||
*/
|
||||
@Deprecated(since = "2.4.10", forRemoval = true)
|
||||
public MinecraftVersion() {
|
||||
// Array consists of three version parts, eg. ['v1', '16', 'R3']
|
||||
String[] versionParts = getPackageVersion().split("_");
|
||||
MinecraftVersion current = getCurrent();
|
||||
|
||||
if (versionParts.length != 3) {
|
||||
throw new IllegalStateException("Failed to determine minecraft version!");
|
||||
}
|
||||
|
||||
this.major = Integer.parseInt(versionParts[0].substring(1));
|
||||
this.minor = Integer.parseInt(versionParts[1]);
|
||||
this.release = Integer.parseInt(versionParts[2].substring(1));
|
||||
this.major = current.getMajor();
|
||||
this.minor = current.getMinor();
|
||||
this.release = current.getRelease();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,11 +64,35 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
|
||||
*/
|
||||
public static MinecraftVersion getCurrent() {
|
||||
if (current == null) {
|
||||
return current = new MinecraftVersion();
|
||||
return current = detectMinecraftVersion();
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
private static MinecraftVersion detectMinecraftVersion() {
|
||||
int major;
|
||||
int minor;
|
||||
int release;
|
||||
if (PaperLib.isPaper()) {
|
||||
String[] parts = Bukkit.getMinecraftVersion().split(Pattern.quote("."));
|
||||
if (parts.length != 2 && parts.length != 3) {
|
||||
throw new IllegalStateException("Failed to determine minecraft version!");
|
||||
}
|
||||
major = Integer.parseInt(parts[0]);
|
||||
minor = Integer.parseInt(parts[1]);
|
||||
release = parts.length == 3 ? Integer.parseInt(parts[2]) : 0; // e.g. 1.18
|
||||
} else {
|
||||
String[] parts = getPackageVersion().split("_");
|
||||
if (parts.length != 3) {
|
||||
throw new IllegalStateException("Failed to determine minecraft version!");
|
||||
}
|
||||
major = Integer.parseInt(parts[0].substring(1));
|
||||
minor = Integer.parseInt(parts[1]);
|
||||
release = Integer.parseInt(parts[2].substring(1));
|
||||
}
|
||||
return new MinecraftVersion(major, minor, release);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the server version based on the CraftBukkit package path, e.g. {@code org.bukkit.craftbukkit.v1_16_R3},
|
||||
* where v1_16_R3 is the resolved version.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.fastasyncworldedit.bukkit.util.image;
|
||||
|
||||
import com.fastasyncworldedit.core.util.TaskManager;
|
||||
import com.fastasyncworldedit.core.util.image.Drawable;
|
||||
import com.fastasyncworldedit.core.util.image.ImageUtil;
|
||||
import com.fastasyncworldedit.core.util.image.ImageViewer;
|
||||
@@ -163,15 +164,18 @@ public class BukkitImageViewer implements ImageViewer {
|
||||
controller.showInFrames(player, frames, true);
|
||||
} else {
|
||||
int slot = getMapSlot(player);
|
||||
if (slot == -1) {
|
||||
if (initializing) {
|
||||
player.getInventory().setItemInMainHand(new ItemStack(Material.MAP));
|
||||
} else {
|
||||
return;
|
||||
TaskManager.taskManager().sync(() -> {
|
||||
if (slot == -1) {
|
||||
if (initializing) {
|
||||
player.getInventory().setItemInMainHand(new ItemStack(Material.MAP));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else if (player.getInventory().getHeldItemSlot() != slot) {
|
||||
player.getInventory().setHeldItemSlot(slot);
|
||||
}
|
||||
} else if (player.getInventory().getHeldItemSlot() != slot) {
|
||||
player.getInventory().setHeldItemSlot(slot);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
if (image == null && drawable != null) {
|
||||
image = drawable.draw();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ package com.sk89q.worldedit.bukkit;
|
||||
import com.fastasyncworldedit.core.configuration.Caption;
|
||||
import com.fastasyncworldedit.core.configuration.Settings;
|
||||
import com.fastasyncworldedit.core.util.TaskManager;
|
||||
import com.fastasyncworldedit.core.util.task.RunnableVal;
|
||||
import com.sk89q.util.StringUtil;
|
||||
import com.sk89q.wepif.VaultResolver;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
@@ -162,31 +161,29 @@ public class BukkitPlayer extends AbstractPlayerActor {
|
||||
public void giveItem(BaseItemStack itemStack) {
|
||||
final PlayerInventory inv = player.getInventory();
|
||||
ItemStack newItem = BukkitAdapter.adapt(itemStack);
|
||||
if (itemStack.getType().getId().equalsIgnoreCase(WorldEdit.getInstance().getConfiguration().wandItem)) {
|
||||
inv.remove(newItem);
|
||||
}
|
||||
final ItemStack item = player.getInventory().getItemInMainHand();
|
||||
player.getInventory().setItemInMainHand(newItem);
|
||||
HashMap<Integer, ItemStack> overflow = inv.addItem(item);
|
||||
if (!overflow.isEmpty()) {
|
||||
TaskManager.taskManager().sync(new RunnableVal<>() {
|
||||
@Override
|
||||
public void run(Object value) {
|
||||
for (Map.Entry<Integer, ItemStack> entry : overflow.entrySet()) {
|
||||
ItemStack stack = entry.getValue();
|
||||
if (stack.getType() != Material.AIR && stack.getAmount() > 0) {
|
||||
Item dropped = player.getWorld().dropItem(player.getLocation(), stack);
|
||||
PlayerDropItemEvent event = new PlayerDropItemEvent(player, dropped);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
dropped.remove();
|
||||
}
|
||||
TaskManager.taskManager().sync(() -> {
|
||||
if (itemStack.getType().getId().equalsIgnoreCase(WorldEdit.getInstance().getConfiguration().wandItem)) {
|
||||
inv.remove(newItem);
|
||||
}
|
||||
final ItemStack item = player.getInventory().getItemInMainHand();
|
||||
player.getInventory().setItemInMainHand(newItem);
|
||||
HashMap<Integer, ItemStack> overflow = inv.addItem(item);
|
||||
if (!overflow.isEmpty()) {
|
||||
for (Map.Entry<Integer, ItemStack> entry : overflow.entrySet()) {
|
||||
ItemStack stack = entry.getValue();
|
||||
if (stack.getType() != Material.AIR && stack.getAmount() > 0) {
|
||||
Item dropped = player.getWorld().dropItem(player.getLocation(), stack);
|
||||
PlayerDropItemEvent event = new PlayerDropItemEvent(player, dropped);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
dropped.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
player.updateInventory();
|
||||
}
|
||||
player.updateInventory();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
package com.sk89q.worldedit.bukkit;
|
||||
|
||||
import com.fastasyncworldedit.core.extent.inventory.SlottableBlockBag;
|
||||
import com.fastasyncworldedit.core.util.TaskManager;
|
||||
import com.sk89q.worldedit.blocks.BaseItem;
|
||||
import com.sk89q.worldedit.blocks.BaseItemStack;
|
||||
import com.sk89q.worldedit.extent.inventory.BlockBag;
|
||||
@@ -171,7 +172,10 @@ public class BukkitPlayerBlockBag extends BlockBag implements SlottableBlockBag
|
||||
@Override
|
||||
public void flushChanges() {
|
||||
if (items != null) {
|
||||
player.getInventory().setContents(items);
|
||||
TaskManager.taskManager().sync(() -> {
|
||||
player.getInventory().setContents(items);
|
||||
return null;
|
||||
});
|
||||
items = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.fastasyncworldedit.core.Fawe;
|
||||
import com.fastasyncworldedit.core.internal.exception.FaweException;
|
||||
import com.fastasyncworldedit.core.queue.IChunkGet;
|
||||
import com.fastasyncworldedit.core.queue.implementation.packet.ChunkPacket;
|
||||
import com.fastasyncworldedit.core.util.TaskManager;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
@@ -143,7 +144,7 @@ public class BukkitWorld extends AbstractWorld {
|
||||
public List<com.sk89q.worldedit.entity.Entity> getEntities(Region region) {
|
||||
World world = getWorld();
|
||||
|
||||
List<Entity> ents = world.getEntities();
|
||||
List<Entity> ents = TaskManager.taskManager().sync(world::getEntities);
|
||||
List<com.sk89q.worldedit.entity.Entity> entities = new ArrayList<>();
|
||||
for (Entity ent : ents) {
|
||||
if (region.contains(BukkitAdapter.asBlockVector(ent.getLocation()))) {
|
||||
@@ -156,7 +157,9 @@ public class BukkitWorld extends AbstractWorld {
|
||||
@Override
|
||||
public List<com.sk89q.worldedit.entity.Entity> getEntities() {
|
||||
List<com.sk89q.worldedit.entity.Entity> list = new ArrayList<>();
|
||||
for (Entity entity : getWorld().getEntities()) {
|
||||
|
||||
List<Entity> ents = TaskManager.taskManager().sync(getWorld()::getEntities);
|
||||
for (Entity entity : ents) {
|
||||
list.add(BukkitAdapter.adapt(entity));
|
||||
}
|
||||
return list;
|
||||
@@ -279,12 +282,15 @@ public class BukkitWorld extends AbstractWorld {
|
||||
return false;
|
||||
}
|
||||
|
||||
InventoryHolder chest = (InventoryHolder) state;
|
||||
Inventory inven = chest.getInventory();
|
||||
if (chest instanceof Chest) {
|
||||
inven = ((Chest) chest).getBlockInventory();
|
||||
}
|
||||
inven.clear();
|
||||
TaskManager.taskManager().sync(() -> {
|
||||
InventoryHolder chest = (InventoryHolder) state;
|
||||
Inventory inven = chest.getInventory();
|
||||
if (chest instanceof Chest) {
|
||||
inven = ((Chest) chest).getBlockInventory();
|
||||
}
|
||||
inven.clear();
|
||||
return null;
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user