mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-06-29 12:14:42 +02:00
v7 is here (#3982)
* Update MiniMessage to 4.10.1 (#3617)
* chore!: bump MiniMessage to 4.10.1
BREAKING CHANGE: bumping MiniMessage and Adventure removes the adventure Template class and breaks the whole messaging system api wise
* chore: fix minimessage messages, fix circular method reference
* build: Update to Paper 1.18.2 (#3622)
build: Align MM and Adventure version
* Replace legacy color codes in flag examples (#3520)
* chore: Change maven group and artifact ID (#3632)
chore: Change maven group and artifact ID
* v7 is 7.0.0-SNAPSHOT
* build: Update bom
* Chore: General deprecations (#3660)
Address deprecations for removal throughout the plugin
* Address deprecations in queue/generation code (#3658)
* Update to new Spigot generation API (#3659)
* Address deprecations in queue/generation code
* Move to new generation API
- Currently not working due to lack of biome-setting capability via BiomeProvider for flat worlds
* Any fixes to flat world biome setting will target 1.19
* Ensure compiled is actually set to true in BlockBucket
* Delegate to platformGenerator in deprecated generation method if applicable when using new generation methods (1.19)
* Re-add wrongly removed method
* Handle exceptions using logger
* We can simplify getting relative offset using floormod
* Replace many booleans with EnumSet
* Address comments, remove needless boolean return for populateChunk
* Ensure use of new generation methods only on 1.19 and above
* refactor: simplify timeout logic in uuid pipeline (#3760)
simplify timeout logic
* Fix compile errors
* Revert GAV changes
* Update javadoc links
* Start deployment of v7 snapshots
* Temporarily create javadocs for v7 snapshots
* Temporarily create javadocs for v7 snapshots
* Fixes #3919
* Fix relocation of informative annotations
* Drop HTTP4J (#3916)
* Fixes #3906 by fine-graining the help menu generation localization support
* Clean up merge
* *Actually clean up
* chore: Remove things marked as for removal (#3941)
* chore: Remove things marked as for removal
* Address feedback
Co-authored-by: Alexander Brandes <mc.cache@web.de>
* Resolved conflicts
* Cleanup deprecated methods
* Revert "Cleanup deprecated methods"
This reverts commit 26692d6633
.
* Record-inize methods (#3976)
* Delete unused HyperverseWorldManager file
* Migrate left over occurrences to enhanced switches (#3979)
* Migrate left-overs to enhanced switches
* More
* Cleanup deprecated methods (#3980)
* Perform code formatting according to editorconfig (#3981)
* Perform code reformatting
* Fix javadoc errors
* Don't format JSON files
---------
Co-authored-by: Pierre Maurice Schwang <mail@pschwang.eu>
Co-authored-by: Hannes Greule <SirYwell@users.noreply.github.com>
Co-authored-by: dordsor21 <dordsor21@gmail.com>
This commit is contained in:

committed by
GitHub

parent
ea19ff783f
commit
f11f5f0dfb
@ -48,7 +48,6 @@ dependencies {
|
||||
|
||||
// Our libraries
|
||||
implementation(libs.arkitektonika)
|
||||
implementation(libs.http4j)
|
||||
implementation("com.intellectualsites.paster:Paster")
|
||||
implementation("com.intellectualsites.informative-annotations:informative-annotations")
|
||||
|
||||
@ -88,7 +87,7 @@ tasks.named<ShadowJar>("shadowJar") {
|
||||
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
||||
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
||||
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
||||
relocate("com.intellectualsites.informative-annotations", "com.plotsquared.core.annotation.informative")
|
||||
relocate("com.intellectualsites.annotations", "com.plotsquared.core.annotations.informative")
|
||||
|
||||
// Get rid of all the libs which are 100% unused.
|
||||
minimize()
|
||||
@ -100,10 +99,10 @@ tasks {
|
||||
withType<Javadoc> {
|
||||
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
||||
val opt = options as StandardJavadocDocletOptions
|
||||
opt.links("https://jd.papermc.io/paper/1.18/")
|
||||
opt.links("https://jd.papermc.io/paper/1.19/")
|
||||
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://jd.adventure.kyori.net/api/4.9.3/")
|
||||
opt.links("https://jd.adventure.kyori.net/api/4.12.0/")
|
||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||
opt.links("https://checkerframework.org/api/")
|
||||
opt.isLinkSource = true
|
||||
|
@ -49,6 +49,7 @@ import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||
import com.plotsquared.bukkit.util.SetGenCB;
|
||||
import com.plotsquared.bukkit.util.TranslationUpdateManager;
|
||||
import com.plotsquared.bukkit.util.UpdateUtility;
|
||||
import com.plotsquared.bukkit.util.task.BukkitTaskManager;
|
||||
import com.plotsquared.bukkit.util.task.PaperTimeConverter;
|
||||
@ -140,6 +141,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.incendo.serverlib.ServerLib;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -293,6 +295,12 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
);
|
||||
this.injector.injectMembers(this);
|
||||
|
||||
try {
|
||||
this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
||||
|
||||
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
|
||||
@ -358,7 +366,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
||||
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
||||
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||
} else {
|
||||
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
||||
}
|
||||
@ -1177,9 +1185,17 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
public @NonNull String worldEditImplementations() {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
||||
msg.append("FastAsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit").getDescription().getVersion());
|
||||
msg.append("FastAsyncWorldEdit: ").append(Bukkit
|
||||
.getPluginManager()
|
||||
.getPlugin("FastAsyncWorldEdit")
|
||||
.getDescription()
|
||||
.getVersion());
|
||||
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
||||
msg.append("AsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("AsyncWorldEdit").getDescription().getVersion()).append("\n");
|
||||
msg.append("AsyncWorldEdit: ").append(Bukkit
|
||||
.getPluginManager()
|
||||
.getPlugin("AsyncWorldEdit")
|
||||
.getDescription()
|
||||
.getVersion()).append("\n");
|
||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||
} else {
|
||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||
|
@ -101,50 +101,26 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.noGravity = true;
|
||||
}
|
||||
switch (entity.getType().toString()) {
|
||||
case "BOAT":
|
||||
case "BOAT" -> {
|
||||
Boat boat = (Boat) entity;
|
||||
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
|
||||
return;
|
||||
case "ARROW":
|
||||
case "EGG":
|
||||
case "ENDER_CRYSTAL":
|
||||
case "ENDER_PEARL":
|
||||
case "ENDER_SIGNAL":
|
||||
case "EXPERIENCE_ORB":
|
||||
case "FALLING_BLOCK":
|
||||
case "FIREBALL":
|
||||
case "FIREWORK":
|
||||
case "FISHING_HOOK":
|
||||
case "LEASH_HITCH":
|
||||
case "LIGHTNING":
|
||||
case "MINECART":
|
||||
case "MINECART_COMMAND":
|
||||
case "MINECART_MOB_SPAWNER":
|
||||
case "MINECART_TNT":
|
||||
case "PLAYER":
|
||||
case "PRIMED_TNT":
|
||||
case "SLIME":
|
||||
case "SMALL_FIREBALL":
|
||||
case "SNOWBALL":
|
||||
case "MINECART_FURNACE":
|
||||
case "SPLASH_POTION":
|
||||
case "THROWN_EXP_BOTTLE":
|
||||
case "WITHER_SKULL":
|
||||
case "UNKNOWN":
|
||||
case "SPECTRAL_ARROW":
|
||||
case "SHULKER_BULLET":
|
||||
case "DRAGON_FIREBALL":
|
||||
case "AREA_EFFECT_CLOUD":
|
||||
case "TRIDENT":
|
||||
case "LLAMA_SPIT":
|
||||
}
|
||||
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",
|
||||
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
|
||||
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD",
|
||||
"TRIDENT", "LLAMA_SPIT" -> {
|
||||
// Do this stuff later
|
||||
return;
|
||||
}
|
||||
// MISC //
|
||||
case "DROPPED_ITEM":
|
||||
case "DROPPED_ITEM" -> {
|
||||
Item item = (Item) entity;
|
||||
this.stack = item.getItemStack();
|
||||
return;
|
||||
case "ITEM_FRAME":
|
||||
}
|
||||
case "ITEM_FRAME" -> {
|
||||
this.x = Math.floor(this.getX());
|
||||
this.y = Math.floor(this.getY());
|
||||
this.z = Math.floor(this.getZ());
|
||||
@ -152,7 +128,8 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
|
||||
this.stack = itemFrame.getItem().clone();
|
||||
return;
|
||||
case "PAINTING":
|
||||
}
|
||||
case "PAINTING" -> {
|
||||
this.x = Math.floor(this.getX());
|
||||
this.y = Math.floor(this.getY());
|
||||
this.z = Math.floor(this.getZ());
|
||||
@ -165,20 +142,17 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
}
|
||||
this.dataString = art.name();
|
||||
return;
|
||||
}
|
||||
// END MISC //
|
||||
// INVENTORY HOLDER //
|
||||
case "MINECART_CHEST":
|
||||
case "MINECART_HOPPER":
|
||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
||||
storeInventory((InventoryHolder) entity);
|
||||
return;
|
||||
}
|
||||
// START LIVING ENTITY //
|
||||
// START AGEABLE //
|
||||
// START TAMEABLE //
|
||||
case "HORSE":
|
||||
case "DONKEY":
|
||||
case "LLAMA":
|
||||
case "MULE":
|
||||
case "SKELETON_HORSE":
|
||||
case "HORSE", "DONKEY", "LLAMA", "MULE", "SKELETON_HORSE" -> {
|
||||
AbstractHorse horse = (AbstractHorse) entity;
|
||||
this.horse = new HorseStats();
|
||||
this.horse.jump = horse.getJumpStrength();
|
||||
@ -194,16 +168,17 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
storeLiving(horse);
|
||||
storeInventory(horse);
|
||||
return;
|
||||
}
|
||||
// END INVENTORY HOLDER //
|
||||
case "WOLF":
|
||||
case "OCELOT":
|
||||
case "WOLF", "OCELOT" -> {
|
||||
storeTameable((Tameable) entity);
|
||||
storeAgeable((Ageable) entity);
|
||||
storeLiving((LivingEntity) entity);
|
||||
return;
|
||||
}
|
||||
// END TAMEABLE //
|
||||
//todo fix sheep
|
||||
case "SHEEP":
|
||||
case "SHEEP" -> {
|
||||
Sheep sheep = (Sheep) entity;
|
||||
if (sheep.isSheared()) {
|
||||
this.dataByte = (byte) 1;
|
||||
@ -214,23 +189,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
storeAgeable(sheep);
|
||||
storeLiving(sheep);
|
||||
return;
|
||||
case "VILLAGER":
|
||||
case "CHICKEN":
|
||||
case "COW":
|
||||
case "MUSHROOM_COW":
|
||||
case "PIG":
|
||||
case "TURTLE":
|
||||
case "POLAR_BEAR":
|
||||
}
|
||||
case "VILLAGER", "CHICKEN", "COW", "MUSHROOM_COW", "PIG", "TURTLE", "POLAR_BEAR" -> {
|
||||
storeAgeable((Ageable) entity);
|
||||
storeLiving((LivingEntity) entity);
|
||||
return;
|
||||
case "RABBIT":
|
||||
}
|
||||
case "RABBIT" -> {
|
||||
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
|
||||
storeAgeable((Ageable) entity);
|
||||
storeLiving((LivingEntity) entity);
|
||||
return;
|
||||
}
|
||||
// END AGEABLE //
|
||||
case "ARMOR_STAND":
|
||||
case "ARMOR_STAND" -> {
|
||||
ArmorStand stand = (ArmorStand) entity;
|
||||
this.inventory =
|
||||
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
||||
@ -238,37 +210,30 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
stand.getBoots().clone()};
|
||||
storeLiving(stand);
|
||||
this.stand = new ArmorStandStats();
|
||||
|
||||
EulerAngle head = stand.getHeadPose();
|
||||
this.stand.head[0] = (float) head.getX();
|
||||
this.stand.head[1] = (float) head.getY();
|
||||
this.stand.head[2] = (float) head.getZ();
|
||||
|
||||
EulerAngle body = stand.getBodyPose();
|
||||
this.stand.body[0] = (float) body.getX();
|
||||
this.stand.body[1] = (float) body.getY();
|
||||
this.stand.body[2] = (float) body.getZ();
|
||||
|
||||
EulerAngle leftLeg = stand.getLeftLegPose();
|
||||
this.stand.leftLeg[0] = (float) leftLeg.getX();
|
||||
this.stand.leftLeg[1] = (float) leftLeg.getY();
|
||||
this.stand.leftLeg[2] = (float) leftLeg.getZ();
|
||||
|
||||
EulerAngle rightLeg = stand.getRightLegPose();
|
||||
this.stand.rightLeg[0] = (float) rightLeg.getX();
|
||||
this.stand.rightLeg[1] = (float) rightLeg.getY();
|
||||
this.stand.rightLeg[2] = (float) rightLeg.getZ();
|
||||
|
||||
EulerAngle leftArm = stand.getLeftArmPose();
|
||||
this.stand.leftArm[0] = (float) leftArm.getX();
|
||||
this.stand.leftArm[1] = (float) leftArm.getY();
|
||||
this.stand.leftArm[2] = (float) leftArm.getZ();
|
||||
|
||||
EulerAngle rightArm = stand.getRightArmPose();
|
||||
this.stand.rightArm[0] = (float) rightArm.getX();
|
||||
this.stand.rightArm[1] = (float) rightArm.getY();
|
||||
this.stand.rightArm[2] = (float) rightArm.getZ();
|
||||
|
||||
if (stand.hasArms()) {
|
||||
this.stand.arms = true;
|
||||
}
|
||||
@ -282,53 +247,38 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.stand.small = true;
|
||||
}
|
||||
return;
|
||||
case "ENDERMITE":
|
||||
}
|
||||
case "ENDERMITE" -> {
|
||||
return;
|
||||
case "BAT":
|
||||
}
|
||||
case "BAT" -> {
|
||||
if (((Bat) entity).isAwake()) {
|
||||
this.dataByte = (byte) 1;
|
||||
} else {
|
||||
this.dataByte = (byte) 0;
|
||||
}
|
||||
return;
|
||||
case "ENDER_DRAGON":
|
||||
}
|
||||
case "ENDER_DRAGON" -> {
|
||||
EnderDragon entity1 = (EnderDragon) entity;
|
||||
this.dataByte = (byte) entity1.getPhase().ordinal();
|
||||
return;
|
||||
case "SKELETON":
|
||||
case "WITHER_SKELETON":
|
||||
case "GUARDIAN":
|
||||
case "ELDER_GUARDIAN":
|
||||
case "GHAST":
|
||||
case "MAGMA_CUBE":
|
||||
case "SQUID":
|
||||
case "PIG_ZOMBIE":
|
||||
case "HOGLIN":
|
||||
case "ZOMBIFIED_PIGLIN":
|
||||
case "PIGLIN":
|
||||
case "PIGLIN_BRUTE":
|
||||
case "ZOMBIE":
|
||||
case "WITHER":
|
||||
case "WITCH":
|
||||
case "SPIDER":
|
||||
case "CAVE_SPIDER":
|
||||
case "SILVERFISH":
|
||||
case "GIANT":
|
||||
case "ENDERMAN":
|
||||
case "CREEPER":
|
||||
case "BLAZE":
|
||||
case "SHULKER":
|
||||
case "SNOWMAN":
|
||||
}
|
||||
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",
|
||||
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN" -> {
|
||||
storeLiving((LivingEntity) entity);
|
||||
return;
|
||||
case "IRON_GOLEM":
|
||||
}
|
||||
case "IRON_GOLEM" -> {
|
||||
if (((IronGolem) entity).isPlayerCreated()) {
|
||||
this.dataByte = (byte) 1;
|
||||
} else {
|
||||
this.dataByte = (byte) 0;
|
||||
}
|
||||
storeLiving((LivingEntity) entity);
|
||||
// END LIVING //
|
||||
}
|
||||
// END LIVING //
|
||||
}
|
||||
}
|
||||
|
||||
@ -465,20 +415,15 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
}
|
||||
Entity entity;
|
||||
switch (this.getType().toString()) {
|
||||
case "DROPPED_ITEM":
|
||||
case "DROPPED_ITEM" -> {
|
||||
return world.dropItem(location, this.stack);
|
||||
case "PLAYER":
|
||||
case "LEASH_HITCH":
|
||||
}
|
||||
case "PLAYER", "LEASH_HITCH" -> {
|
||||
return null;
|
||||
case "ITEM_FRAME":
|
||||
entity = world.spawn(location, ItemFrame.class);
|
||||
break;
|
||||
case "PAINTING":
|
||||
entity = world.spawn(location, Painting.class);
|
||||
break;
|
||||
default:
|
||||
entity = world.spawnEntity(location, this.getType());
|
||||
break;
|
||||
}
|
||||
case "ITEM_FRAME" -> entity = world.spawn(location, ItemFrame.class);
|
||||
case "PAINTING" -> entity = world.spawn(location, Painting.class);
|
||||
default -> entity = world.spawnEntity(location, this.getType());
|
||||
}
|
||||
if (this.depth == 0) {
|
||||
return entity;
|
||||
@ -506,72 +451,46 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
entity.setGravity(false);
|
||||
}
|
||||
switch (entity.getType().toString()) {
|
||||
case "BOAT":
|
||||
case "BOAT" -> {
|
||||
Boat boat = (Boat) entity;
|
||||
boat.setWoodType(TreeSpecies.values()[dataByte]);
|
||||
return entity;
|
||||
case "SLIME":
|
||||
}
|
||||
case "SLIME" -> {
|
||||
((Slime) entity).setSize(this.dataByte);
|
||||
return entity;
|
||||
case "ARROW":
|
||||
case "EGG":
|
||||
case "ENDER_CRYSTAL":
|
||||
case "ENDER_PEARL":
|
||||
case "ENDER_SIGNAL":
|
||||
case "DROPPED_ITEM":
|
||||
case "EXPERIENCE_ORB":
|
||||
case "FALLING_BLOCK":
|
||||
case "FIREBALL":
|
||||
case "FIREWORK":
|
||||
case "FISHING_HOOK":
|
||||
case "LEASH_HITCH":
|
||||
case "LIGHTNING":
|
||||
case "MINECART":
|
||||
case "MINECART_COMMAND":
|
||||
case "MINECART_MOB_SPAWNER":
|
||||
case "MINECART_TNT":
|
||||
case "PLAYER":
|
||||
case "PRIMED_TNT":
|
||||
case "SMALL_FIREBALL":
|
||||
case "SNOWBALL":
|
||||
case "SPLASH_POTION":
|
||||
case "THROWN_EXP_BOTTLE":
|
||||
case "SPECTRAL_ARROW":
|
||||
case "SHULKER_BULLET":
|
||||
case "AREA_EFFECT_CLOUD":
|
||||
case "DRAGON_FIREBALL":
|
||||
case "WITHER_SKULL":
|
||||
case "MINECART_FURNACE":
|
||||
case "LLAMA_SPIT":
|
||||
case "TRIDENT":
|
||||
case "UNKNOWN":
|
||||
}
|
||||
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",
|
||||
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
|
||||
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD",
|
||||
"DRAGON_FIREBALL", "WITHER_SKULL", "MINECART_FURNACE", "LLAMA_SPIT", "TRIDENT", "UNKNOWN" -> {
|
||||
// Do this stuff later
|
||||
return entity;
|
||||
}
|
||||
// MISC //
|
||||
case "ITEM_FRAME":
|
||||
case "ITEM_FRAME" -> {
|
||||
ItemFrame itemframe = (ItemFrame) entity;
|
||||
itemframe.setRotation(Rotation.values()[this.dataByte]);
|
||||
itemframe.setItem(this.stack);
|
||||
return entity;
|
||||
case "PAINTING":
|
||||
}
|
||||
case "PAINTING" -> {
|
||||
Painting painting = (Painting) entity;
|
||||
painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
|
||||
painting.setArt(Art.getByName(this.dataString), true);
|
||||
return entity;
|
||||
}
|
||||
// END MISC //
|
||||
// INVENTORY HOLDER //
|
||||
case "MINECART_CHEST":
|
||||
case "MINECART_HOPPER":
|
||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
||||
restoreInventory((InventoryHolder) entity);
|
||||
return entity;
|
||||
}
|
||||
// START LIVING ENTITY //
|
||||
// START AGEABLE //
|
||||
// START TAMEABLE //
|
||||
case "HORSE":
|
||||
case "LLAMA":
|
||||
case "SKELETON_HORSE":
|
||||
case "DONKEY":
|
||||
case "MULE":
|
||||
case "HORSE", "LLAMA", "SKELETON_HORSE", "DONKEY", "MULE" -> {
|
||||
AbstractHorse horse = (AbstractHorse) entity;
|
||||
horse.setJumpStrength(this.horse.jump);
|
||||
if (horse instanceof ChestedHorse) {
|
||||
@ -586,15 +505,16 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
restoreLiving(horse);
|
||||
restoreInventory(horse);
|
||||
return entity;
|
||||
}
|
||||
// END INVENTORY HOLDER //
|
||||
case "WOLF":
|
||||
case "OCELOT":
|
||||
case "WOLF", "OCELOT" -> {
|
||||
restoreTameable((Tameable) entity);
|
||||
restoreAgeable((Ageable) entity);
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
}
|
||||
// END AGEABLE //
|
||||
case "SHEEP":
|
||||
case "SHEEP" -> {
|
||||
Sheep sheep = (Sheep) entity;
|
||||
if (this.dataByte == 1) {
|
||||
sheep.setSheared(true);
|
||||
@ -605,25 +525,22 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
restoreAgeable(sheep);
|
||||
restoreLiving(sheep);
|
||||
return sheep;
|
||||
case "VILLAGER":
|
||||
case "CHICKEN":
|
||||
case "COW":
|
||||
case "TURTLE":
|
||||
case "POLAR_BEAR":
|
||||
case "MUSHROOM_COW":
|
||||
case "PIG":
|
||||
}
|
||||
case "VILLAGER", "CHICKEN", "COW", "TURTLE", "POLAR_BEAR", "MUSHROOM_COW", "PIG" -> {
|
||||
restoreAgeable((Ageable) entity);
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
}
|
||||
// END AGEABLE //
|
||||
case "RABBIT":
|
||||
case "RABBIT" -> {
|
||||
if (this.dataByte != 0) {
|
||||
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
|
||||
}
|
||||
restoreAgeable((Ageable) entity);
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
case "ARMOR_STAND":
|
||||
}
|
||||
case "ARMOR_STAND" -> {
|
||||
// CHECK positions
|
||||
ArmorStand stand = (ArmorStand) entity;
|
||||
if (this.inventory[0] != null) {
|
||||
@ -693,56 +610,38 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
}
|
||||
restoreLiving(stand);
|
||||
return stand;
|
||||
case "BAT":
|
||||
}
|
||||
case "BAT" -> {
|
||||
if (this.dataByte != 0) {
|
||||
((Bat) entity).setAwake(true);
|
||||
}
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
case "ENDER_DRAGON":
|
||||
}
|
||||
case "ENDER_DRAGON" -> {
|
||||
if (this.dataByte != 0) {
|
||||
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
|
||||
}
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
case "ENDERMITE":
|
||||
case "GHAST":
|
||||
case "MAGMA_CUBE":
|
||||
case "SQUID":
|
||||
case "PIG_ZOMBIE":
|
||||
case "HOGLIN":
|
||||
case "PIGLIN":
|
||||
case "ZOMBIFIED_PIGLIN":
|
||||
case "PIGLIN_BRUTE":
|
||||
case "ZOMBIE":
|
||||
case "WITHER":
|
||||
case "WITCH":
|
||||
case "SPIDER":
|
||||
case "CAVE_SPIDER":
|
||||
case "SILVERFISH":
|
||||
case "GIANT":
|
||||
case "ENDERMAN":
|
||||
case "CREEPER":
|
||||
case "BLAZE":
|
||||
case "SNOWMAN":
|
||||
case "SHULKER":
|
||||
case "GUARDIAN":
|
||||
case "ELDER_GUARDIAN":
|
||||
case "SKELETON":
|
||||
case "WITHER_SKELETON":
|
||||
}
|
||||
case "ENDERMITE", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
case "IRON_GOLEM":
|
||||
}
|
||||
case "IRON_GOLEM" -> {
|
||||
if (this.dataByte != 0) {
|
||||
((IronGolem) entity).setPlayerCreated(true);
|
||||
}
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
default:
|
||||
}
|
||||
default -> {
|
||||
if (Settings.DEBUG) {
|
||||
LOGGER.info("Could not identify entity: {}", entity.getType());
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
// END LIVING
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,8 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.location.UncheckedWorldLocation;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.LimitedRegion;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
@ -47,17 +46,6 @@ final class BlockStatePopulator extends BlockPopulator {
|
||||
this.plotGenerator = plotGenerator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link BlockStatePopulator#BlockStatePopulator(IndependentPlotGenerator)} as plotAreManager is unused
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||
public BlockStatePopulator(
|
||||
final @NonNull IndependentPlotGenerator plotGenerator,
|
||||
final @NonNull PlotAreaManager plotAreaManager
|
||||
) {
|
||||
this.plotGenerator = plotGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate(
|
||||
@NonNull final WorldInfo worldInfo,
|
||||
@ -80,7 +68,7 @@ final class BlockStatePopulator extends BlockPopulator {
|
||||
worldInfo.getMaxHeight(),
|
||||
(chunkZ << 4) + 15
|
||||
);
|
||||
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(wrapped, min, max);
|
||||
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(wrapped, min, max);
|
||||
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
||||
}
|
||||
|
||||
|
@ -22,20 +22,30 @@ import com.plotsquared.bukkit.queue.GenChunk;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.generator.ClassicPlotWorld;
|
||||
import com.plotsquared.core.generator.GeneratorWrapper;
|
||||
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||
import com.plotsquared.core.generator.SingleWorldGenerator;
|
||||
import com.plotsquared.core.location.ChunkWrapper;
|
||||
import com.plotsquared.core.location.UncheckedWorldLocation;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import com.plotsquared.core.util.ChunkManager;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.math.BlockVector2;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.bukkit.HeightMap;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.BiomeProvider;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -44,6 +54,8 @@ import java.util.Set;
|
||||
|
||||
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final boolean PAPER_ASYNC_SAFE = true;
|
||||
|
||||
@ -52,9 +64,15 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
private final ChunkGenerator platformGenerator;
|
||||
private final boolean full;
|
||||
private final String levelName;
|
||||
private final boolean useNewGenerationMethods;
|
||||
private final BiomeProvider biomeProvider;
|
||||
private List<BlockPopulator> populators;
|
||||
private boolean loaded = false;
|
||||
|
||||
private PlotArea lastPlotArea;
|
||||
private int lastChunkX = Integer.MIN_VALUE;
|
||||
private int lastChunkZ = Integer.MIN_VALUE;
|
||||
|
||||
public BukkitPlotGenerator(
|
||||
final @NonNull String name,
|
||||
final @NonNull IndependentPlotGenerator generator,
|
||||
@ -72,18 +90,23 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
|
||||
}
|
||||
this.full = true;
|
||||
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
|
||||
this.biomeProvider = new BukkitPlotBiomeProvider();
|
||||
}
|
||||
|
||||
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
|
||||
if (cg instanceof BukkitPlotGenerator) {
|
||||
throw new IllegalArgumentException("ChunkGenerator: " + cg.getClass().getName()
|
||||
+ " is already a BukkitPlotGenerator!");
|
||||
throw new IllegalArgumentException("ChunkGenerator: " + cg
|
||||
.getClass()
|
||||
.getName() + " is already a BukkitPlotGenerator!");
|
||||
}
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
this.levelName = world;
|
||||
this.full = false;
|
||||
this.platformGenerator = cg;
|
||||
this.plotGenerator = new DelegatePlotGenerator(cg, world);
|
||||
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
|
||||
this.biomeProvider = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -111,7 +134,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
try {
|
||||
checkLoaded(world);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
LOGGER.error("Error attempting to load world into PlotSquared.", e);
|
||||
}
|
||||
ArrayList<BlockPopulator> toAdd = new ArrayList<>();
|
||||
List<BlockPopulator> existing = world.getPopulators();
|
||||
@ -128,6 +151,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
return toAdd;
|
||||
}
|
||||
|
||||
// Extracted to synchronized method for thread-safety, preventing multiple internal world load calls
|
||||
private synchronized void checkLoaded(@NonNull World world) {
|
||||
// Do not attempt to load configurations until WorldEdit has a platform ready.
|
||||
if (!PlotSquared.get().isWeInitialised()) {
|
||||
@ -153,7 +177,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@SuppressWarnings("deprecation") // Kept for compatibility with <=1.17.1
|
||||
private void setSpawnLimits(@NonNull World world, int limit) {
|
||||
world.setAmbientSpawnLimit(limit);
|
||||
world.setAnimalSpawnLimit(limit);
|
||||
@ -161,17 +185,84 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
world.setWaterAnimalSpawnLimit(limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* The entire method is deprecated, but kept for compatibility with versions lower than or equal to 1.16.2.
|
||||
* The method will be removed in future versions, because WorldEdit and FastAsyncWorldEdit only support the latest point
|
||||
* release.
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.11.0")
|
||||
@Override
|
||||
public @NonNull ChunkData generateChunkData(
|
||||
@NonNull World world, @NonNull Random random, int x, int z,
|
||||
@NonNull BiomeGrid biome
|
||||
public void generateSurface(
|
||||
@NotNull final WorldInfo worldInfo,
|
||||
@NotNull final Random random,
|
||||
final int chunkX,
|
||||
final int chunkZ,
|
||||
@NotNull final ChunkData chunkData
|
||||
) {
|
||||
if (platformGenerator != this) {
|
||||
platformGenerator.generateSurface(worldInfo, random, chunkX, chunkZ, chunkData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateBedrock(
|
||||
@NotNull final WorldInfo worldInfo,
|
||||
@NotNull final Random random,
|
||||
final int chunkX,
|
||||
final int chunkZ,
|
||||
@NotNull final ChunkData chunkData
|
||||
) {
|
||||
if (platformGenerator != this) {
|
||||
platformGenerator.generateBedrock(worldInfo, random, chunkX, chunkZ, chunkData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateCaves(
|
||||
@NotNull final WorldInfo worldInfo,
|
||||
@NotNull final Random random,
|
||||
final int chunkX,
|
||||
final int chunkZ,
|
||||
@NotNull final ChunkData chunkData
|
||||
) {
|
||||
if (platformGenerator != this) {
|
||||
platformGenerator.generateCaves(worldInfo, random, chunkX, chunkZ, chunkData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable BiomeProvider getDefaultBiomeProvider(@NotNull final WorldInfo worldInfo) {
|
||||
if (platformGenerator != this) {
|
||||
return platformGenerator.getDefaultBiomeProvider(worldInfo);
|
||||
}
|
||||
return biomeProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBaseHeight(
|
||||
@NotNull final WorldInfo worldInfo,
|
||||
@NotNull final Random random,
|
||||
final int x,
|
||||
final int z,
|
||||
@NotNull final HeightMap heightMap
|
||||
) {
|
||||
PlotArea area = getPlotArea(worldInfo.getName(), x, z);
|
||||
if (area instanceof ClassicPlotWorld cpw) {
|
||||
// Default to plot height being the heighest point before decoration (i.e. roads, walls etc.)
|
||||
return cpw.PLOT_HEIGHT;
|
||||
}
|
||||
return super.getBaseHeight(worldInfo, random, x, z, heightMap);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2
|
||||
@Override
|
||||
@Deprecated(since = "TODO")
|
||||
public @NonNull ChunkData generateChunkData(
|
||||
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome
|
||||
) {
|
||||
if (useNewGenerationMethods) {
|
||||
if (this.platformGenerator != this) {
|
||||
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
||||
} else {
|
||||
// Return super as it will throw an exception caught by the server that will mean this method is no longer used.
|
||||
return super.generateChunkData(world, random, x, z, biome);
|
||||
}
|
||||
}
|
||||
|
||||
int minY = BukkitWorld.getMinWorldHeight(world);
|
||||
int maxY = BukkitWorld.getMaxWorldHeight(world);
|
||||
GenChunk result = new GenChunk(minY, maxY);
|
||||
@ -181,7 +272,6 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
|
||||
for (int y = minY; y < maxY; y++) {
|
||||
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -201,35 +291,32 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
if (this.platformGenerator != this) {
|
||||
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
||||
} else {
|
||||
generate(BlockVector2.at(x, z), world, result);
|
||||
generate(BlockVector2.at(x, z), world.getName(), result, true);
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
LOGGER.error("Error attempting to load world into PlotSquared.", e);
|
||||
}
|
||||
// Return the result data
|
||||
return result.getChunkData();
|
||||
}
|
||||
|
||||
private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) {
|
||||
private void generate(BlockVector2 loc, String world, ZeroedDelegateScopedQueueCoordinator result, boolean biomes) {
|
||||
// Load if improperly loaded
|
||||
if (!this.loaded) {
|
||||
checkLoaded(world);
|
||||
synchronized (this) {
|
||||
PlotSquared.get().loadWorld(world, this);
|
||||
}
|
||||
}
|
||||
// Process the chunk
|
||||
if (ChunkManager.preProcessChunk(loc, result)) {
|
||||
return;
|
||||
}
|
||||
PlotArea area = this.plotAreaManager.getPlotArea(world.getName(), null);
|
||||
if (area == null && (area = this.plotAreaManager.getPlotArea(this.levelName, null)) == null) {
|
||||
throw new IllegalStateException(
|
||||
"Cannot regenerate chunk that does not belong to a plot area." + " Location: " + loc
|
||||
+ ", world: " + world);
|
||||
}
|
||||
PlotArea area = getPlotArea(world, loc.getX(), loc.getZ());
|
||||
try {
|
||||
this.plotGenerator.generateChunk(result, area);
|
||||
this.plotGenerator.generateChunk(result, area, biomes);
|
||||
} catch (Throwable e) {
|
||||
// Recover from generator error
|
||||
e.printStackTrace();
|
||||
LOGGER.error("Error attempting to generate chunk.", e);
|
||||
}
|
||||
ChunkManager.postProcessChunk(loc, result);
|
||||
}
|
||||
@ -283,4 +370,52 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
||||
return this.levelName;
|
||||
}
|
||||
|
||||
private synchronized PlotArea getPlotArea(String name, int chunkX, int chunkZ) {
|
||||
// Load if improperly loaded
|
||||
if (!this.loaded) {
|
||||
PlotSquared.get().loadWorld(name, this);
|
||||
// Do not set loaded to true as we want to ensure spawn limits are set when "loading" is actually able to be
|
||||
// completed properly.
|
||||
}
|
||||
if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
|
||||
return lastPlotArea;
|
||||
}
|
||||
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
|
||||
if (area == null) {
|
||||
throw new IllegalStateException(String.format(
|
||||
"Cannot generate chunk that does not belong to a plot area. World: %s",
|
||||
name
|
||||
));
|
||||
}
|
||||
this.lastChunkX = chunkX;
|
||||
this.lastChunkZ = chunkZ;
|
||||
return this.lastPlotArea = area;
|
||||
}
|
||||
|
||||
/**
|
||||
* Biome provider should never need to be accessed outside of this class.
|
||||
*/
|
||||
private final class BukkitPlotBiomeProvider extends BiomeProvider {
|
||||
|
||||
private static final List<Biome> BIOMES;
|
||||
|
||||
static {
|
||||
ArrayList<Biome> biomes = new ArrayList<>(List.of(Biome.values()));
|
||||
biomes.remove(Biome.CUSTOM);
|
||||
BIOMES = List.copyOf(biomes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Biome getBiome(@NotNull final WorldInfo worldInfo, final int x, final int y, final int z) {
|
||||
PlotArea area = getPlotArea(worldInfo.getName(), x >> 4, z >> 4);
|
||||
return BukkitAdapter.adapt(plotGenerator.getBiome(area, x, y, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull List<Biome> getBiomes(@NotNull final WorldInfo worldInfo) {
|
||||
return BIOMES; // Allow all biomes
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,9 +24,10 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.PlotId;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import com.plotsquared.core.util.MathMan;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
@ -49,6 +50,11 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
||||
public void initialize(PlotArea area) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiomeType getBiome(final PlotArea settings, final int x, final int y, final int z) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.chunkGenerator.getClass().getName();
|
||||
@ -60,7 +66,7 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
|
||||
public void generateChunk(final ZeroedDelegateScopedQueueCoordinator result, PlotArea settings, boolean biomes) {
|
||||
World world = BukkitUtil.getWorld(this.world);
|
||||
Location min = result.getMin();
|
||||
int chunkX = min.getX() >> 4;
|
||||
|
@ -26,7 +26,7 @@ import com.plotsquared.core.location.UncheckedWorldLocation;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||
import com.plotsquared.core.queue.QueueCoordinator;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.util.SideEffectSet;
|
||||
import org.bukkit.Chunk;
|
||||
@ -65,7 +65,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator {
|
||||
queue.setChunkObject(source);
|
||||
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
|
||||
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
|
||||
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(queue, min, max);
|
||||
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(queue, min, max);
|
||||
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
||||
queue.enqueue();
|
||||
}
|
||||
|
@ -61,11 +61,12 @@ import com.plotsquared.core.util.task.TaskTime;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
@ -114,6 +115,10 @@ import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.bukkit.Tag.CORALS;
|
||||
import static org.bukkit.Tag.CORAL_BLOCKS;
|
||||
import static org.bukkit.Tag.WALL_CORALS;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class BlockEventListener implements Listener {
|
||||
|
||||
@ -276,13 +281,23 @@ public class BlockEventListener implements Listener {
|
||||
if (plot != null) {
|
||||
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
|
||||
event.setCancelled(true);
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("height.height_limit"),
|
||||
TagResolver.builder()
|
||||
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
|
||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||
.build()
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!plot.hasOwner()) {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@ -299,7 +314,10 @@ public class BlockEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
plot.debug(player.getName() + " could not place " + event.getBlock().getType()
|
||||
@ -326,7 +344,10 @@ public class BlockEventListener implements Listener {
|
||||
} else if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -348,13 +369,23 @@ public class BlockEventListener implements Listener {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
} else if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
|
||||
event.setCancelled(true);
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("height.height_limit"),
|
||||
TagResolver.builder()
|
||||
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
|
||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||
.build()
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!plot.hasOwner()) {
|
||||
@ -377,7 +408,10 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||
@ -403,7 +437,10 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -536,14 +573,14 @@ public class BlockEventListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (SNOW.contains(event.getNewState().getType())) {
|
||||
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
|
||||
if (!plot.getFlag(SnowFormFlag.class)) {
|
||||
plot.debug("Snow could not form because snow-form = false");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||
if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||
if (!plot.getFlag(IceFormFlag.class)) {
|
||||
plot.debug("Ice could not form because ice-form = false");
|
||||
event.setCancelled(true);
|
||||
@ -568,9 +605,9 @@ public class BlockEventListener implements Listener {
|
||||
return;
|
||||
}
|
||||
Class<? extends BooleanFlag<?>> flag;
|
||||
if (SNOW.contains(event.getNewState().getType())) {
|
||||
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
|
||||
flag = SnowFormFlag.class;
|
||||
} else if (Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||
} else if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||
flag = IceFormFlag.class;
|
||||
} else {
|
||||
return;
|
||||
@ -676,14 +713,14 @@ public class BlockEventListener implements Listener {
|
||||
return;
|
||||
}
|
||||
Material blockType = block.getType();
|
||||
if (Tag.ICE.isTagged(blockType)) {
|
||||
if (org.bukkit.Tag.ICE.isTagged(blockType)) {
|
||||
if (!plot.getFlag(IceMeltFlag.class)) {
|
||||
plot.debug("Ice could not melt because ice-melt = false");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (SNOW.contains(blockType)) {
|
||||
if (org.bukkit.Tag.SNOW.isTagged(blockType)) {
|
||||
if (!plot.getFlag(SnowMeltFlag.class)) {
|
||||
plot.debug("Snow could not melt because snow-melt = false");
|
||||
event.setCancelled(true);
|
||||
@ -697,7 +734,7 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType) || Tag.WALL_CORALS.isTagged(blockType)) {
|
||||
if (CORAL_BLOCKS.isTagged(blockType) || CORALS.isTagged(blockType) || WALL_CORALS.isTagged(blockType)) {
|
||||
if (!plot.getFlag(CoralDryFlag.class)) {
|
||||
plot.debug("Coral could not dry because coral-dry = false");
|
||||
event.setCancelled(true);
|
||||
@ -722,7 +759,9 @@ public class BlockEventListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
if (block.getBlockData() instanceof Farmland farmland && event.getNewState().getBlockData() instanceof Farmland newFarmland) {
|
||||
if (block.getBlockData() instanceof Farmland farmland && event
|
||||
.getNewState()
|
||||
.getBlockData() instanceof Farmland newFarmland) {
|
||||
int currentMoisture = farmland.getMoisture();
|
||||
int newMoisture = newFarmland.getMoisture();
|
||||
|
||||
@ -785,7 +824,10 @@ public class BlockEventListener implements Listener {
|
||||
}
|
||||
|
||||
if (toPlot != null) {
|
||||
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) {
|
||||
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
||||
toPlot,
|
||||
toArea.getOwnedPlot(fromLocation)
|
||||
)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
@ -801,7 +843,10 @@ public class BlockEventListener implements Listener {
|
||||
toPlot.debug("Liquid could not flow because liquid-flow = disabled");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) {
|
||||
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
||||
null,
|
||||
toArea.getOwnedPlot(fromLocation)
|
||||
)) {
|
||||
event.setCancelled(true);
|
||||
} else if (event.getBlock().isLiquid()) {
|
||||
final org.bukkit.Location location = event.getBlock().getLocation();
|
||||
@ -1124,7 +1169,10 @@ public class BlockEventListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1134,7 +1182,10 @@ public class BlockEventListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1142,7 +1193,10 @@ public class BlockEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1268,16 +1322,29 @@ public class BlockEventListener implements Listener {
|
||||
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||
continue;
|
||||
}
|
||||
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("height.height_limit"),
|
||||
TagResolver.builder()
|
||||
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
|
||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||
.build()
|
||||
);
|
||||
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -92,7 +92,11 @@ public class BlockEventListener117 implements Listener {
|
||||
}
|
||||
|
||||
Plot plot = location.getOwnedPlot();
|
||||
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag(
|
||||
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(
|
||||
area,
|
||||
MiscInteractFlag.class,
|
||||
true
|
||||
) || plot != null && !plot.getFlag(
|
||||
MiscInteractFlag.class)) {
|
||||
if (plotPlayer != null) {
|
||||
if (plot != null) {
|
||||
|
@ -234,7 +234,8 @@ public class ChunkListener implements Listener {
|
||||
Chunk chunk = event.getChunk();
|
||||
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
||||
String world = chunk.getWorld().getName();
|
||||
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(world)) {
|
||||
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(
|
||||
world)) {
|
||||
if (unloadChunk(world, chunk, true)) {
|
||||
return;
|
||||
}
|
||||
|
@ -145,54 +145,37 @@ public class EntityEventListener implements Listener {
|
||||
}
|
||||
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
||||
switch (reason.toString()) {
|
||||
case "DISPENSE_EGG":
|
||||
case "EGG":
|
||||
case "OCELOT_BABY":
|
||||
case "SPAWNER_EGG":
|
||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
||||
if (!area.isSpawnEggs()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "REINFORCEMENTS":
|
||||
case "NATURAL":
|
||||
case "MOUNT":
|
||||
case "PATROL":
|
||||
case "RAID":
|
||||
case "SHEARED":
|
||||
case "SILVERFISH_BLOCK":
|
||||
case "ENDER_PEARL":
|
||||
case "TRAP":
|
||||
case "VILLAGE_DEFENSE":
|
||||
case "VILLAGE_INVASION":
|
||||
case "BEEHIVE":
|
||||
case "CHUNK_GEN":
|
||||
}
|
||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL",
|
||||
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> {
|
||||
if (!area.isMobSpawning()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "BREEDING":
|
||||
}
|
||||
case "BREEDING" -> {
|
||||
if (!area.isSpawnBreeding()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "BUILD_IRONGOLEM":
|
||||
case "BUILD_SNOWMAN":
|
||||
case "BUILD_WITHER":
|
||||
case "CUSTOM":
|
||||
}
|
||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
||||
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "SPAWNER":
|
||||
}
|
||||
case "SPAWNER" -> {
|
||||
if (!area.isMobSpawnerSpawning()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Plot plot = area.getOwnedPlotAbs(location);
|
||||
if (plot == null) {
|
||||
|
@ -44,7 +44,9 @@ import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import com.plotsquared.core.util.PlotFlagUtil;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.TileState;
|
||||
@ -176,59 +178,41 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
CreatureSpawnEvent.SpawnReason reason = event.getReason();
|
||||
switch (reason.toString()) {
|
||||
case "DISPENSE_EGG":
|
||||
case "EGG":
|
||||
case "OCELOT_BABY":
|
||||
case "SPAWNER_EGG":
|
||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
||||
if (!area.isSpawnEggs()) {
|
||||
event.setShouldAbortSpawn(true);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "REINFORCEMENTS":
|
||||
case "NATURAL":
|
||||
case "MOUNT":
|
||||
case "PATROL":
|
||||
case "RAID":
|
||||
case "SHEARED":
|
||||
case "SILVERFISH_BLOCK":
|
||||
case "ENDER_PEARL":
|
||||
case "TRAP":
|
||||
case "VILLAGE_DEFENSE":
|
||||
case "VILLAGE_INVASION":
|
||||
case "BEEHIVE":
|
||||
case "CHUNK_GEN":
|
||||
}
|
||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> {
|
||||
if (!area.isMobSpawning()) {
|
||||
event.setShouldAbortSpawn(true);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "BREEDING":
|
||||
}
|
||||
case "BREEDING" -> {
|
||||
if (!area.isSpawnBreeding()) {
|
||||
event.setShouldAbortSpawn(true);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "BUILD_IRONGOLEM":
|
||||
case "BUILD_SNOWMAN":
|
||||
case "BUILD_WITHER":
|
||||
case "CUSTOM":
|
||||
}
|
||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
||||
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
|
||||
event.setShouldAbortSpawn(true);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "SPAWNER":
|
||||
}
|
||||
case "SPAWNER" -> {
|
||||
if (!area.isMobSpawnerSpawning()) {
|
||||
event.setShouldAbortSpawn(true);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
Plot plot = location.getOwnedPlotAbs();
|
||||
if (plot == null) {
|
||||
@ -302,7 +286,7 @@ public class PaperListener implements Listener {
|
||||
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
|
||||
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
event.setBuild(false);
|
||||
@ -339,7 +323,10 @@ public class PaperListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
@ -348,7 +335,10 @@ public class PaperListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
@ -358,7 +348,10 @@ public class PaperListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
@ -446,9 +439,11 @@ public class PaperListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
|
||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
||||
boolean defaultValue) {
|
||||
private boolean getBooleanFlagValue(
|
||||
@NonNull FlagContainer container,
|
||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
||||
boolean defaultValue
|
||||
) {
|
||||
BooleanFlag<?> flag = container.getFlag(flagClass);
|
||||
return flag == null ? defaultValue : flag.getValue();
|
||||
}
|
||||
|
@ -1,91 +0,0 @@
|
||||
/*
|
||||
* PlotSquared, a land and world management plugin for Minecraft.
|
||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||
* Copyright (C) IntellectualSites team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import org.bukkit.block.Banner;
|
||||
import org.bukkit.block.Beacon;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.CommandBlock;
|
||||
import org.bukkit.block.Comparator;
|
||||
import org.bukkit.block.Conduit;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.block.DaylightDetector;
|
||||
import org.bukkit.block.EnchantingTable;
|
||||
import org.bukkit.block.EndGateway;
|
||||
import org.bukkit.block.EnderChest;
|
||||
import org.bukkit.block.Jukebox;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.block.Structure;
|
||||
import org.bukkit.block.data.type.Bed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
* @deprecated P2 effectively no longer supports 1.13
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.10.4")
|
||||
public class PaperListener113 extends PaperListener {
|
||||
|
||||
@Inject
|
||||
public PaperListener113(@NonNull PlotAreaManager plotAreaManager) {
|
||||
super(plotAreaManager);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent event) {
|
||||
if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) {
|
||||
return;
|
||||
}
|
||||
BlockState state = event.getBlock().getState(false);
|
||||
if (!(state instanceof Banner || state instanceof Beacon || state instanceof Bed || state instanceof CommandBlock
|
||||
|| state instanceof Comparator || state instanceof Conduit || state instanceof Container || state instanceof CreatureSpawner
|
||||
|| state instanceof DaylightDetector || state instanceof EnchantingTable || state instanceof EnderChest || state instanceof EndGateway
|
||||
|| state instanceof Jukebox || state instanceof Sign || state instanceof Skull || state instanceof Structure)) {
|
||||
return;
|
||||
}
|
||||
final Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||
final PlotArea plotArea = location.getPlotArea();
|
||||
if (plotArea == null) {
|
||||
return;
|
||||
}
|
||||
final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length;
|
||||
if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) {
|
||||
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
event.setBuild(false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -77,12 +77,13 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.FluidCollisionMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
@ -272,8 +273,7 @@ public class PlayerEventListener implements Listener {
|
||||
Plot plot = plotPlayer.getCurrentPlot();
|
||||
// Check WorldEdit
|
||||
switch (parts[0]) {
|
||||
case "up":
|
||||
case "worldedit:up":
|
||||
case "up", "worldedit:up" -> {
|
||||
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission(
|
||||
Permission.PERMISSION_ADMIN_BUILD_OTHER,
|
||||
true
|
||||
@ -281,6 +281,7 @@ public class PlayerEventListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (plot == null && !area.isRoadFlags()) {
|
||||
return;
|
||||
@ -398,11 +399,15 @@ public class PlayerEventListener implements Listener {
|
||||
&& PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
|
||||
Caption boundary = TranslatableCaption.of("update.update_boundary");
|
||||
Caption updateNotification = TranslatableCaption.of("update.update_notification");
|
||||
Template internalVersion = Template.of("p2version", UpdateUtility.internalVersion.versionString());
|
||||
Template spigotVersion = Template.of("spigotversion", UpdateUtility.spigotVersion);
|
||||
Template downloadUrl = Template.of("downloadurl", "https://www.spigotmc.org/resources/77506/updates");
|
||||
pp.sendMessage(boundary);
|
||||
pp.sendMessage(updateNotification, internalVersion, spigotVersion, downloadUrl);
|
||||
pp.sendMessage(
|
||||
updateNotification,
|
||||
TagResolver.builder()
|
||||
.tag("p2version", Tag.inserting(Component.text(UpdateUtility.internalVersion.versionString())))
|
||||
.tag("spigotversion", Tag.inserting(Component.text(UpdateUtility.spigotVersion)))
|
||||
.tag("downloadurl", Tag.preProcessParsed("https://www.spigotmc.org/resources/77506/updates"))
|
||||
.build()
|
||||
);
|
||||
pp.sendMessage(boundary);
|
||||
}
|
||||
}
|
||||
@ -454,7 +459,7 @@ public class PlayerEventListener implements Listener {
|
||||
.equals(BukkitUtil.adaptComplete(to)))) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("deny.no_enter"),
|
||||
Template.of("plot", plot.toString())
|
||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -567,10 +572,14 @@ public class PlayerEventListener implements Listener {
|
||||
if (now == null) {
|
||||
try (final MetaDataAccess<Boolean> kickAccess =
|
||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
false)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
|
||||
)
|
||||
);
|
||||
this.tmpTeleport = false;
|
||||
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
||||
@ -588,7 +597,7 @@ public class PlayerEventListener implements Listener {
|
||||
} else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("deny.no_enter"),
|
||||
Template.of("plot", now.toString())
|
||||
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
|
||||
);
|
||||
this.tmpTeleport = false;
|
||||
to.setX(from.getBlockX());
|
||||
@ -657,10 +666,14 @@ public class PlayerEventListener implements Listener {
|
||||
if (plot == null) {
|
||||
try (final MetaDataAccess<Boolean> kickAccess =
|
||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
||||
false)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
|
||||
)
|
||||
);
|
||||
this.tmpTeleport = false;
|
||||
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
||||
@ -678,7 +691,7 @@ public class PlayerEventListener implements Listener {
|
||||
} else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("deny.no_enter"),
|
||||
Template.of("plot", plot.toString())
|
||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
||||
);
|
||||
this.tmpTeleport = false;
|
||||
player.teleport(from);
|
||||
@ -762,46 +775,34 @@ public class PlayerEventListener implements Listener {
|
||||
PlotId id = plot.getId();
|
||||
String worldName = plot.getWorldName();
|
||||
Caption msg = TranslatableCaption.of("chat.plot_chat_format");
|
||||
Template msgTemplate;
|
||||
Template worldNameTemplate = Template.of("world", worldName);
|
||||
Template plotTemplate = Template.of("plot_id", id.toString());
|
||||
Template senderTemplate = Template.of("sender", sender);
|
||||
// If we do/don't want colour, we need to be careful about how to go about it, as players could attempt either <gold></gold> or &6 etc.
|
||||
// In both cases, we want to use a Component Template to ensure that the player cannot use any placeholders in their message on purpose
|
||||
// or accidentally, as component templates are done at the end. We also need to deserialize from legacy color codes to a Component if
|
||||
// allowing colour.
|
||||
TagResolver.Builder builder = TagResolver.builder();
|
||||
builder.tag("world", Tag.inserting(Component.text(worldName)));
|
||||
builder.tag("plot_id", Tag.inserting(Component.text(id.toString())));
|
||||
builder.tag("sender", Tag.inserting(Component.text(sender)));
|
||||
if (plotPlayer.hasPermission("plots.chat.color")) {
|
||||
msgTemplate = Template
|
||||
.of(
|
||||
"msg",
|
||||
BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes(
|
||||
'&',
|
||||
message
|
||||
))
|
||||
);
|
||||
builder.tag("msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
|
||||
message,
|
||||
TagResolver.resolver(StandardTags.color(), StandardTags.gradient(),
|
||||
StandardTags.rainbow(), StandardTags.decorations()
|
||||
)
|
||||
)));
|
||||
} else {
|
||||
msgTemplate = Template.of("msg", BukkitUtil.MINI_MESSAGE.deserialize(
|
||||
ChatColor.stripColor(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(Component.text(message)))));
|
||||
builder.tag("msg", Tag.inserting(Component.text(message)));
|
||||
}
|
||||
for (PlotPlayer<?> receiver : plotRecipients) {
|
||||
receiver.sendMessage(msg, worldNameTemplate, msgTemplate, plotTemplate, senderTemplate);
|
||||
receiver.sendMessage(msg, builder.build());
|
||||
}
|
||||
if (!spies.isEmpty()) {
|
||||
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
||||
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
|
||||
Template spysenderTemplate = Template.of("sender", sender);
|
||||
Template spymessageTemplate = Template.of("msg", Component.text(message));
|
||||
for (PlotPlayer<?> player : spies) {
|
||||
player.sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate, spymessageTemplate);
|
||||
player.sendMessage(spymsg, builder.tag("message", Tag.inserting(Component.text(message))).build());
|
||||
}
|
||||
}
|
||||
if (Settings.Chat.LOG_PLOTCHAT_TO_CONSOLE) {
|
||||
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
||||
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
|
||||
Template spysenderTemplate = Template.of("sender", sender);
|
||||
Template spymessageTemplate = Template.of("msg", Component.text(message));
|
||||
ConsolePlayer.getConsole().sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate,
|
||||
spymessageTemplate
|
||||
ConsolePlayer.getConsole().sendMessage(
|
||||
spymsg,
|
||||
builder.tag("message", Tag.inserting(Component.text(message))).build()
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -945,7 +946,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
||||
)
|
||||
);
|
||||
cancelled = true;
|
||||
}
|
||||
@ -953,7 +957,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
||||
)
|
||||
);
|
||||
cancelled = true;
|
||||
}
|
||||
@ -963,7 +970,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
||||
)
|
||||
);
|
||||
cancelled = true;
|
||||
}
|
||||
@ -1002,7 +1012,10 @@ public class PlayerEventListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
||||
)
|
||||
);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
@ -1018,7 +1031,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission("plots.admin.interact.unowned")) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
||||
)
|
||||
);
|
||||
e.setCancelled(true);
|
||||
}
|
||||
@ -1033,7 +1049,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
||||
)
|
||||
);
|
||||
e.setCancelled(true);
|
||||
plot.debug(pp.getName() + " could not interact with " + entity.getType()
|
||||
@ -1097,13 +1116,13 @@ public class PlayerEventListener implements Listener {
|
||||
Location location = BukkitUtil.adapt(block.getLocation());
|
||||
Action action = event.getAction();
|
||||
switch (action) {
|
||||
case PHYSICAL: {
|
||||
case PHYSICAL -> {
|
||||
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
|
||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||
break;
|
||||
}
|
||||
|
||||
//todo rearrange the right click code. it is all over the place.
|
||||
case RIGHT_CLICK_BLOCK: {
|
||||
case RIGHT_CLICK_BLOCK -> {
|
||||
Material blockType = block.getType();
|
||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||
@ -1125,21 +1144,16 @@ public class PlayerEventListener implements Listener {
|
||||
|
||||
// in the following, lb needs to have the material of the item in hand i.e. type
|
||||
switch (type.toString()) {
|
||||
case "REDSTONE":
|
||||
case "STRING":
|
||||
case "PUMPKIN_SEEDS":
|
||||
case "MELON_SEEDS":
|
||||
case "COCOA_BEANS":
|
||||
case "WHEAT_SEEDS":
|
||||
case "BEETROOT_SEEDS":
|
||||
case "SWEET_BERRIES":
|
||||
case "GLOW_BERRIES":
|
||||
case "REDSTONE", "STRING", "PUMPKIN_SEEDS", "MELON_SEEDS", "COCOA_BEANS", "WHEAT_SEEDS", "BEETROOT_SEEDS",
|
||||
"SWEET_BERRIES", "GLOW_BERRIES" -> {
|
||||
return;
|
||||
default:
|
||||
}
|
||||
default -> {
|
||||
//eventType = PlayerBlockEventType.PLACE_BLOCK;
|
||||
if (type.isBlock()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (PaperLib.isPaper()) {
|
||||
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
|
||||
@ -1160,7 +1174,7 @@ public class PlayerEventListener implements Listener {
|
||||
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
|
||||
eventType = PlayerBlockEventType.PLACE_MISC;
|
||||
}
|
||||
if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
|
||||
if (org.bukkit.Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
|
||||
eventType = PlayerBlockEventType.PLACE_VEHICLE;
|
||||
break;
|
||||
}
|
||||
@ -1172,9 +1186,8 @@ public class PlayerEventListener implements Listener {
|
||||
eventType = PlayerBlockEventType.READ;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LEFT_CLICK_BLOCK: {
|
||||
case LEFT_CLICK_BLOCK -> {
|
||||
Material blockType = block.getType();
|
||||
|
||||
// todo: when the code above is rearranged, it would be great to beautify this as well.
|
||||
@ -1185,10 +1198,10 @@ public class PlayerEventListener implements Listener {
|
||||
|
||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
default -> {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
||||
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
||||
@ -1260,7 +1273,7 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (!plot.hasOwner()) {
|
||||
@ -1269,7 +1282,10 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (!plot.isAdded(pp.getUUID())) {
|
||||
@ -1278,7 +1294,10 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||
@ -1325,7 +1344,7 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (!plot.hasOwner()) {
|
||||
@ -1334,7 +1353,10 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||
@ -1343,7 +1365,10 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||
@ -1375,7 +1400,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1384,7 +1412,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1395,7 +1426,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1424,7 +1458,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1432,7 +1469,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1443,7 +1483,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
plot.debug(p.getName()
|
||||
@ -1464,7 +1507,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1473,7 +1519,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
plot.debug(player.getName()
|
||||
@ -1505,7 +1554,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1513,7 +1565,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1571,7 +1626,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1595,7 +1653,10 @@ public class PlayerEventListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -1604,7 +1665,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@ -1618,7 +1682,10 @@ public class PlayerEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)
|
||||
)
|
||||
);
|
||||
event.setCancelled(true);
|
||||
plot.debug(pp.getName()
|
||||
|
@ -31,7 +31,8 @@ import com.plotsquared.core.plot.PlotHandler;
|
||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import com.plotsquared.core.util.PlotFlagUtil;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -110,7 +111,10 @@ public class ProjectileEventListener implements Listener {
|
||||
)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
@ -119,7 +123,10 @@ public class ProjectileEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
@ -129,7 +136,10 @@ public class ProjectileEventListener implements Listener {
|
||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||
pp.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
|
||||
)
|
||||
);
|
||||
entity.remove();
|
||||
event.setCancelled(true);
|
||||
|
@ -1,63 +0,0 @@
|
||||
/*
|
||||
* PlotSquared, a land and world management plugin for Minecraft.
|
||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||
* Copyright (C) IntellectualSites team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.plotsquared.bukkit.managers;
|
||||
|
||||
/*
|
||||
import com.google.inject.Singleton;
|
||||
import org.bukkit.World;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import se.hyperver.hyperverse.Hyperverse;
|
||||
import se.hyperver.hyperverse.world.WorldConfiguration;
|
||||
import se.hyperver.hyperverse.world.WorldConfigurationBuilder;
|
||||
import se.hyperver.hyperverse.world.WorldFeatures;
|
||||
import se.hyperver.hyperverse.world.WorldType;
|
||||
|
||||
Hyperverse implementation is currently put on ice until Hyperverse is released on a stable line and deployed to the central
|
||||
repository.
|
||||
|
||||
@Singleton
|
||||
public class HyperverseWorldManager extends BukkitWorldManager {
|
||||
|
||||
@Override
|
||||
public @Nullable World handleWorldCreation(@NonNull String worldName, @Nullable String generator) {
|
||||
// First let Bukkit register the world
|
||||
this.setGenerator(worldName, generator);
|
||||
// Create the world
|
||||
final WorldConfigurationBuilder worldConfigurationBuilder = WorldConfiguration.builder()
|
||||
.setName(worldName).setType(WorldType.OVER_WORLD);
|
||||
if (generator != null) {
|
||||
worldConfigurationBuilder.setGenerator(generator).setWorldFeatures(WorldFeatures.FLATLAND);
|
||||
}
|
||||
try {
|
||||
return Hyperverse.getApi().createWorld(worldConfigurationBuilder.createWorldConfiguration())
|
||||
.getBukkitWorld();
|
||||
} catch (final Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "bukkit-hyperverse";
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
@ -52,7 +52,7 @@ public class MVdWPlaceholders {
|
||||
|
||||
@Subscribe
|
||||
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
||||
this.addPlaceholder(event.getPlaceholder());
|
||||
this.addPlaceholder(event.placeholder());
|
||||
}
|
||||
|
||||
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
||||
|
@ -43,7 +43,7 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
|
||||
*/
|
||||
public BukkitOfflinePlayer(
|
||||
final @NonNull OfflinePlayer player, final @NonNull
|
||||
PermissionHandler permissionHandler
|
||||
PermissionHandler permissionHandler
|
||||
) {
|
||||
this.player = player;
|
||||
this.permissionProfile = permissionHandler.getPermissionProfile(this)
|
||||
|
@ -71,31 +71,11 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
||||
* @param eventDispatcher EventDispatcher instance
|
||||
* @param player Bukkit player instance
|
||||
* @param permissionHandler PermissionHandler instance
|
||||
*
|
||||
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||
* This method will be made private in a future release.
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.10.9")
|
||||
public BukkitPlayer(
|
||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull Player player, final @NonNull PermissionHandler permissionHandler
|
||||
) {
|
||||
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param plotAreaManager PlotAreaManager instance
|
||||
* @param eventDispatcher EventDispatcher instance
|
||||
* @param player Bukkit player instance
|
||||
* @param permissionHandler PermissionHandler instance
|
||||
*
|
||||
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||
* This method will be made private in a future release.
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.10.9")
|
||||
public BukkitPlayer(
|
||||
final @NonNull PlotAreaManager plotAreaManager, final @NonNull
|
||||
EventDispatcher eventDispatcher, final @NonNull Player player,
|
||||
BukkitPlayer(
|
||||
final @NonNull PlotAreaManager plotAreaManager,
|
||||
final @NonNull EventDispatcher eventDispatcher,
|
||||
final @NonNull Player player,
|
||||
final boolean realPlayer,
|
||||
final @NonNull PermissionHandler permissionHandler
|
||||
) {
|
||||
|
@ -54,7 +54,6 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public BukkitPlayer getPlayer(final @NonNull Player object) {
|
||||
if (object.getUniqueId().version() == 2) { // not a real player
|
||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, object, false, this.permissionHandler);
|
||||
@ -66,13 +65,12 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) {
|
||||
final Player player = Bukkit.getPlayer(uuid);
|
||||
if (player == null || !player.isOnline()) {
|
||||
throw new NoSuchPlayerException(uuid);
|
||||
}
|
||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, this.permissionHandler);
|
||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, false, this.permissionHandler);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -270,7 +270,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
||||
if (getChunkObject() instanceof Chunk chunkObject) {
|
||||
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
||||
} else {
|
||||
existing = getBukkitWorld().getBlockAt(x, y, z);
|
||||
existing = getBukkitWorld().getBlockAt(x, y, z);
|
||||
}
|
||||
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
|
||||
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
|
||||
|
@ -24,7 +24,7 @@ import com.plotsquared.bukkit.util.BukkitBlockUtil;
|
||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||
import com.plotsquared.core.location.ChunkWrapper;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import com.plotsquared.core.util.ChunkUtil;
|
||||
import com.plotsquared.core.util.PatternUtil;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
@ -44,8 +44,11 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Internal use only. Subject to changes at any time.
|
||||
*/
|
||||
@DoNotUse
|
||||
public class GenChunk extends ScopedQueueCoordinator {
|
||||
public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
||||
|
||||
public final Biome[] biomes;
|
||||
public BlockState[][] result;
|
||||
@ -59,7 +62,6 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
/**
|
||||
* @param minY minimum world Y, inclusive
|
||||
* @param maxY maximum world Y, inclusive
|
||||
*
|
||||
* @since 6.6.0
|
||||
*/
|
||||
public GenChunk(int minY, int maxY) {
|
||||
@ -107,9 +109,9 @@ public class GenChunk extends ScopedQueueCoordinator {
|
||||
*/
|
||||
public void setChunk(@NonNull ChunkWrapper wrap) {
|
||||
chunk = null;
|
||||
world = wrap.world;
|
||||
chunkX = wrap.x;
|
||||
chunkZ = wrap.z;
|
||||
world = wrap.world();
|
||||
chunkX = wrap.x();
|
||||
chunkZ = wrap.z();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -37,7 +37,6 @@ import org.bukkit.block.Sign;
|
||||
import org.bukkit.block.Skull;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
@ -52,15 +51,6 @@ public class StateWrapper {
|
||||
public org.bukkit.block.BlockState state = null;
|
||||
public CompoundTag tag = null;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of using WE methods for obtaining NBT, specifically by obtaining a
|
||||
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||
public StateWrapper(org.bukkit.block.BlockState state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public StateWrapper(CompoundTag tag) {
|
||||
this.tag = tag;
|
||||
}
|
||||
@ -254,26 +244,6 @@ public class StateWrapper {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a CompoundTag of the contents of a block's inventory (chest, furnace, etc.).
|
||||
*
|
||||
* @deprecated in favour of using WorldEdit methods for obtaining NBT, specifically by obtaining a
|
||||
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||
public CompoundTag getTag() {
|
||||
if (this.tag != null) {
|
||||
return this.tag;
|
||||
}
|
||||
if (this.state instanceof InventoryHolder inv) {
|
||||
ItemStack[] contents = inv.getInventory().getContents();
|
||||
Map<String, Tag> values = new HashMap<>();
|
||||
values.put("Items", new ListTag(CompoundTag.class, serializeInventory(contents)));
|
||||
return new CompoundTag(values);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
String tileid = this.tag.getString("id").toLowerCase();
|
||||
if (tileid.startsWith("minecraft:")) {
|
||||
|
@ -42,7 +42,9 @@ import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
||||
import com.plotsquared.core.util.EntityUtil;
|
||||
import com.plotsquared.core.util.entity.EntityCategories;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Creature;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -179,7 +181,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
|
||||
)
|
||||
);
|
||||
return false;
|
||||
}
|
||||
@ -191,7 +196,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
|
||||
)
|
||||
);
|
||||
if (plot != null) {
|
||||
plot.debug(player.getName()
|
||||
@ -212,7 +220,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
||||
)
|
||||
);
|
||||
if (plot != null) {
|
||||
plot.debug(player.getName() + " could not attack " + entityType
|
||||
@ -233,7 +244,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
||||
)
|
||||
);
|
||||
if (plot != null) {
|
||||
plot.debug(player.getName() + " could not attack " + entityType
|
||||
@ -246,7 +260,10 @@ public class BukkitEntityUtil {
|
||||
if (!plot.getFlag(PvpFlag.class) && !plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
|
||||
)
|
||||
);
|
||||
plot.debug(player.getName() + " could not attack " + entityType
|
||||
+ " because pve = false");
|
||||
@ -260,7 +277,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
|
||||
)
|
||||
);
|
||||
return false;
|
||||
}
|
||||
@ -277,7 +297,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
||||
)
|
||||
);
|
||||
if (plot != null) {
|
||||
plot.debug(player.getName() + " could not attack " + entityType
|
||||
@ -299,7 +322,10 @@ public class BukkitEntityUtil {
|
||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||
plotPlayer.sendMessage(
|
||||
TranslatableCaption.of("permission.no_permission_event"),
|
||||
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||
TagResolver.resolver(
|
||||
"node",
|
||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
||||
)
|
||||
);
|
||||
if (plot != null) {
|
||||
plot.debug(player.getName() + " could not attack " + entityType
|
||||
|
@ -56,7 +56,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
||||
ItemMeta meta = null;
|
||||
if (item.getName() != null) {
|
||||
meta = stack.getItemMeta();
|
||||
Component nameComponent = BukkitUtil.MINI_MESSAGE.parse(item.getName());
|
||||
Component nameComponent = BukkitUtil.MINI_MESSAGE.deserialize(item.getName());
|
||||
meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent));
|
||||
}
|
||||
if (item.getLore() != null) {
|
||||
|
@ -30,7 +30,7 @@ import com.plotsquared.core.plot.PlotArea;
|
||||
import com.plotsquared.core.plot.PlotManager;
|
||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||
import com.plotsquared.core.queue.QueueCoordinator;
|
||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||
import com.plotsquared.core.util.ChunkManager;
|
||||
import com.plotsquared.core.util.RegionManager;
|
||||
import com.plotsquared.core.util.WorldUtil;
|
||||
@ -70,7 +70,7 @@ public class BukkitRegionManager extends RegionManager {
|
||||
@Inject
|
||||
public BukkitRegionManager(
|
||||
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
||||
ProgressSubscriberFactory subscriberFactory
|
||||
ProgressSubscriberFactory subscriberFactory
|
||||
) {
|
||||
super(worldUtil, blockQueue, subscriberFactory);
|
||||
this.blockQueue = blockQueue;
|
||||
@ -257,9 +257,9 @@ public class BukkitRegionManager extends RegionManager {
|
||||
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
||||
AugmentedUtils.bypass(
|
||||
ignoreAugment,
|
||||
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
|
||||
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() {
|
||||
@Override
|
||||
public void run(ScopedQueueCoordinator value) {
|
||||
public void run(ZeroedDelegateScopedQueueCoordinator value) {
|
||||
Location min = value.getMin();
|
||||
int bx = min.getX();
|
||||
int bz = min.getZ();
|
||||
|
@ -124,7 +124,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
||||
public String setupWorld(PlotAreaBuilder builder) {
|
||||
this.updateGenerators(false);
|
||||
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().getSettingsNodes();
|
||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().settingsNodes();
|
||||
String world = builder.worldName();
|
||||
PlotAreaType type = builder.plotAreaType();
|
||||
String worldPath = "worlds." + builder.worldName();
|
||||
|
@ -45,7 +45,7 @@ import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
import io.papermc.lib.PaperLib;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@ -333,7 +333,7 @@ public class BukkitUtil extends WorldUtil {
|
||||
@SuppressWarnings("deprecation")
|
||||
public void setSign(
|
||||
final @NonNull Location location, final @NonNull Caption[] lines,
|
||||
final @NonNull Template... replacements
|
||||
final @NonNull TagResolver... replacements
|
||||
) {
|
||||
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
|
||||
PlotArea area = location.getPlotArea();
|
||||
@ -366,8 +366,9 @@ public class BukkitUtil extends WorldUtil {
|
||||
final org.bukkit.block.BlockState blockstate = block.getState();
|
||||
if (blockstate instanceof final Sign sign) {
|
||||
for (int i = 0; i < lines.length; i++) {
|
||||
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
|
||||
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
|
||||
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER.serialize(
|
||||
MINI_MESSAGE.deserialize(lines[i].getComponent(LocaleHolder.console()), replacements)
|
||||
));
|
||||
}
|
||||
sign.update(true, false);
|
||||
}
|
||||
|
@ -132,14 +132,6 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
||||
return world.hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated This method is not meant to be invoked or overridden, with no replacement.
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "6.6.0")
|
||||
protected boolean canEqual(final Object other) {
|
||||
return other instanceof BukkitWorld;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "BukkitWorld(world=" + this.world + ")";
|
||||
}
|
||||
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* PlotSquared, a land and world management plugin for Minecraft.
|
||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||
* Copyright (C) IntellectualSites team and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.plotsquared.bukkit.util;
|
||||
|
||||
import com.intellectualsites.annotations.NotPublic;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* This is a helper class which replaces occurrences of 'suggest_command' with 'run_command' in messages_%.json.
|
||||
* MiniMessage changed the syntax between major releases. To warrant a smooth upgrade, we attempt to replace any occurrences
|
||||
* while loading PlotSquared.
|
||||
*
|
||||
* @since TODO
|
||||
*/
|
||||
@NotPublic
|
||||
public class TranslationUpdateManager {
|
||||
|
||||
public static void upgradeTranslationFile() throws IOException {
|
||||
String searchText = "suggest_command";
|
||||
String replacementText = "run_command";
|
||||
|
||||
try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
|
||||
paths
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(p -> p.getFileName().toString().matches("messages_[a-z]{2}\\.json"))
|
||||
.forEach(p -> replaceInFile(p, searchText, replacementText));
|
||||
}
|
||||
}
|
||||
|
||||
private static void replaceInFile(Path path, String searchText, String replacementText) {
|
||||
try {
|
||||
String content = Files.readString(path);
|
||||
if (content.contains(searchText)) {
|
||||
content = content.replaceAll(searchText, replacementText);
|
||||
Files.writeString(path, content);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -54,7 +54,8 @@ public class UpdateUtility implements Listener {
|
||||
internalVersion = PlotSquared.get().getVersion();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||
@SuppressWarnings({"deprecation", "DefaultCharset"})
|
||||
// Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||
public void updateChecker() {
|
||||
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
||||
try {
|
||||
|
@ -94,11 +94,6 @@ public class FaweRegionManager extends BukkitRegionManager {
|
||||
delegate.swap(pos1, pos2, swapPos, whenDone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, String world, Runnable whenDone) {
|
||||
delegate.setBiome(region, extendBiome, biome, world, whenDone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
|
||||
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);
|
||||
|
@ -111,8 +111,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
||||
try (final PreparedStatement statement = getConnection()
|
||||
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
||||
for (final UUIDMapping mapping : uuidWrappers) {
|
||||
statement.setString(1, mapping.getUuid().toString());
|
||||
statement.setString(2, mapping.getUsername());
|
||||
statement.setString(1, mapping.uuid().toString());
|
||||
statement.setString(2, mapping.username());
|
||||
statement.executeUpdate();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
|
@ -4,16 +4,16 @@ api-version: "1.13"
|
||||
version: "${version}"
|
||||
load: STARTUP
|
||||
description: "Easy, yet powerful Plot World generation and management."
|
||||
authors: [Citymonstret, Empire92, MattBDev, dordsor21, NotMyFault, SirYwell]
|
||||
authors: [ Citymonstret, Empire92, MattBDev, dordsor21, NotMyFault, SirYwell ]
|
||||
website: https://www.spigotmc.org/resources/77506/
|
||||
softdepend: [Vault, PlaceholderAPI, Essentials, LuckPerms, BungeePerms, MVdWPlaceholderAPI]
|
||||
loadbefore: [MultiWorld, Multiverse-Core]
|
||||
depend: [WorldEdit]
|
||||
softdepend: [ Vault, PlaceholderAPI, Essentials, LuckPerms, BungeePerms, MVdWPlaceholderAPI ]
|
||||
loadbefore: [ MultiWorld, Multiverse-Core ]
|
||||
depend: [ WorldEdit ]
|
||||
database: false
|
||||
commands:
|
||||
plots:
|
||||
description: Plot command.
|
||||
aliases: [p,plot,ps,plotsquared,p2,2,plotme]
|
||||
aliases: [ p,plot,ps,plotsquared,p2,2,plotme ]
|
||||
permission: plots.use
|
||||
permission-message: "You are lacking the permission node 'plots.use'"
|
||||
permissions:
|
||||
|
Reference in New Issue
Block a user