Compare commits

..

1 Commits

Author SHA1 Message Date
21a94104be fix: update to changes in 1.21 class paths 2024-11-23 17:51:24 +00:00
31 changed files with 147 additions and 281 deletions

View File

@ -27,7 +27,6 @@ body:
description: Which server version are you using? If your server version is not listed, it is not supported. Update to a supported version first. description: Which server version are you using? If your server version is not listed, it is not supported. Update to a supported version first.
multiple: false multiple: false
options: options:
- '1.21.4'
- '1.21.3' - '1.21.3'
- '1.21.1' - '1.21.1'
- '1.20.6' - '1.20.6'

View File

@ -1,7 +1,7 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [ "extends": [
"config:recommended", "config:base",
":semanticCommitsDisabled" ":semanticCommitsDisabled"
], ],
"automerge": true, "automerge": true,

View File

@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Label conflicting PRs - name: Label conflicting PRs
uses: eps1lon/actions-label-merge-conflict@v3.0.3 uses: eps1lon/actions-label-merge-conflict@v3.0.2
with: with:
dirtyLabel: "unresolved-merge-conflict" dirtyLabel: "unresolved-merge-conflict"
repoToken: "${{ secrets.GITHUB_TOKEN }}" repoToken: "${{ secrets.GITHUB_TOKEN }}"

View File

@ -39,9 +39,7 @@ dependencies {
} }
compileOnly(libs.placeholderapi) compileOnly(libs.placeholderapi)
compileOnly(libs.luckperms) compileOnly(libs.luckperms)
compileOnly(libs.essentialsx) { compileOnly(libs.essentialsx)
exclude(group = "org.spigotmc")
}
compileOnly(libs.mvdwapi) { isTransitive = false } compileOnly(libs.mvdwapi) { isTransitive = false }
// Other libraries // Other libraries
@ -103,7 +101,7 @@ tasks {
withType<Javadoc> { withType<Javadoc> {
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString() val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
val opt = options as StandardJavadocDocletOptions val opt = options as StandardJavadocDocletOptions
opt.links("https://jd.papermc.io/paper/1.20.4/") opt.links("https://jd.papermc.io/paper/1.20/")
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString()) opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/") opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
opt.links("https://jd.advntr.dev/api/" + libs.adventureApi.get().versionConstraint.toString()) opt.links("https://jd.advntr.dev/api/" + libs.adventureApi.get().versionConstraint.toString())

View File

@ -789,23 +789,22 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.getMetadata("ps_custom_spawned").stream().anyMatch(MetadataValue::asBoolean)) { if (entity.getMetadata("ps_custom_spawned").stream().anyMatch(MetadataValue::asBoolean)) {
continue; continue;
} }
// TODO: use (type) pattern matching when targeting java 21
switch (entity.getType().toString()) { switch (entity.getType().toString()) {
case "EGG": case "EGG":
case "FISHING_HOOK", "FISHING_BOBBER": case "FISHING_HOOK":
case "ENDER_SIGNAL", "EYE_OF_ENDER": case "ENDER_SIGNAL":
case "AREA_EFFECT_CLOUD": case "AREA_EFFECT_CLOUD":
case "EXPERIENCE_ORB": case "EXPERIENCE_ORB":
case "LEASH_HITCH", "LEASH_KNOT": case "LEASH_HITCH":
case "FIREWORK", "FIREWORK_ROCKET": case "FIREWORK":
case "LIGHTNING", "LIGHTNING_BOLT": case "LIGHTNING":
case "WITHER_SKULL": case "WITHER_SKULL":
case "UNKNOWN": case "UNKNOWN":
case "PLAYER": case "PLAYER":
// non moving / unmovable // non moving / unmovable
continue; continue;
case "THROWN_EXP_BOTTLE", "EXPERIENCE_BOTTLE": case "THROWN_EXP_BOTTLE":
case "SPLASH_POTION", "POTION": case "SPLASH_POTION":
case "SNOWBALL": case "SNOWBALL":
case "SHULKER_BULLET": case "SHULKER_BULLET":
case "SPECTRAL_ARROW": case "SPECTRAL_ARROW":
@ -837,11 +836,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
case "TNT_MINECART": case "TNT_MINECART":
case "CHEST_BOAT": case "CHEST_BOAT":
case "BOAT": case "BOAT":
case "ACACIA_BOAT", "BIRCH_BOAT", "CHERRY_BOAT", "DARK_OAK_BOAT", "JUNGLE_BOAT", "MANGROVE_BOAT",
"OAK_BOAT", "PALE_OAK_BOAT", "SPRUCE_BOAT", "BAMBOO_RAFT":
case "ACACIA_CHEST_BOAT", "BIRCH_CHEST_BOAT", "CHERRY_CHEST_BOAT", "DARK_OAK_CHEST_BOAT",
"JUNGLE_CHEST_BOAT", "MANGROVE_CHEST_BOAT", "OAK_CHEST_BOAT", "PALE_OAK_CHEST_BOAT",
"SPRUCE_CHEST_BOAT", "BAMBOO_CHEST_RAFT":
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) { if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation()); com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation());
Plot plot = location.getPlot(); Plot plot = location.getPlot();
@ -870,14 +864,14 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
case "SMALL_FIREBALL": case "SMALL_FIREBALL":
case "FIREBALL": case "FIREBALL":
case "DRAGON_FIREBALL": case "DRAGON_FIREBALL":
case "DROPPED_ITEM", "ITEM": case "DROPPED_ITEM":
if (Settings.Enabled_Components.KILL_ROAD_ITEMS if (Settings.Enabled_Components.KILL_ROAD_ITEMS
&& plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) { && plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) {
this.removeRoadEntity(entity, iterator); this.removeRoadEntity(entity, iterator);
} }
// dropped item // dropped item
continue; continue;
case "PRIMED_TNT", "TNT": case "PRIMED_TNT":
case "FALLING_BLOCK": case "FALLING_BLOCK":
// managed elsewhere // managed elsewhere
continue; continue;
@ -955,7 +949,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
case "HORSE": case "HORSE":
case "IRON_GOLEM": case "IRON_GOLEM":
case "MAGMA_CUBE": case "MAGMA_CUBE":
case "MUSHROOM_COW", "MOOSHROOM": case "MUSHROOM_COW":
case "OCELOT": case "OCELOT":
case "PIG": case "PIG":
case "PIG_ZOMBIE": case "PIG_ZOMBIE":
@ -964,7 +958,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
case "SILVERFISH": case "SILVERFISH":
case "SKELETON": case "SKELETON":
case "SLIME": case "SLIME":
case "SNOWMAN", "SNOW_GOLEM": case "SNOWMAN":
case "SPIDER": case "SPIDER":
case "SQUID": case "SQUID":
case "VILLAGER": case "VILLAGER":

View File

@ -25,6 +25,7 @@ import org.bukkit.Art;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Rotation; import org.bukkit.Rotation;
import org.bukkit.TreeSpecies;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.entity.AbstractHorse; import org.bukkit.entity.AbstractHorse;
@ -33,7 +34,6 @@ import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Bat; import org.bukkit.entity.Bat;
import org.bukkit.entity.Boat; import org.bukkit.entity.Boat;
import org.bukkit.entity.Breedable; import org.bukkit.entity.Breedable;
import org.bukkit.entity.ChestBoat;
import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.ChestedHorse;
import org.bukkit.entity.EnderDragon; import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -44,6 +44,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Painting; import org.bukkit.entity.Painting;
import org.bukkit.entity.Rabbit; import org.bukkit.entity.Rabbit;
import org.bukkit.entity.Sheep; import org.bukkit.entity.Sheep;
import org.bukkit.entity.Slime;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
@ -102,19 +103,11 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.noGravity = true; this.noGravity = true;
} }
switch (entity.getType().toString()) { switch (entity.getType().toString()) {
case "BOAT", "ACACIA_BOAT", "BIRCH_BOAT", "CHERRY_BOAT", "DARK_OAK_BOAT", "JUNGLE_BOAT", "MANGROVE_BOAT", case "BOAT" -> {
"OAK_BOAT", "PALE_OAK_BOAT", "SPRUCE_BOAT", "BAMBOO_RAFT" -> {
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
this.dataByte = getOrdinal(Boat.Type.values(), boat.getBoatType()); this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
return; return;
} }
case "ACACIA_CHEST_BOAT", "BIRCH_CHEST_BOAT", "CHERRY_CHEST_BOAT", "DARK_OAK_CHEST_BOAT",
"JUNGLE_CHEST_BOAT", "MANGROVE_CHEST_BOAT", "OAK_CHEST_BOAT", "PALE_OAK_CHEST_BOAT",
"SPRUCE_CHEST_BOAT", "BAMBOO_CHEST_RAFT" -> {
ChestBoat boat = (ChestBoat) entity;
this.dataByte = getOrdinal(Boat.Type.values(), boat.getBoatType());
storeInventory(boat);
}
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL", case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER",
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
@ -124,7 +117,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
return; return;
} }
// MISC // // MISC //
case "DROPPED_ITEM", "ITEM" -> { case "DROPPED_ITEM" -> {
Item item = (Item) entity; Item item = (Item) entity;
this.stack = item.getItemStack(); this.stack = item.getItemStack();
return; return;
@ -154,14 +147,14 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
// END MISC // // END MISC //
// INVENTORY HOLDER // // INVENTORY HOLDER //
case "MINECART_CHEST", "CHEST_MINECART", "MINECART_HOPPER", "HOPPER_MINECART" -> { case "MINECART_CHEST", "MINECART_HOPPER" -> {
storeInventory((InventoryHolder) entity); storeInventory((InventoryHolder) entity);
return; return;
} }
// START LIVING ENTITY // // START LIVING ENTITY //
// START AGEABLE // // START AGEABLE //
// START TAMEABLE // // START TAMEABLE //
case "CAMEL", "HORSE", "DONKEY", "LLAMA", "TRADER_LLAMA", "MULE", "SKELETON_HORSE", "ZOMBIE_HORSE" -> { case "HORSE", "DONKEY", "LLAMA", "MULE", "SKELETON_HORSE" -> {
AbstractHorse horse = (AbstractHorse) entity; AbstractHorse horse = (AbstractHorse) entity;
this.horse = new HorseStats(); this.horse = new HorseStats();
this.horse.jump = horse.getJumpStrength(); this.horse.jump = horse.getJumpStrength();
@ -179,13 +172,14 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
return; return;
} }
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case "WOLF", "OCELOT", "CAT", "PARROT" -> { case "WOLF", "OCELOT" -> {
storeTameable((Tameable) entity); storeTameable((Tameable) entity);
storeBreedable((Breedable) entity); storeBreedable((Breedable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
} }
// END TAMEABLE // // END TAMEABLE //
//todo fix sheep
case "SHEEP" -> { case "SHEEP" -> {
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
if (sheep.isSheared()) { if (sheep.isSheared()) {
@ -193,7 +187,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} else { } else {
this.dataByte = (byte) 0; this.dataByte = (byte) 0;
} }
this.dataByte2 = getOrdinal(DyeColor.values(), sheep.getColor()); this.dataByte2 = sheep.getColor().getDyeData();
storeBreedable(sheep); storeBreedable(sheep);
storeLiving(sheep); storeLiving(sheep);
return; return;
@ -274,7 +268,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH",
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN", "SNOW_GOLEM" -> { "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN" -> {
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
} }
@ -456,7 +450,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
Entity entity; Entity entity;
switch (this.getType().toString()) { switch (this.getType().toString()) {
case "DROPPED_ITEM", "ITEM" -> { case "DROPPED_ITEM" -> {
return world.dropItem(location, this.stack); return world.dropItem(location, this.stack);
} }
case "PLAYER", "LEASH_HITCH" -> { case "PLAYER", "LEASH_HITCH" -> {
@ -492,25 +486,15 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
entity.setGravity(false); entity.setGravity(false);
} }
switch (entity.getType().toString()) { switch (entity.getType().toString()) {
case "BOAT", "ACACIA_BOAT", "BIRCH_BOAT", "CHERRY_BOAT", "DARK_OAK_BOAT", "JUNGLE_BOAT", "MANGROVE_BOAT", case "BOAT" -> {
"OAK_BOAT", "PALE_OAK_BOAT", "SPRUCE_BOAT", "BAMBOO_RAFT" -> {
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
boat.setBoatType(Boat.Type.values()[dataByte]); boat.setWoodType(TreeSpecies.values()[dataByte]);
return entity; return entity;
} }
case "ACACIA_CHEST_BOAT", "BIRCH_CHEST_BOAT", "CHERRY_CHEST_BOAT", "DARK_OAK_CHEST_BOAT", case "SLIME" -> {
"JUNGLE_CHEST_BOAT", "MANGROVE_CHEST_BOAT", "OAK_CHEST_BOAT", "PALE_OAK_CHEST_BOAT",
"SPRUCE_CHEST_BOAT", "BAMBOO_CHEST_RAFT" -> {
ChestBoat boat = (ChestBoat) entity;
boat.setBoatType(Boat.Type.values()[dataByte]);
restoreInventory(boat);
return entity;
}
// SLIME is not even stored
/* case "SLIME" -> {
((Slime) entity).setSize(this.dataByte); ((Slime) entity).setSize(this.dataByte);
return entity; return entity;
} */ }
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK", case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND",
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL", "MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
@ -534,14 +518,14 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
// END MISC // // END MISC //
// INVENTORY HOLDER // // INVENTORY HOLDER //
case "MINECART_CHEST", "CHEST_MINECART", "MINECART_HOPPER", "HOPPER_MINECART" -> { case "MINECART_CHEST", "MINECART_HOPPER" -> {
restoreInventory((InventoryHolder) entity); restoreInventory((InventoryHolder) entity);
return entity; return entity;
} }
// START LIVING ENTITY // // START LIVING ENTITY //
// START AGEABLE // // START AGEABLE //
// START TAMEABLE // // START TAMEABLE //
case "CAMEL", "HORSE", "DONKEY", "LLAMA", "TRADER_LLAMA", "MULE", "SKELETON_HORSE", "ZOMBIE_HORSE" -> { case "HORSE", "LLAMA", "SKELETON_HORSE", "DONKEY", "MULE" -> {
AbstractHorse horse = (AbstractHorse) entity; AbstractHorse horse = (AbstractHorse) entity;
horse.setJumpStrength(this.horse.jump); horse.setJumpStrength(this.horse.jump);
if (horse instanceof ChestedHorse) { if (horse instanceof ChestedHorse) {
@ -558,7 +542,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
return entity; return entity;
} }
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case "WOLF", "OCELOT", "CAT", "PARROT" -> { case "WOLF", "OCELOT" -> {
restoreTameable((Tameable) entity); restoreTameable((Tameable) entity);
restoreBreedable((Breedable) entity); restoreBreedable((Breedable) entity);
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
@ -571,7 +555,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
sheep.setSheared(true); sheep.setSheared(true);
} }
if (this.dataByte2 != 0) { if (this.dataByte2 != 0) {
sheep.setColor(DyeColor.values()[this.dataByte2]); sheep.setColor(DyeColor.getByDyeData(this.dataByte2));
} }
restoreBreedable(sheep); restoreBreedable(sheep);
restoreLiving(sheep); restoreLiving(sheep);

View File

@ -134,7 +134,7 @@ public class BlockEventListener117 implements Listener {
public void onBlockFertilize(BlockFertilizeEvent event) { public void onBlockFertilize(BlockFertilizeEvent event) {
Block block = event.getBlock(); Block block = event.getBlock();
List<org.bukkit.block.BlockState> blocks = event.getBlocks(); List<org.bukkit.block.BlockState> blocks = event.getBlocks();
Location location = BukkitUtil.adapt(block.getLocation()); Location location = BukkitUtil.adapt(blocks.get(0).getLocation());
PlotArea area = location.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {

View File

@ -42,7 +42,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.PlotFlagUtil; import com.plotsquared.core.util.PlotFlagUtil;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.util.Enums;
import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockType;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import org.bukkit.Material; import org.bukkit.Material;
@ -58,7 +57,6 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -80,17 +78,10 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class EntityEventListener implements Listener { public class EntityEventListener implements Listener {
private static final Particle EXPLOSION_HUGE = Objects.requireNonNull(Enums.findByValue(
Particle.class,
"EXPLOSION_EMITTER",
"EXPLOSION_HUGE"
));
private final BukkitPlatform platform; private final BukkitPlatform platform;
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;
@ -323,7 +314,7 @@ public class EntityEventListener implements Listener {
if (this.lastRadius != 0) { if (this.lastRadius != 0) {
List<Entity> nearby = event.getEntity().getNearbyEntities(this.lastRadius, this.lastRadius, this.lastRadius); List<Entity> nearby = event.getEntity().getNearbyEntities(this.lastRadius, this.lastRadius, this.lastRadius);
for (Entity near : nearby) { for (Entity near : nearby) {
if (near instanceof TNTPrimed || near instanceof ExplosiveMinecart) { if (near instanceof TNTPrimed || near.getType().equals(EntityType.MINECART_TNT)) {
if (!near.hasMetadata("plot")) { if (!near.hasMetadata("plot")) {
near.setMetadata("plot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot)); near.setMetadata("plot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot));
} }
@ -347,7 +338,7 @@ public class EntityEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
//Spawn Explosion Particles when enabled in settings //Spawn Explosion Particles when enabled in settings
if (Settings.General.ALWAYS_SHOW_EXPLOSIONS) { if (Settings.General.ALWAYS_SHOW_EXPLOSIONS) {
event.getLocation().getWorld().spawnParticle(EXPLOSION_HUGE, event.getLocation(), 0); event.getLocation().getWorld().spawnParticle(Particle.EXPLOSION_HUGE, event.getLocation(), 0);
} }
} }

View File

@ -31,10 +31,8 @@ import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -134,7 +132,7 @@ public class EntitySpawnListener implements Listener {
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
EntityType type = entity.getType(); EntityType type = entity.getType();
if (plot == null) { if (plot == null) {
if (entity instanceof Item) { if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true); event.setCancelled(true);
} }
@ -156,7 +154,7 @@ public class EntitySpawnListener implements Listener {
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
event.setCancelled(true); event.setCancelled(true);
} }
if (entity instanceof EnderCrystal || type == EntityType.ARMOR_STAND) { if (type == EntityType.ENDER_CRYSTAL || type == EntityType.ARMOR_STAND) {
if (BukkitEntityUtil.checkEntity(entity, plot)) { if (BukkitEntityUtil.checkEntity(entity, plot)) {
event.setCancelled(true); event.setCancelled(true);
} }

View File

@ -47,12 +47,10 @@ import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
import com.plotsquared.core.plot.flag.types.BooleanFlag; import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.PlotFlagUtil; import com.plotsquared.core.util.PlotFlagUtil;
import io.papermc.paper.event.entity.EntityMoveEvent;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.TileState; import org.bukkit.block.TileState;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -60,7 +58,6 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.entity.Slime; import org.bukkit.entity.Slime;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -81,9 +78,6 @@ import java.util.regex.Pattern;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class PaperListener implements Listener { public class PaperListener implements Listener {
private static final NamespacedKey ITEM = NamespacedKey.minecraft("item");
private static final NamespacedKey FISHING_BOBBER = NamespacedKey.minecraft("fishing_bobber");
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private Chunk lastChunk; private Chunk lastChunk;
@ -110,38 +104,8 @@ public class PaperListener implements Listener {
if (!Settings.Paper_Components.ENTITY_PATHING) { if (!Settings.Paper_Components.ENTITY_PATHING) {
return; return;
} }
handleEntityMovement(event, event.getEntity().getLocation(), event.getLoc()); Location toLoc = BukkitUtil.adapt(event.getLoc());
} Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation());
@EventHandler
public void onEntityPathfind(SlimePathfindEvent event) {
if (!Settings.Paper_Components.ENTITY_PATHING) {
return;
}
Slime slime = event.getEntity();
Block b = slime.getTargetBlockExact(4);
if (b == null) {
return;
}
handleEntityMovement(event, event.getEntity().getLocation(), b.getLocation());
}
@EventHandler
public void onEntityMove(EntityMoveEvent event) {
if (!Settings.Paper_Components.ENTITY_MOVEMENT) {
return;
}
if (!event.hasExplicitlyChangedBlock()) {
return;
}
handleEntityMovement(event, event.getFrom(), event.getTo());
}
private static void handleEntityMovement(Cancellable event, org.bukkit.Location from, org.bukkit.Location target) {
Location toLoc = BukkitUtil.adapt(target);
Location fromLoc = BukkitUtil.adapt(from);
PlotArea tarea = toLoc.getPlotArea(); PlotArea tarea = toLoc.getPlotArea();
if (tarea == null) { if (tarea == null) {
return; return;
@ -160,10 +124,52 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (tplot == null || tplot.getId().equals(fplot.getId())) { if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) {
return; return;
} }
if (fplot.isMerged() && fplot.getConnectedPlots().contains(tplot)) { if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) {
return;
}
event.setCancelled(true);
}
@EventHandler
public void onEntityPathfind(SlimePathfindEvent event) {
if (!Settings.Paper_Components.ENTITY_PATHING) {
return;
}
Slime slime = event.getEntity();
Block b = slime.getTargetBlockExact(4);
if (b == null) {
return;
}
Location toLoc = BukkitUtil.adapt(b.getLocation());
Location fromLoc = BukkitUtil.adapt(event.getEntity().getLocation());
PlotArea tarea = toLoc.getPlotArea();
if (tarea == null) {
return;
}
PlotArea farea = fromLoc.getPlotArea();
if (farea == null) {
return;
}
if (tarea != farea) {
event.setCancelled(true);
return;
}
Plot tplot = toLoc.getPlot();
Plot fplot = fromLoc.getPlot();
if (tplot == null ^ fplot == null) {
event.setCancelled(true);
return;
}
if (tplot == null || tplot.getId().hashCode() == fplot.getId().hashCode()) {
return;
}
if (fplot.isMerged() && fplot.getConnectedPlots().contains(fplot)) {
return; return;
} }
event.setCancelled(true); event.setCancelled(true);
@ -232,7 +238,7 @@ public class PaperListener implements Listener {
if (plot == null) { if (plot == null) {
EntityType type = event.getType(); EntityType type = event.getType();
// PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency // PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency
if (type.getKey().equals(ITEM)) { if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true); event.setCancelled(true);
} }
@ -358,7 +364,7 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!plot.isAdded(pp.getUUID())) { } else if (!plot.isAdded(pp.getUUID())) {
if (entity.getType().getKey().equals(FISHING_BOBBER)) { if (entity.getType().equals(EntityType.FISHING_HOOK)) {
if (plot.getFlag(FishingFlag.class)) { if (plot.getFlag(FishingFlag.class)) {
return; return;
} }

View File

@ -376,7 +376,7 @@ public class PlayerEventListener implements Listener {
@EventHandler @EventHandler
public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) { public void onVehicleEntityCollision(VehicleEntityCollisionEvent e) {
if (e.getVehicle() instanceof Boat) { if (e.getVehicle().getType() == EntityType.BOAT) {
Location location = BukkitUtil.adapt(e.getEntity().getLocation()); Location location = BukkitUtil.adapt(e.getEntity().getLocation());
if (location.isPlotArea()) { if (location.isPlotArea()) {
if (e.getEntity() instanceof Player) { if (e.getEntity() instanceof Player) {

View File

@ -35,7 +35,7 @@ import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.FishHook; import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
@ -134,7 +134,7 @@ public class ProjectileEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!plot.isAdded(pp.getUUID())) { } else if (!plot.isAdded(pp.getUUID())) {
if (entity instanceof FishHook) { if (entity.getType().equals(EntityType.FISHING_HOOK)) {
if (plot.getFlag(FishingFlag.class)) { if (plot.getFlag(FishingFlag.class)) {
return; return;
} }
@ -194,7 +194,7 @@ public class ProjectileEventListener implements Listener {
return; return;
} }
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag( if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
ProjectilesFlag.class) || (entity instanceof FishHook && plot.getFlag( ProjectilesFlag.class) || (entity.getType().equals(EntityType.FISHING_HOOK) && plot.getFlag(
FishingFlag.class))) { FishingFlag.class))) {
return; return;
} }

View File

@ -30,8 +30,6 @@ import com.plotsquared.core.util.task.TaskTime;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@ -43,8 +41,6 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -59,8 +55,6 @@ import java.util.function.Consumer;
**/ **/
public final class BukkitChunkCoordinator extends ChunkCoordinator { public final class BukkitChunkCoordinator extends ChunkCoordinator {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitChunkCoordinator.class.getSimpleName());
private final List<ProgressSubscriber> progressSubscribers = new LinkedList<>(); private final List<ProgressSubscriber> progressSubscribers = new LinkedList<>();
private final Queue<BlockVector2> requestedChunks; private final Queue<BlockVector2> requestedChunks;
@ -76,7 +70,6 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
private final AtomicInteger expectedSize; private final AtomicInteger expectedSize;
private final AtomicInteger loadingChunks = new AtomicInteger(); private final AtomicInteger loadingChunks = new AtomicInteger();
private final boolean forceSync; private final boolean forceSync;
private final boolean shouldGen;
private int batchSize; private int batchSize;
private PlotSquaredTask task; private PlotSquaredTask task;
@ -94,8 +87,7 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
@Assisted final @NonNull Consumer<Throwable> throwableConsumer, @Assisted final @NonNull Consumer<Throwable> throwableConsumer,
@Assisted("unloadAfter") final boolean unloadAfter, @Assisted("unloadAfter") final boolean unloadAfter,
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers, @Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers,
@Assisted("forceSync") final boolean forceSync, @Assisted("forceSync") final boolean forceSync
@Assisted("shouldGen") final boolean shouldGen
) { ) {
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks); this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
this.availableChunks = new LinkedBlockingQueue<>(); this.availableChunks = new LinkedBlockingQueue<>();
@ -111,7 +103,6 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
this.bukkitWorld = Bukkit.getWorld(world.getName()); this.bukkitWorld = Bukkit.getWorld(world.getName());
this.progressSubscribers.addAll(progressSubscribers); this.progressSubscribers.addAll(progressSubscribers);
this.forceSync = forceSync; this.forceSync = forceSync;
this.shouldGen = shouldGen;
} }
@Override @Override
@ -221,28 +212,18 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
* Requests a batch of chunks to be loaded * Requests a batch of chunks to be loaded
*/ */
private void requestBatch() { private void requestBatch() {
for (int i = 0; i < this.batchSize && this.requestedChunks.peek() != null; i++) { BlockVector2 chunk;
for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) {
// This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent // This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent
final BlockVector2 chunk = this.requestedChunks.poll();
loadingChunks.incrementAndGet(); loadingChunks.incrementAndGet();
PaperLib PaperLib
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), shouldGen, true) .getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true)
.orTimeout(10L, TimeUnit.SECONDS)
.whenComplete((chunkObject, throwable) -> { .whenComplete((chunkObject, throwable) -> {
loadingChunks.decrementAndGet(); loadingChunks.decrementAndGet();
if (throwable != null) { if (throwable != null) {
if (throwable instanceof TimeoutException) { throwable.printStackTrace();
LOGGER.warn("Timed out awaiting chunk load {}", chunk);
this.requestedChunks.offer(chunk);
} else {
LOGGER.error("Failed to load chunk {}", chunk, throwable);
// We want one less because this couldn't be processed // We want one less because this couldn't be processed
this.expectedSize.decrementAndGet(); this.expectedSize.decrementAndGet();
}
} else if (chunkObject == null) {
if (shouldGen) {
LOGGER.error("Null chunk returned for chunk at {}", chunk);
}
} else if (PlotSquared.get().isMainThread(Thread.currentThread())) { } else if (PlotSquared.get().isMainThread(Thread.currentThread())) {
this.processChunk(chunkObject); this.processChunk(chunkObject);
} else { } else {

View File

@ -62,28 +62,19 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET; private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET;
static { static {
NO_SIDE_EFFECT_SET = enableNetworkIfNeeded() NO_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
.with(SideEffect.LIGHTING, SideEffect.State.OFF) SideEffect.NEIGHBORS,
.with(SideEffect.NEIGHBORS, SideEffect.State.OFF); SideEffect.State.OFF
EDGE_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET );
.with(SideEffect.UPDATE, SideEffect.State.ON) EDGE_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
.with(SideEffect.NEIGHBORS, SideEffect.State.ON); SideEffect.NEIGHBORS,
LIGHTING_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET SideEffect.State.ON
.with(SideEffect.NEIGHBORS, SideEffect.State.OFF); );
EDGE_LIGHTING_SIDE_EFFECT_SET = NO_SIDE_EFFECT_SET LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
.with(SideEffect.UPDATE, SideEffect.State.ON) EDGE_LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
.with(SideEffect.NEIGHBORS, SideEffect.State.ON); SideEffect.NEIGHBORS,
} SideEffect.State.ON
);
// make sure block changes are sent
private static SideEffectSet enableNetworkIfNeeded() {
SideEffect network;
try {
network = SideEffect.valueOf("NETWORK");
} catch (IllegalArgumentException ignored) {
return SideEffectSet.none();
}
return SideEffectSet.none().with(network, SideEffect.State.ON);
} }
private org.bukkit.World bukkitWorld; private org.bukkit.World bukkitWorld;
@ -238,7 +229,6 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
.unloadAfter(isUnloadAfter()) .unloadAfter(isUnloadAfter())
.withProgressSubscribers(getProgressSubscribers()) .withProgressSubscribers(getProgressSubscribers())
.forceSync(isForceSync()) .forceSync(isForceSync())
.shouldGen(isShouldGen())
.build(); .build();
return super.enqueue(); return super.enqueue();
} }

View File

@ -49,7 +49,6 @@ import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creature; import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
@ -342,7 +341,8 @@ public class BukkitEntityUtil {
} }
//disable the firework damage. too much of a headache to support at the moment. //disable the firework damage. too much of a headache to support at the moment.
if (vplot != null) { if (vplot != null) {
if (EntityDamageEvent.DamageCause.ENTITY_EXPLOSION == cause && damager instanceof Firework) { if (EntityDamageEvent.DamageCause.ENTITY_EXPLOSION == cause
&& damager.getType() == EntityType.FIREWORK) {
return false; return false;
} }
} }

View File

@ -262,11 +262,6 @@ public class BukkitUtil extends WorldUtil {
}); });
} }
@Override
public boolean isSmallBlock(Location location) {
return adapt(location).getBlock().getBoundingBox().getHeight() < 0.25;
}
@Override @Override
@NonNegative @NonNegative
public int getHighestBlockSynchronous(final @NonNull String world, final int x, final int z) { public int getHighestBlockSynchronous(final @NonNull String world, final int x, final int z) {

View File

@ -56,13 +56,9 @@ public class Music extends SubCommand {
.asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp", .asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp",
"music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal", "music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal",
"music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside", "music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside",
"music_disc_pigstep", "music_disc_5", "music_disc_relic", "music_disc_creator", "music_disc_pigstep", "music_disc_5", "music_disc_relic"
"music_disc_creator_music_box", "music_disc_precipice"
); );
// make sure all discs and the bedrock ("cancel") fit into the inventory
private static final int INVENTORY_ROWS = (int) Math.ceil((DISCS.size() + 1) / 9.0);
private final InventoryUtil inventoryUtil; private final InventoryUtil inventoryUtil;
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;
@ -97,7 +93,7 @@ public class Music extends SubCommand {
PlotInventory inv = new PlotInventory( PlotInventory inv = new PlotInventory(
this.inventoryUtil, this.inventoryUtil,
player, player,
INVENTORY_ROWS, 2,
TranslatableCaption.of("plotjukebox.jukebox_header").getComponent(player) TranslatableCaption.of("plotjukebox.jukebox_header").getComponent(player)
) { ) {
@Override @Override

View File

@ -117,8 +117,8 @@ public class Remove extends SubCommand {
} }
if (count == 0) { if (count == 0) {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("member.player_not_removed"), TranslatableCaption.of("errors.invalid_player"),
TagResolver.resolver("player", Tag.inserting(Component.text(args[0]))) TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
); );
} else { } else {
player.sendMessage( player.sendMessage(

View File

@ -26,7 +26,6 @@ import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.File;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@ -373,7 +372,6 @@ public class Config {
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE}) @Target({ElementType.FIELD, ElementType.TYPE})
@Documented
public @interface Comment { public @interface Comment {
String[] value(); String[] value();

View File

@ -582,8 +582,6 @@ public class Settings extends Config {
public static boolean PER_WORLD_VISIT = false; public static boolean PER_WORLD_VISIT = false;
@Comment("Search merged plots for having multiple owners when using the visit command") @Comment("Search merged plots for having multiple owners when using the visit command")
public static boolean VISIT_MERGED_OWNERS = true; public static boolean VISIT_MERGED_OWNERS = true;
@Comment("Allows to teleport based on block size instead to spawn on the highest block at the home command")
public static boolean SIZED_BASED = true;
} }
@ -653,8 +651,6 @@ public class Settings extends Config {
public static boolean PAPER_LISTENERS = true; public static boolean PAPER_LISTENERS = true;
@Comment("Prevent entities from leaving plots") @Comment("Prevent entities from leaving plots")
public static boolean ENTITY_PATHING = true; public static boolean ENTITY_PATHING = true;
@Comment("Prevent entities from leaving plots, even by pushing or pulling")
public static boolean ENTITY_MOVEMENT = false;
@Comment( @Comment(
"Cancel entity spawns when the chunk is loaded if the PlotArea's mob spawning is off") "Cancel entity spawns when the chunk is loaded if the PlotArea's mob spawning is off")
public static boolean CANCEL_CHUNK_SPAWN = true; public static boolean CANCEL_CHUNK_SPAWN = true;

View File

@ -432,7 +432,6 @@ public class HybridUtils {
if (!UPDATE) { if (!UPDATE) {
Iterator<BlockVector2> iter = chunks.iterator(); Iterator<BlockVector2> iter = chunks.iterator();
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName())); QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
queue.setShouldGen(false);
while (iter.hasNext()) { while (iter.hasNext()) {
BlockVector2 chunk = iter.next(); BlockVector2 chunk = iter.next();
iter.remove(); iter.remove();
@ -475,7 +474,6 @@ public class HybridUtils {
Iterator<BlockVector2> iterator = chunks.iterator(); Iterator<BlockVector2> iterator = chunks.iterator();
if (chunks.size() >= 32) { if (chunks.size() >= 32) {
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName())); QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
queue.setShouldGen(false);
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
final BlockVector2 chunk = iterator.next(); final BlockVector2 chunk = iterator.next();
iterator.remove(); iterator.remove();
@ -489,7 +487,6 @@ public class HybridUtils {
return null; return null;
} }
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName())); QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
queue.setShouldGen(false);
while (!chunks.isEmpty()) { while (!chunks.isEmpty()) {
final BlockVector2 chunk = iterator.next(); final BlockVector2 chunk = iterator.next();
iterator.remove(); iterator.remove();
@ -505,6 +502,7 @@ public class HybridUtils {
return; return;
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
Iterator<BlockVector2> iterator = HybridUtils.regions.iterator(); Iterator<BlockVector2> iterator = HybridUtils.regions.iterator();
BlockVector2 loc = iterator.next(); BlockVector2 loc = iterator.next();
iterator.remove(); iterator.remove();
@ -512,8 +510,7 @@ public class HybridUtils {
"Error! Could not update '{}/region/r.{}.{}.mca' (Corrupt chunk?)", "Error! Could not update '{}/region/r.{}.{}.mca' (Corrupt chunk?)",
area.getWorldHash(), area.getWorldHash(),
loc.getX(), loc.getX(),
loc.getZ(), loc.getZ()
e
); );
} }
TaskManager.runTaskLater(task, TaskTime.seconds(1L)); TaskManager.runTaskLater(task, TaskTime.seconds(1L));
@ -561,7 +558,7 @@ public class HybridUtils {
try { try {
plotworld.setupSchematics(); plotworld.setupSchematics();
} catch (SchematicHandler.UnsupportedFormatException e) { } catch (SchematicHandler.UnsupportedFormatException e) {
LOGGER.error(e); e.printStackTrace();
} }
}); });
}); });

View File

@ -40,8 +40,7 @@ public interface ChunkCoordinatorFactory {
final @NonNull Consumer<Throwable> throwableConsumer, final @NonNull Consumer<Throwable> throwableConsumer,
@Assisted("unloadAfter") final boolean unloadAfter, @Assisted("unloadAfter") final boolean unloadAfter,
final @NonNull Collection<ProgressSubscriber> progressSubscribers, final @NonNull Collection<ProgressSubscriber> progressSubscribers,
@Assisted("forceSync") final boolean forceSync, @Assisted("forceSync") final boolean forceSync
@Assisted("shouldGen") final boolean shouldGen
); );
} }

View File

@ -1407,9 +1407,6 @@ public class Plot {
); );
} }
Location location = toHomeLocation(bottom, home); Location location = toHomeLocation(bottom, home);
if (Settings.Teleport.SIZED_BASED && this.worldUtil.isSmallBlock(location) && this.worldUtil.isSmallBlock(location.add(0,1,0))) {
return location;
}
if (!this.worldUtil.getBlockSynchronous(location).getBlockType().getMaterial().isAir()) { if (!this.worldUtil.getBlockSynchronous(location).getBlockType().getMaterial().isAir()) {
location = location.withY( location = location.withY(
Math.max(1 + this.worldUtil.getHighestBlockSynchronous( Math.max(1 + this.worldUtil.getHighestBlockSynchronous(
@ -1443,11 +1440,7 @@ public class Plot {
} }
Location bottom = this.getBottomAbs(); Location bottom = this.getBottomAbs();
Location location = toHomeLocation(bottom, home); Location location = toHomeLocation(bottom, home);
if (Settings.Teleport.SIZED_BASED && this.worldUtil.isSmallBlock(location) && this.worldUtil.isSmallBlock(location.add(0,1,0))) {
result.accept(location);
} else {
this.worldUtil.getBlock(location, block -> { this.worldUtil.getBlock(location, block -> {
if (!block.getBlockType().getMaterial().isAir()) { if (!block.getBlockType().getMaterial().isAir()) {
this.worldUtil.getHighestBlock(this.getWorldName(), location.getX(), location.getZ(), this.worldUtil.getHighestBlock(this.getWorldName(), location.getX(), location.getZ(),
y -> result.accept(location.withY(Math.max(1 + y, bottom.getY()))) y -> result.accept(location.withY(Math.max(1 + y, bottom.getY())))
@ -1457,8 +1450,6 @@ public class Plot {
} }
}); });
} }
}
} }
private Location toHomeLocation(Location bottom, BlockLoc relativeHome) { private Location toHomeLocation(Location bottom, BlockLoc relativeHome) {

View File

@ -52,7 +52,6 @@ public class ChunkCoordinatorBuilder {
private int initialBatchSize = Settings.QUEUE.INITIAL_BATCH_SIZE; private int initialBatchSize = Settings.QUEUE.INITIAL_BATCH_SIZE;
private boolean unloadAfter = true; private boolean unloadAfter = true;
private boolean forceSync = false; private boolean forceSync = false;
private boolean shouldGen = true;
@Inject @Inject
public ChunkCoordinatorBuilder(@NonNull ChunkCoordinatorFactory chunkCoordinatorFactory) { public ChunkCoordinatorBuilder(@NonNull ChunkCoordinatorFactory chunkCoordinatorFactory) {
@ -204,19 +203,6 @@ public class ChunkCoordinatorBuilder {
return this; return this;
} }
/**
* Set whether chunks should be generated as part of this operation. Default is true. Disabling this may not be supported
* depending on server implementation. (i.e. setting to false may not actually disable generation as part of this operation
* - this is just a catch-all in case of future differing server implementations; the option will work on Spigot/Paper).
*
* @param shouldGen should generate new chunks or not
* @since 7.5.0
*/
public @NonNull ChunkCoordinatorBuilder shouldGen(final boolean shouldGen) {
this.shouldGen = shouldGen;
return this;
}
public @NonNull ChunkCoordinatorBuilder withProgressSubscriber(ProgressSubscriber progressSubscriber) { public @NonNull ChunkCoordinatorBuilder withProgressSubscriber(ProgressSubscriber progressSubscriber) {
this.progressSubscribers.add(progressSubscriber); this.progressSubscribers.add(progressSubscriber);
return this; return this;
@ -248,8 +234,7 @@ public class ChunkCoordinatorBuilder {
this.throwableConsumer, this.throwableConsumer,
this.unloadAfter, this.unloadAfter,
this.progressSubscribers, this.progressSubscribers,
this.forceSync, this.forceSync
this.shouldGen
); );
} }

View File

@ -51,7 +51,6 @@ public class DelegateQueueCoordinator extends QueueCoordinator {
if (parent != null) { if (parent != null) {
this.setForceSync(parent.isForceSync()); this.setForceSync(parent.isForceSync());
this.setShouldGen(parent.isShouldGen());
} }
} }

View File

@ -45,7 +45,6 @@ public abstract class QueueCoordinator {
private final AtomicBoolean enqueued = new AtomicBoolean(); private final AtomicBoolean enqueued = new AtomicBoolean();
private boolean forceSync = false; private boolean forceSync = false;
private boolean shouldGen = true;
@Nullable @Nullable
private Object chunkObject; private Object chunkObject;
@SuppressWarnings({"unused", "FieldCanBeLocal"}) @SuppressWarnings({"unused", "FieldCanBeLocal"})
@ -111,30 +110,6 @@ public abstract class QueueCoordinator {
this.forceSync = forceSync; this.forceSync = forceSync;
} }
/**
* Get whether chunks should be generated as part of this operation. Default is true. Disabling this may not be supported
* depending on server implementation. (i.e. setting to false may not actually disable generation as part of this operation
* - this is just a catch-all in case of future differing server implementations; the option will work on Spigot/Paper).
*
* @since 7.5.0
*/
public boolean isShouldGen() {
return shouldGen;
}
/**
* Set whether chunks should be generated as part of this operation. Default is true. Disabling this may not be supported
* depending on server implementation. (i.e. setting to false may not actually disable generation as part of this operation
* - this is just a catch-all in case of future differing server implementations; the option will work on Spigot/Paper).
*
* @param shouldGen should generate new chunks or not
* @since 7.5.0
*/
public void setShouldGen(boolean shouldGen) {
this.shouldGen = shouldGen;
}
/** /**
* Get the Chunk Object set to the queue * Get the Chunk Object set to the queue
* *

View File

@ -177,13 +177,6 @@ public abstract class WorldUtil {
*/ */
public abstract void getBlock(@NonNull Location location, @NonNull Consumer<BlockState> result); public abstract void getBlock(@NonNull Location location, @NonNull Consumer<BlockState> result);
/**
* Checks if the block smaller as a slab
* @param location Block location
* @return true if it smaller as a slab
*/
public abstract boolean isSmallBlock(@NonNull Location location);
/** /**
* Get the block at a given location (synchronously) * Get the block at a given location (synchronously)
* *

View File

@ -22,7 +22,7 @@ plugins {
} }
group = "com.intellectualsites.plotsquared" group = "com.intellectualsites.plotsquared"
version = "7.5.2-SNAPSHOT" version = "7.4.1-SNAPSHOT"
if (!File("$rootDir/.git").exists()) { if (!File("$rootDir/.git").exists()) {
logger.lifecycle(""" logger.lifecycle("""
@ -79,8 +79,8 @@ subprojects {
dependencies { dependencies {
// Tests // Tests
testImplementation("org.junit.jupiter:junit-jupiter:5.12.0") testImplementation("org.junit.jupiter:junit-jupiter:5.11.3")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.12.0") testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.11.3")
} }
plugins.withId("java") { plugins.withId("java") {
@ -230,7 +230,7 @@ tasks.getByName<Jar>("jar") {
enabled = false enabled = false
} }
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4") val supportedVersions = listOf("1.18.2", "1.19.4", "1.20.6", "1.21.1", "1.21.3")
tasks { tasks {
register("cacheLatestFaweArtifact") { register("cacheLatestFaweArtifact") {
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL() val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()

View File

@ -2,18 +2,18 @@
# Platform expectations # Platform expectations
paper = "1.20.4-R0.1-SNAPSHOT" paper = "1.20.4-R0.1-SNAPSHOT"
guice = "7.0.0" guice = "7.0.0"
spotbugs = "4.9.1" spotbugs = "4.8.6"
checkerqual = "3.49.0" checkerqual = "3.48.2"
gson = "2.10" gson = "2.10"
guava = "31.1-jre" guava = "31.1-jre"
snakeyaml = "2.0" snakeyaml = "2.0"
adventure = "4.19.0" adventure = "4.17.0"
adventure-bukkit = "4.3.4" adventure-bukkit = "4.3.4"
log4j = "2.19.0" log4j = "2.19.0"
# Plugins # Plugins
worldedit = "7.2.20" worldedit = "7.2.20"
fawe = "2.13.0" fawe = "2.12.1"
placeholderapi = "2.11.6" placeholderapi = "2.11.6"
luckperms = "5.4" luckperms = "5.4"
essentialsx = "2.20.1" essentialsx = "2.20.1"
@ -33,9 +33,9 @@ vault = "1.7.1"
serverlib = "2.3.6" serverlib = "2.3.6"
# Gradle plugins # Gradle plugins
shadow = "8.3.6" shadow = "8.3.5"
grgit = "4.1.1" grgit = "4.1.1"
spotless = "7.0.2" spotless = "6.25.0"
nexus = "2.0.0" nexus = "2.0.0"
runPaper = "2.3.1" runPaper = "2.3.1"

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

3
gradlew vendored
View File

@ -86,7 +86,8 @@ done
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# 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