Compare commits

..

1 Commits

Author SHA1 Message Date
dordsor21
8a7c659992 refactor: perform various code cleanup 2023-01-17 14:02:11 +00:00
125 changed files with 1205 additions and 1594 deletions

View File

@@ -2,6 +2,7 @@ name: Announce release on discord
on: on:
release: release:
types: [published] types: [published]
jobs: jobs:
send_announcement: send_announcement:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -11,7 +12,7 @@ jobs:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
DISCORD_USERNAME: PlotSquared Release DISCORD_USERNAME: PlotSquared Release
DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png
uses: Ilshidur/action-discord@08d9328877d6954120eef2b07abbc79249bb6210 # ratchet:Ilshidur/action-discord@0.3.2 uses: Ilshidur/action-discord@0.3.2
with: with:
args: | args: |
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>" "<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"

View File

@@ -1,17 +1,19 @@
name: Build PR name: Build PR
on: [pull_request]
on: [ pull_request ]
jobs: jobs:
build_pr: build_pr:
if: github.repository_owner == 'IntellectualSites' if: github.repository_owner == 'IntellectualSites'
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ ubuntu-latest, windows-latest, macos-latest ]
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Validate Gradle Wrapper - name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1 uses: gradle/wrapper-validation-action@v1
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:

View File

@@ -1,8 +1,10 @@
name: build name: build
on: on:
push: push:
branches: branches:
- v7 - v7
jobs: jobs:
build: build:
if: github.repository_owner == 'IntellectualSites' if: github.repository_owner == 'IntellectualSites'
@@ -11,7 +13,7 @@ jobs:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Validate Gradle Wrapper - name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1 uses: gradle/wrapper-validation-action@v1
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
@@ -42,14 +44,9 @@ jobs:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
- name: Publish core javadoc - name: Publish core javadoc
<<<<<<< HEAD
# if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}} # if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}}
if: ${{ runner.os == 'Linux' && env.STATUS == 'snapshot' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}} if: ${{ runner.os == 'Linux' && env.STATUS == 'snapshot' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}}
uses: cpina/github-action-push-to-another-repository@main uses: cpina/github-action-push-to-another-repository@main
=======
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 # main
>>>>>>> v6
env: env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with: with:
@@ -62,7 +59,7 @@ jobs:
- name: Publish bukkit javadoc - name: Publish bukkit javadoc
# if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}} # if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}}
if: ${{ runner.os == 'Linux' && env.STATUS == 'snapshot' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}} if: ${{ runner.os == 'Linux' && env.STATUS == 'snapshot' && github.event_name == 'push' && github.ref == 'refs/heads/v7'}}
uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 # main uses: cpina/github-action-push-to-another-repository@main
env: env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with: with:

View File

@@ -1,4 +1,5 @@
name: "CodeQL" name: "CodeQL"
on: on:
push: push:
branches: [ v7 ] branches: [ v7 ]
@@ -14,18 +15,23 @@ jobs:
actions: read actions: read
contents: read contents: read
security-events: write security-events: write
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
language: ['java'] language: [ 'java' ]
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 uses: github/codeql-action/init@v2
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2 uses: github/codeql-action/analyze@v2

View File

@@ -1,12 +1,14 @@
name: draft release name: draft release
on: on:
push: push:
branches: branches:
- v6 - v6
pull_request: pull_request:
types: [opened, reopened, synchronize] types: [ opened, reopened, synchronize ]
pull_request_target: pull_request_target:
types: [opened, reopened, synchronize] types: [ opened, reopened, synchronize ]
jobs: jobs:
update_release_draft: update_release_draft:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}

View File

@@ -49,8 +49,8 @@ import com.plotsquared.bukkit.player.BukkitPlayerManager;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.BukkitWorld; import com.plotsquared.bukkit.util.BukkitWorld;
import com.plotsquared.bukkit.util.SetGenCB; import com.plotsquared.bukkit.util.SetGenCB;
import com.plotsquared.bukkit.util.UpdateUtility;
import com.plotsquared.bukkit.util.TranslationUpdateManager; 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.BukkitTaskManager;
import com.plotsquared.bukkit.util.task.PaperTimeConverter; import com.plotsquared.bukkit.util.task.PaperTimeConverter;
import com.plotsquared.bukkit.util.task.SpigotTimeConverter; import com.plotsquared.bukkit.util.task.SpigotTimeConverter;
@@ -72,8 +72,6 @@ import com.plotsquared.core.configuration.Storage;
import com.plotsquared.core.configuration.caption.ChatFormatter; import com.plotsquared.core.configuration.caption.ChatFormatter;
import com.plotsquared.core.configuration.file.YamlConfiguration; import com.plotsquared.core.configuration.file.YamlConfiguration;
import com.plotsquared.core.database.DBFunc; import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.events.RemoveRoadEntityEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.generator.GeneratorWrapper; import com.plotsquared.core.generator.GeneratorWrapper;
import com.plotsquared.core.generator.IndependentPlotGenerator; import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.generator.SingleWorldGenerator; import com.plotsquared.core.generator.SingleWorldGenerator;
@@ -112,7 +110,6 @@ import com.plotsquared.core.uuid.CacheUUIDService;
import com.plotsquared.core.uuid.UUIDPipeline; import com.plotsquared.core.uuid.UUIDPipeline;
import com.plotsquared.core.uuid.offline.OfflineModeUUIDService; import com.plotsquared.core.uuid.offline.OfflineModeUUIDService;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@@ -296,7 +293,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.injector.injectMembers(this); this.injector.injectMembers(this);
try { try {
this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile(); this.injector.getInstance(TranslationUpdateManager.class);
TranslationUpdateManager.upgradeTranslationFile();
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -821,7 +819,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
this.removeRoadEntity(entity, iterator); iterator.remove();
entity.remove();
} }
continue; continue;
} }
@@ -834,7 +833,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
this.removeRoadEntity(entity, iterator); iterator.remove();
entity.remove();
} }
} }
continue; continue;
@@ -844,7 +844,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
case "DROPPED_ITEM": case "DROPPED_ITEM":
if (Settings.Enabled_Components.KILL_ROAD_ITEMS if (Settings.Enabled_Components.KILL_ROAD_ITEMS
&& plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) { && plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) {
this.removeRoadEntity(entity, iterator); entity.remove();
} }
// dropped item // dropped item
continue; continue;
@@ -875,7 +875,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
this.removeRoadEntity(entity, iterator); iterator.remove();
entity.remove();
} }
} }
} }
@@ -980,7 +981,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
this.removeRoadEntity(entity, iterator); iterator.remove();
entity.remove();
} }
} }
} else { } else {
@@ -991,7 +993,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
if (entity.hasMetadata("ps-tmp-teleport")) { if (entity.hasMetadata("ps-tmp-teleport")) {
continue; continue;
} }
this.removeRoadEntity(entity, iterator); iterator.remove();
entity.remove();
} }
} }
} }
@@ -1005,20 +1008,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}), TaskTime.seconds(1L)); }), TaskTime.seconds(1L));
} }
private void removeRoadEntity(Entity entity, Iterator<Entity> entityIterator) {
RemoveRoadEntityEvent event = eventDispatcher.callRemoveRoadEntity(BukkitAdapter.adapt(entity));
if (event.getEventResult() == Result.DENY) {
return;
}
entityIterator.remove();
entity.remove();
}
@Override @Override
public @Nullable public @Nullable ChunkGenerator getDefaultWorldGenerator(
final ChunkGenerator getDefaultWorldGenerator(
final @NonNull String worldName, final @NonNull String worldName,
final @Nullable String id final @Nullable String id
) { ) {
@@ -1185,9 +1176,17 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
public @NonNull String worldEditImplementations() { public @NonNull String worldEditImplementations() {
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) { 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) { } 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()); msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
} else { } else {
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion()); msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());

View File

@@ -18,14 +18,9 @@
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;
import org.bukkit.entity.Horse;
class HorseStats { class HorseStats {
double jump; double jump;
boolean chest; boolean chest;
Horse.Variant variant;
Horse.Color color;
Horse.Style style;
} }

View File

@@ -101,26 +101,50 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.noGravity = true; this.noGravity = true;
} }
switch (entity.getType().toString()) { switch (entity.getType().toString()) {
case "BOAT" -> { case "BOAT":
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType()); this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
return; return;
} case "ARROW":
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL", case "EGG":
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER", case "ENDER_CRYSTAL":
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION", case "ENDER_PEARL":
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD", case "ENDER_SIGNAL":
"TRIDENT", "LLAMA_SPIT" -> { 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":
// Do this stuff later // Do this stuff later
return; return;
}
// MISC // // MISC //
case "DROPPED_ITEM" -> { case "DROPPED_ITEM":
Item item = (Item) entity; Item item = (Item) entity;
this.stack = item.getItemStack(); this.stack = item.getItemStack();
return; return;
} case "ITEM_FRAME":
case "ITEM_FRAME" -> {
this.x = Math.floor(this.getX()); this.x = Math.floor(this.getX());
this.y = Math.floor(this.getY()); this.y = Math.floor(this.getY());
this.z = Math.floor(this.getZ()); this.z = Math.floor(this.getZ());
@@ -128,8 +152,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation()); this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
this.stack = itemFrame.getItem().clone(); this.stack = itemFrame.getItem().clone();
return; return;
} case "PAINTING":
case "PAINTING" -> {
this.x = Math.floor(this.getX()); this.x = Math.floor(this.getX());
this.y = Math.floor(this.getY()); this.y = Math.floor(this.getY());
this.z = Math.floor(this.getZ()); this.z = Math.floor(this.getZ());
@@ -142,43 +165,41 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
this.dataString = art.name(); this.dataString = art.name();
return; return;
}
// END MISC // // END MISC //
// INVENTORY HOLDER // // INVENTORY HOLDER //
case "MINECART_CHEST", "MINECART_HOPPER" -> { case "MINECART_CHEST":
case "MINECART_HOPPER":
storeInventory((InventoryHolder) entity); storeInventory((InventoryHolder) entity);
return; return;
}
// START LIVING ENTITY // // START LIVING ENTITY //
// START AGEABLE // // START AGEABLE //
// START TAMEABLE // // START TAMEABLE //
case "HORSE", "DONKEY", "LLAMA", "MULE", "SKELETON_HORSE" -> { case "HORSE":
case "DONKEY":
case "LLAMA":
case "MULE":
case "SKELETON_HORSE":
AbstractHorse horse = (AbstractHorse) entity; AbstractHorse horse = (AbstractHorse) entity;
this.horse = new HorseStats(); this.horse = new HorseStats();
this.horse.jump = horse.getJumpStrength(); this.horse.jump = horse.getJumpStrength();
if (horse instanceof ChestedHorse horse1) { if (horse instanceof ChestedHorse horse1) {
this.horse.chest = horse1.isCarryingChest(); this.horse.chest = horse1.isCarryingChest();
} }
//todo these horse features need fixing
//this.horse.variant = horse.getVariant();
//this.horse.style = horse.getStyle();
//this.horse.color = horse.getColor();
storeTameable(horse); storeTameable(horse);
storeAgeable(horse); storeAgeable(horse);
storeLiving(horse); storeLiving(horse);
storeInventory(horse); storeInventory(horse);
return; return;
}
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case "WOLF", "OCELOT" -> { case "WOLF":
case "OCELOT":
storeTameable((Tameable) entity); storeTameable((Tameable) entity);
storeAgeable((Ageable) entity); storeAgeable((Ageable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
}
// END TAMEABLE // // END TAMEABLE //
//todo fix sheep //todo fix sheep
case "SHEEP" -> { case "SHEEP":
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
if (sheep.isSheared()) { if (sheep.isSheared()) {
this.dataByte = (byte) 1; this.dataByte = (byte) 1;
@@ -189,20 +210,23 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
storeAgeable(sheep); storeAgeable(sheep);
storeLiving(sheep); storeLiving(sheep);
return; return;
} case "VILLAGER":
case "VILLAGER", "CHICKEN", "COW", "MUSHROOM_COW", "PIG", "TURTLE", "POLAR_BEAR" -> { case "CHICKEN":
case "COW":
case "MUSHROOM_COW":
case "PIG":
case "TURTLE":
case "POLAR_BEAR":
storeAgeable((Ageable) entity); storeAgeable((Ageable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
} case "RABBIT":
case "RABBIT" -> {
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType()); this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
storeAgeable((Ageable) entity); storeAgeable((Ageable) entity);
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
}
// END AGEABLE // // END AGEABLE //
case "ARMOR_STAND" -> { case "ARMOR_STAND":
ArmorStand stand = (ArmorStand) entity; ArmorStand stand = (ArmorStand) entity;
this.inventory = this.inventory =
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(), new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
@@ -210,30 +234,37 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
stand.getBoots().clone()}; stand.getBoots().clone()};
storeLiving(stand); storeLiving(stand);
this.stand = new ArmorStandStats(); this.stand = new ArmorStandStats();
EulerAngle head = stand.getHeadPose(); EulerAngle head = stand.getHeadPose();
this.stand.head[0] = (float) head.getX(); this.stand.head[0] = (float) head.getX();
this.stand.head[1] = (float) head.getY(); this.stand.head[1] = (float) head.getY();
this.stand.head[2] = (float) head.getZ(); this.stand.head[2] = (float) head.getZ();
EulerAngle body = stand.getBodyPose(); EulerAngle body = stand.getBodyPose();
this.stand.body[0] = (float) body.getX(); this.stand.body[0] = (float) body.getX();
this.stand.body[1] = (float) body.getY(); this.stand.body[1] = (float) body.getY();
this.stand.body[2] = (float) body.getZ(); this.stand.body[2] = (float) body.getZ();
EulerAngle leftLeg = stand.getLeftLegPose(); EulerAngle leftLeg = stand.getLeftLegPose();
this.stand.leftLeg[0] = (float) leftLeg.getX(); this.stand.leftLeg[0] = (float) leftLeg.getX();
this.stand.leftLeg[1] = (float) leftLeg.getY(); this.stand.leftLeg[1] = (float) leftLeg.getY();
this.stand.leftLeg[2] = (float) leftLeg.getZ(); this.stand.leftLeg[2] = (float) leftLeg.getZ();
EulerAngle rightLeg = stand.getRightLegPose(); EulerAngle rightLeg = stand.getRightLegPose();
this.stand.rightLeg[0] = (float) rightLeg.getX(); this.stand.rightLeg[0] = (float) rightLeg.getX();
this.stand.rightLeg[1] = (float) rightLeg.getY(); this.stand.rightLeg[1] = (float) rightLeg.getY();
this.stand.rightLeg[2] = (float) rightLeg.getZ(); this.stand.rightLeg[2] = (float) rightLeg.getZ();
EulerAngle leftArm = stand.getLeftArmPose(); EulerAngle leftArm = stand.getLeftArmPose();
this.stand.leftArm[0] = (float) leftArm.getX(); this.stand.leftArm[0] = (float) leftArm.getX();
this.stand.leftArm[1] = (float) leftArm.getY(); this.stand.leftArm[1] = (float) leftArm.getY();
this.stand.leftArm[2] = (float) leftArm.getZ(); this.stand.leftArm[2] = (float) leftArm.getZ();
EulerAngle rightArm = stand.getRightArmPose(); EulerAngle rightArm = stand.getRightArmPose();
this.stand.rightArm[0] = (float) rightArm.getX(); this.stand.rightArm[0] = (float) rightArm.getX();
this.stand.rightArm[1] = (float) rightArm.getY(); this.stand.rightArm[1] = (float) rightArm.getY();
this.stand.rightArm[2] = (float) rightArm.getZ(); this.stand.rightArm[2] = (float) rightArm.getZ();
if (stand.hasArms()) { if (stand.hasArms()) {
this.stand.arms = true; this.stand.arms = true;
} }
@@ -247,37 +278,52 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.stand.small = true; this.stand.small = true;
} }
return; return;
} case "ENDERMITE":
case "ENDERMITE" -> {
return; return;
} case "BAT":
case "BAT" -> {
if (((Bat) entity).isAwake()) { if (((Bat) entity).isAwake()) {
this.dataByte = (byte) 1; this.dataByte = (byte) 1;
} else { } else {
this.dataByte = (byte) 0; this.dataByte = (byte) 0;
} }
return; return;
} case "ENDER_DRAGON":
case "ENDER_DRAGON" -> {
EnderDragon entity1 = (EnderDragon) entity; EnderDragon entity1 = (EnderDragon) entity;
this.dataByte = (byte) entity1.getPhase().ordinal(); this.dataByte = (byte) entity1.getPhase().ordinal();
return; return;
} case "SKELETON":
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", case "WITHER_SKELETON":
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", case "GUARDIAN":
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN" -> { 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":
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
return; return;
} case "IRON_GOLEM":
case "IRON_GOLEM" -> {
if (((IronGolem) entity).isPlayerCreated()) { if (((IronGolem) entity).isPlayerCreated()) {
this.dataByte = (byte) 1; this.dataByte = (byte) 1;
} else { } else {
this.dataByte = (byte) 0; this.dataByte = (byte) 0;
} }
storeLiving((LivingEntity) entity); storeLiving((LivingEntity) entity);
}
// END LIVING // // END LIVING //
} }
} }
@@ -415,15 +461,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
Entity entity; Entity entity;
switch (this.getType().toString()) { switch (this.getType().toString()) {
case "DROPPED_ITEM" -> { case "DROPPED_ITEM":
return world.dropItem(location, this.stack); return world.dropItem(location, this.stack);
} case "PLAYER":
case "PLAYER", "LEASH_HITCH" -> { case "LEASH_HITCH":
return null; return null;
} case "ITEM_FRAME":
case "ITEM_FRAME" -> entity = world.spawn(location, ItemFrame.class); entity = world.spawn(location, ItemFrame.class);
case "PAINTING" -> entity = world.spawn(location, Painting.class); break;
default -> entity = world.spawnEntity(location, this.getType()); case "PAINTING":
entity = world.spawn(location, Painting.class);
break;
default:
entity = world.spawnEntity(location, this.getType());
break;
} }
if (this.depth == 0) { if (this.depth == 0) {
return entity; return entity;
@@ -451,70 +502,91 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
entity.setGravity(false); entity.setGravity(false);
} }
switch (entity.getType().toString()) { switch (entity.getType().toString()) {
case "BOAT" -> { case "BOAT":
Boat boat = (Boat) entity; Boat boat = (Boat) entity;
boat.setWoodType(TreeSpecies.values()[dataByte]); boat.setWoodType(TreeSpecies.values()[dataByte]);
return entity; return entity;
} case "SLIME":
case "SLIME" -> {
((Slime) entity).setSize(this.dataByte); ((Slime) entity).setSize(this.dataByte);
return entity; return entity;
} case "ARROW":
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK", case "EGG":
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", case "ENDER_CRYSTAL":
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL", case "ENDER_PEARL":
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD", case "ENDER_SIGNAL":
"DRAGON_FIREBALL", "WITHER_SKULL", "MINECART_FURNACE", "LLAMA_SPIT", "TRIDENT", "UNKNOWN" -> { 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":
// Do this stuff later // Do this stuff later
return entity; return entity;
}
// MISC // // MISC //
case "ITEM_FRAME" -> { case "ITEM_FRAME":
ItemFrame itemframe = (ItemFrame) entity; ItemFrame itemframe = (ItemFrame) entity;
itemframe.setRotation(Rotation.values()[this.dataByte]); itemframe.setRotation(Rotation.values()[this.dataByte]);
itemframe.setItem(this.stack); itemframe.setItem(this.stack);
return entity; return entity;
} case "PAINTING":
case "PAINTING" -> {
Painting painting = (Painting) entity; Painting painting = (Painting) entity;
painting.setFacingDirection(BlockFace.values()[this.dataByte], true); painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
painting.setArt(Art.getByName(this.dataString), true); painting.setArt(Art.getByName(this.dataString), true);
return entity; return entity;
}
// END MISC // // END MISC //
// INVENTORY HOLDER // // INVENTORY HOLDER //
case "MINECART_CHEST", "MINECART_HOPPER" -> { case "MINECART_CHEST":
case "MINECART_HOPPER":
restoreInventory((InventoryHolder) entity); restoreInventory((InventoryHolder) entity);
return entity; return entity;
}
// START LIVING ENTITY // // START LIVING ENTITY //
// START AGEABLE // // START AGEABLE //
// START TAMEABLE // // START TAMEABLE //
case "HORSE", "LLAMA", "SKELETON_HORSE", "DONKEY", "MULE" -> { case "HORSE":
case "LLAMA":
case "SKELETON_HORSE":
case "DONKEY":
case "MULE":
AbstractHorse horse = (AbstractHorse) entity; AbstractHorse horse = (AbstractHorse) entity;
horse.setJumpStrength(this.horse.jump); horse.setJumpStrength(this.horse.jump);
if (horse instanceof ChestedHorse) { if (horse instanceof ChestedHorse) {
((ChestedHorse) horse).setCarryingChest(this.horse.chest); ((ChestedHorse) horse).setCarryingChest(this.horse.chest);
} }
//todo broken as of 1.13
//horse.setVariant(this.horse.variant);
//horse.setStyle(this.horse.style);
//horse.setColor(this.horse.color);
restoreTameable(horse); restoreTameable(horse);
restoreAgeable(horse); restoreAgeable(horse);
restoreLiving(horse); restoreLiving(horse);
restoreInventory(horse); restoreInventory(horse);
return entity; return entity;
}
// END INVENTORY HOLDER // // END INVENTORY HOLDER //
case "WOLF", "OCELOT" -> { case "WOLF":
case "OCELOT":
restoreTameable((Tameable) entity); restoreTameable((Tameable) entity);
restoreAgeable((Ageable) entity); restoreAgeable((Ageable) entity);
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
}
// END AGEABLE // // END AGEABLE //
case "SHEEP" -> { case "SHEEP":
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
if (this.dataByte == 1) { if (this.dataByte == 1) {
sheep.setSheared(true); sheep.setSheared(true);
@@ -525,22 +597,25 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
restoreAgeable(sheep); restoreAgeable(sheep);
restoreLiving(sheep); restoreLiving(sheep);
return sheep; return sheep;
} case "VILLAGER":
case "VILLAGER", "CHICKEN", "COW", "TURTLE", "POLAR_BEAR", "MUSHROOM_COW", "PIG" -> { case "CHICKEN":
case "COW":
case "TURTLE":
case "POLAR_BEAR":
case "MUSHROOM_COW":
case "PIG":
restoreAgeable((Ageable) entity); restoreAgeable((Ageable) entity);
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
}
// END AGEABLE // // END AGEABLE //
case "RABBIT" -> { case "RABBIT":
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]); ((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
} }
restoreAgeable((Ageable) entity); restoreAgeable((Ageable) entity);
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
} case "ARMOR_STAND":
case "ARMOR_STAND" -> {
// CHECK positions // CHECK positions
ArmorStand stand = (ArmorStand) entity; ArmorStand stand = (ArmorStand) entity;
if (this.inventory[0] != null) { if (this.inventory[0] != null) {
@@ -610,38 +685,56 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
} }
restoreLiving(stand); restoreLiving(stand);
return stand; return stand;
} case "BAT":
case "BAT" -> {
if (this.dataByte != 0) { if (this.dataByte != 0) {
((Bat) entity).setAwake(true); ((Bat) entity).setAwake(true);
} }
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
} case "ENDER_DRAGON":
case "ENDER_DRAGON" -> {
if (this.dataByte != 0) { if (this.dataByte != 0) {
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]); ((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
} }
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
} case "ENDERMITE":
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" -> { 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":
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
} case "IRON_GOLEM":
case "IRON_GOLEM" -> {
if (this.dataByte != 0) { if (this.dataByte != 0) {
((IronGolem) entity).setPlayerCreated(true); ((IronGolem) entity).setPlayerCreated(true);
} }
restoreLiving((LivingEntity) entity); restoreLiving((LivingEntity) entity);
return entity; return entity;
} default:
default -> {
if (Settings.DEBUG) { if (Settings.DEBUG) {
LOGGER.info("Could not identify entity: {}", entity.getType()); LOGGER.info("Could not identify entity: {}", entity.getType());
} }
return entity; return entity;
}
// END LIVING // END LIVING
} }
} }

View File

@@ -24,6 +24,7 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.location.UncheckedWorldLocation; import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator; import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
@@ -46,6 +47,17 @@ final class BlockStatePopulator extends BlockPopulator {
this.plotGenerator = plotGenerator; 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 @Override
public void populate( public void populate(
@NonNull final WorldInfo worldInfo, @NonNull final WorldInfo worldInfo,

View File

@@ -185,12 +185,6 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
world.setWaterAnimalSpawnLimit(limit); 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 @Override
public void generateNoise( public void generateNoise(
@NotNull final WorldInfo worldInfo, @NotNull final WorldInfo worldInfo,
@@ -417,7 +411,8 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
} }
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea(); PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
if (area == null) { if (area == null) {
throw new IllegalStateException(String.format("Cannot generate chunk that does not belong to a plot area. World: %s", throw new IllegalStateException(String.format(
"Cannot generate chunk that does not belong to a plot area. World: %s",
name name
)); ));
} }

View File

@@ -72,7 +72,6 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Dispenser; import org.bukkit.block.data.type.Dispenser;
import org.bukkit.block.data.type.Farmland;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Fireball; import org.bukkit.entity.Fireball;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -100,7 +99,6 @@ import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.CauldronLevelChangeEvent; import org.bukkit.event.block.CauldronLevelChangeEvent;
import org.bukkit.event.block.EntityBlockFormEvent; import org.bukkit.event.block.EntityBlockFormEvent;
import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.block.MoistureChangeEvent;
import org.bukkit.event.block.SpongeAbsorbEvent; import org.bukkit.event.block.SpongeAbsorbEvent;
import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.StructureGrowEvent;
import org.bukkit.projectiles.BlockProjectileSource; import org.bukkit.projectiles.BlockProjectileSource;
@@ -742,41 +740,6 @@ public class BlockEventListener implements Listener {
} }
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onMoistureChange(MoistureChangeEvent event) {
Block block = event.getBlock();
Location location = BukkitUtil.adapt(block.getLocation());
PlotArea area = location.getPlotArea();
if (area == null) {
return;
}
Plot plot = area.getOwnedPlot(location);
if (plot == null) {
event.setCancelled(true);
return;
}
if (block.getBlockData() instanceof Farmland farmland && event.getNewState().getBlockData() instanceof Farmland newFarmland) {
int currentMoisture = farmland.getMoisture();
int newMoisture = newFarmland.getMoisture();
// farmland gets moisturizes
if (newMoisture > currentMoisture) {
return;
}
if (plot.getFlag(SoilDryFlag.class)) {
return;
}
plot.debug("Soil could not dry because soil-dry = false");
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onChange(BlockFromToEvent event) { public void onChange(BlockFromToEvent event) {
Block fromBlock = event.getBlock(); Block fromBlock = event.getBlock();

View File

@@ -92,7 +92,11 @@ public class BlockEventListener117 implements Listener {
} }
Plot plot = location.getOwnedPlot(); 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)) { MiscInteractFlag.class)) {
if (plotPlayer != null) { if (plotPlayer != null) {
if (plot != null) { if (plot != null) {

View File

@@ -67,16 +67,6 @@ public class ChunkListener implements Listener {
private RefMethod methodGetHandleChunk; private RefMethod methodGetHandleChunk;
private RefMethod methodGetHandleWorld; private RefMethod methodGetHandleWorld;
private RefField mustSave; private RefField mustSave;
/*
private RefMethod methodGetFullChunk;
private RefMethod methodGetBukkitChunk;
private RefMethod methodGetChunkProvider;
private RefMethod methodGetVisibleMap;
private RefField worldServer;
private RefField playerChunkMap;
private RefField updatingChunks;
private RefField visibleChunks;
*/
private Chunk lastChunk; private Chunk lastChunk;
private boolean ignoreUnload = false; private boolean ignoreUnload = false;
private boolean isTrueForNotSave = true; private boolean isTrueForNotSave = true;
@@ -234,7 +224,8 @@ public class ChunkListener implements Listener {
Chunk chunk = event.getChunk(); Chunk chunk = event.getChunk();
if (Settings.Chunk_Processor.AUTO_TRIM) { if (Settings.Chunk_Processor.AUTO_TRIM) {
String world = chunk.getWorld().getName(); 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)) { if (unloadChunk(world, chunk, true)) {
return; return;
} }

View File

@@ -113,15 +113,7 @@ public class EntityEventListener implements Listener {
return; return;
} }
Entity victim = event.getEntity(); Entity victim = event.getEntity();
/*
if (victim.getType().equals(EntityType.ITEM_FRAME)) {
Plot plot = BukkitUtil.getLocation(victim).getPlot();
if (plot != null && !plot.isAdded(damager.getUniqueId())) {
event.setCancelled(true);
return;
}
}
*/
if (!BukkitEntityUtil.entityDamage(damager, victim, event.getCause())) { if (!BukkitEntityUtil.entityDamage(damager, victim, event.getCause())) {
if (event.isCancelled()) { if (event.isCancelled()) {
if (victim instanceof Ageable ageable) { if (victim instanceof Ageable ageable) {
@@ -145,37 +137,54 @@ public class EntityEventListener implements Listener {
} }
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason(); CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
switch (reason.toString()) { switch (reason.toString()) {
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> { case "DISPENSE_EGG":
case "EGG":
case "OCELOT_BABY":
case "SPAWNER_EGG":
if (!area.isSpawnEggs()) { if (!area.isSpawnEggs()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", case "REINFORCEMENTS":
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> { 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":
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "BREEDING" -> { case "BREEDING":
if (!area.isSpawnBreeding()) { if (!area.isSpawnBreeding()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> { case "BUILD_IRONGOLEM":
case "BUILD_SNOWMAN":
case "BUILD_WITHER":
case "CUSTOM":
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) { if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "SPAWNER" -> { case "SPAWNER":
if (!area.isMobSpawnerSpawning()) { if (!area.isMobSpawnerSpawning()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
} }
Plot plot = area.getOwnedPlotAbs(location); Plot plot = area.getOwnedPlotAbs(location);
if (plot == null) { if (plot == null) {

View File

@@ -43,10 +43,10 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.flag.types.BooleanFlag; import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import com.plotsquared.core.util.PlotFlagUtil;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.TileState; import org.bukkit.block.TileState;
@@ -178,41 +178,59 @@ public class PaperListener implements Listener {
} }
CreatureSpawnEvent.SpawnReason reason = event.getReason(); CreatureSpawnEvent.SpawnReason reason = event.getReason();
switch (reason.toString()) { switch (reason.toString()) {
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> { case "DISPENSE_EGG":
case "EGG":
case "OCELOT_BABY":
case "SPAWNER_EGG":
if (!area.isSpawnEggs()) { if (!area.isSpawnEggs()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> { 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":
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "BREEDING" -> { case "BREEDING":
if (!area.isSpawnBreeding()) { if (!area.isSpawnBreeding()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> { case "BUILD_IRONGOLEM":
case "BUILD_SNOWMAN":
case "BUILD_WITHER":
case "CUSTOM":
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) { if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
case "SPAWNER" -> { case "SPAWNER":
if (!area.isMobSpawnerSpawning()) { if (!area.isMobSpawnerSpawning()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} break;
} }
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
if (plot == null) { if (plot == null) {
@@ -439,9 +457,11 @@ public class PaperListener implements Listener {
} }
} }
private boolean getBooleanFlagValue(@NonNull FlagContainer container, private boolean getBooleanFlagValue(
@NonNull FlagContainer container,
@NonNull Class<? extends BooleanFlag<?>> flagClass, @NonNull Class<? extends BooleanFlag<?>> flagClass,
boolean defaultValue) { boolean defaultValue
) {
BooleanFlag<?> flag = container.getFlag(flagClass); BooleanFlag<?> flag = container.getFlag(flagClass);
return flag == null ? defaultValue : flag.getValue(); return flag == null ? defaultValue : flag.getValue();
} }

View File

@@ -0,0 +1,93 @@
/*
* 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.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
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"),
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
);
event.setCancelled(true);
event.setBuild(false);
}
}
}

View File

@@ -273,7 +273,8 @@ public class PlayerEventListener implements Listener {
Plot plot = plotPlayer.getCurrentPlot(); Plot plot = plotPlayer.getCurrentPlot();
// Check WorldEdit // Check WorldEdit
switch (parts[0]) { switch (parts[0]) {
case "up", "worldedit:up" -> { case "up":
case "worldedit:up":
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission( if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission(
Permission.PERMISSION_ADMIN_BUILD_OTHER, Permission.PERMISSION_ADMIN_BUILD_OTHER,
true true
@@ -282,7 +283,6 @@ public class PlayerEventListener implements Listener {
return; return;
} }
} }
}
if (plot == null && !area.isRoadFlags()) { if (plot == null && !area.isRoadFlags()) {
return; return;
} }
@@ -572,7 +572,8 @@ public class PlayerEventListener implements Listener {
if (now == null) { if (now == null) {
try (final MetaDataAccess<Boolean> kickAccess = try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) { 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( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( TagResolver.resolver(
@@ -665,7 +666,8 @@ public class PlayerEventListener implements Listener {
if (plot == null) { if (plot == null) {
try (final MetaDataAccess<Boolean> kickAccess = try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) { 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( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( TagResolver.resolver(
@@ -842,10 +844,6 @@ public class PlayerEventListener implements Listener {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onInventoryClick(InventoryClickEvent event) { public void onInventoryClick(InventoryClickEvent event) {
/*if (!event.isLeftClick() || (event.getAction() != InventoryAction.PLACE_ALL) || event
.isShiftClick()) {
return;
}*/
HumanEntity entity = event.getWhoClicked(); HumanEntity entity = event.getWhoClicked();
if (!(entity instanceof Player) || !this.plotAreaManager if (!(entity instanceof Player) || !this.plotAreaManager
.hasPlotArea(entity.getWorld().getName())) { .hasPlotArea(entity.getWorld().getName())) {
@@ -1114,13 +1112,13 @@ public class PlayerEventListener implements Listener {
Location location = BukkitUtil.adapt(block.getLocation()); Location location = BukkitUtil.adapt(block.getLocation());
Action action = event.getAction(); Action action = event.getAction();
switch (action) { switch (action) {
case PHYSICAL -> { case PHYSICAL: {
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL; eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
blocktype1 = BukkitAdapter.asBlockType(block.getType()); blocktype1 = BukkitAdapter.asBlockType(block.getType());
break;
} }
//todo rearrange the right click code. it is all over the place. //todo rearrange the right click code. it is all over the place.
case RIGHT_CLICK_BLOCK -> { case RIGHT_CLICK_BLOCK: {
Material blockType = block.getType(); Material blockType = block.getType();
eventType = PlayerBlockEventType.INTERACT_BLOCK; eventType = PlayerBlockEventType.INTERACT_BLOCK;
blocktype1 = BukkitAdapter.asBlockType(block.getType()); blocktype1 = BukkitAdapter.asBlockType(block.getType());
@@ -1142,17 +1140,22 @@ public class PlayerEventListener implements Listener {
// in the following, lb needs to have the material of the item in hand i.e. type // in the following, lb needs to have the material of the item in hand i.e. type
switch (type.toString()) { switch (type.toString()) {
case "REDSTONE", "STRING", "PUMPKIN_SEEDS", "MELON_SEEDS", "COCOA_BEANS", "WHEAT_SEEDS", "BEETROOT_SEEDS", case "REDSTONE":
"SWEET_BERRIES", "GLOW_BERRIES" -> { case "STRING":
case "PUMPKIN_SEEDS":
case "MELON_SEEDS":
case "COCOA_BEANS":
case "WHEAT_SEEDS":
case "BEETROOT_SEEDS":
case "SWEET_BERRIES":
case "GLOW_BERRIES":
return; return;
} default:
default -> {
//eventType = PlayerBlockEventType.PLACE_BLOCK; //eventType = PlayerBlockEventType.PLACE_BLOCK;
if (type.isBlock()) { if (type.isBlock()) {
return; return;
} }
} }
}
if (PaperLib.isPaper()) { if (PaperLib.isPaper()) {
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) { if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
eventType = PlayerBlockEventType.SPAWN_MOB; eventType = PlayerBlockEventType.SPAWN_MOB;
@@ -1184,8 +1187,9 @@ public class PlayerEventListener implements Listener {
eventType = PlayerBlockEventType.READ; eventType = PlayerBlockEventType.READ;
break; break;
} }
break;
} }
case LEFT_CLICK_BLOCK -> { case LEFT_CLICK_BLOCK: {
Material blockType = block.getType(); Material blockType = block.getType();
// todo: when the code above is rearranged, it would be great to beautify this as well. // todo: when the code above is rearranged, it would be great to beautify this as well.
@@ -1196,11 +1200,11 @@ public class PlayerEventListener implements Listener {
eventType = PlayerBlockEventType.INTERACT_BLOCK; eventType = PlayerBlockEventType.INTERACT_BLOCK;
blocktype1 = BukkitAdapter.asBlockType(block.getType()); blocktype1 = BukkitAdapter.asBlockType(block.getType());
break;
} }
default -> { default:
return; return;
} }
}
if (this.worldEdit != null && pp.getAttribute("worldedit")) { if (this.worldEdit != null && pp.getAttribute("worldedit")) {
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) { if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
return; return;

View File

@@ -30,9 +30,9 @@ import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotHandler; import com.plotsquared.core.plot.PlotHandler;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import com.plotsquared.core.util.PlotFlagUtil;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@@ -89,11 +89,6 @@ public class SingleWorldListener implements Listener {
markChunkAsClean(event.getChunk()); markChunkAsClean(event.getChunk());
} }
// @EventHandler
// public void onPopulate(ChunkPopulateEvent event) {
// handle(event);
// }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onChunkLoad(ChunkLoadEvent event) { public void onChunkLoad(ChunkLoadEvent event) {
handle(event); handle(event);

View File

@@ -41,13 +41,9 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
* @param player Bukkit OfflinePlayer player to convert * @param player Bukkit OfflinePlayer player to convert
* @param permissionHandler Permission Profile to be used * @param permissionHandler Permission Profile to be used
*/ */
public BukkitOfflinePlayer( public BukkitOfflinePlayer(final @NonNull OfflinePlayer player, final @NonNull PermissionHandler permissionHandler) {
final @NonNull OfflinePlayer player, final @NonNull
PermissionHandler permissionHandler
) {
this.player = player; this.player = player;
this.permissionProfile = permissionHandler.getPermissionProfile(this) this.permissionProfile = permissionHandler.getPermissionProfile(this).orElse(NullPermissionProfile.INSTANCE);
.orElse(NullPermissionProfile.INSTANCE);
} }
@NonNull @NonNull

View File

@@ -71,8 +71,29 @@ public class BukkitPlayer extends PlotPlayer<Player> {
* @param eventDispatcher EventDispatcher instance * @param eventDispatcher EventDispatcher instance
* @param player Bukkit player instance * @param player Bukkit player instance
* @param permissionHandler PermissionHandler 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.
*/ */
BukkitPlayer( @Deprecated(forRemoval = true, since = "TODO")
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 = "TODO")
public BukkitPlayer(
final @NonNull PlotAreaManager plotAreaManager, final @NonNull PlotAreaManager plotAreaManager,
final @NonNull EventDispatcher eventDispatcher, final @NonNull EventDispatcher eventDispatcher,
final @NonNull Player player, final @NonNull Player player,

View File

@@ -54,6 +54,7 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
@NonNull @NonNull
@Override @Override
@SuppressWarnings("deprecation")
public BukkitPlayer getPlayer(final @NonNull Player object) { public BukkitPlayer getPlayer(final @NonNull Player object) {
if (object.getUniqueId().version() == 2) { // not a real player if (object.getUniqueId().version() == 2) { // not a real player
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, object, false, this.permissionHandler); return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, object, false, this.permissionHandler);
@@ -65,12 +66,13 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
} }
@Override @Override
@SuppressWarnings("deprecation")
public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) { public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) {
final Player player = Bukkit.getPlayer(uuid); final Player player = Bukkit.getPlayer(uuid);
if (player == null || !player.isOnline()) { if (player == null || !player.isOnline()) {
throw new NoSuchPlayerException(uuid); throw new NoSuchPlayerException(uuid);
} }
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, false, this.permissionHandler); return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, this.permissionHandler);
} }
@Nullable @Nullable

View File

@@ -62,7 +62,6 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
/** /**
* @param minY minimum world Y, inclusive * @param minY minimum world Y, inclusive
* @param maxY maximum world Y, inclusive * @param maxY maximum world Y, inclusive
*
* @since 6.6.0 * @since 6.6.0
*/ */
public GenChunk(int minY, int maxY) { public GenChunk(int minY, int maxY) {

View File

@@ -37,6 +37,7 @@ import org.bukkit.block.Sign;
import org.bukkit.block.Skull; import org.bukkit.block.Skull;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
@@ -51,6 +52,15 @@ public class StateWrapper {
public org.bukkit.block.BlockState state = null; public org.bukkit.block.BlockState state = null;
public CompoundTag tag = 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) { public StateWrapper(CompoundTag tag) {
this.tag = tag; this.tag = tag;
} }
@@ -244,6 +254,26 @@ public class StateWrapper {
return false; 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() { public String getId() {
String tileid = this.tag.getString("id").toLowerCase(); String tileid = this.tag.getString("id").toLowerCase();
if (tileid.startsWith("minecraft:")) { if (tileid.startsWith("minecraft:")) {

View File

@@ -69,8 +69,9 @@ public class BukkitRegionManager extends RegionManager {
@Inject @Inject
public BukkitRegionManager( public BukkitRegionManager(
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull @NonNull WorldUtil worldUtil,
ProgressSubscriberFactory subscriberFactory @NonNull GlobalBlockQueue blockQueue,
@NonNull ProgressSubscriberFactory subscriberFactory
) { ) {
super(worldUtil, blockQueue, subscriberFactory); super(worldUtil, blockQueue, subscriberFactory);
this.blockQueue = blockQueue; this.blockQueue = blockQueue;
@@ -257,7 +258,7 @@ public class BukkitRegionManager extends RegionManager {
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear); map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
AugmentedUtils.bypass( AugmentedUtils.bypass(
ignoreAugment, ignoreAugment,
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() { () -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<>() {
@Override @Override
public void run(ZeroedDelegateScopedQueueCoordinator value) { public void run(ZeroedDelegateScopedQueueCoordinator value) {
Location min = value.getMin(); Location min = value.getMin();

View File

@@ -31,7 +31,6 @@ import org.apache.logging.log4j.Logger;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@@ -85,28 +84,6 @@ public class ContentMap {
} }
} }
void saveEntitiesIn(Chunk chunk, CuboidRegion region, boolean delete) {
for (Entity entity : chunk.getEntities()) {
Location location = BukkitUtil.adapt(entity.getLocation());
int x = location.getX();
int z = location.getZ();
if (!BukkitChunkManager.isIn(region, x, z)) {
continue;
}
if (entity.getVehicle() != null) {
continue;
}
EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2);
wrap.saveEntity();
this.entities.add(wrap);
if (delete) {
if (!(entity instanceof Player)) {
entity.remove();
}
}
}
}
void restoreEntities(World world) { void restoreEntities(World world) {
for (EntityWrapper entity : this.entities) { for (EntityWrapper entity : this.entities) {
try { try {

View File

@@ -60,4 +60,5 @@ public class TranslationUpdateManager {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }

View File

@@ -54,7 +54,8 @@ public class UpdateUtility implements Listener {
internalVersion = PlotSquared.get().getVersion(); internalVersion = PlotSquared.get().getVersion();
} }
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
@SuppressWarnings({"deprecation", "DefaultCharset"})
public void updateChecker() { public void updateChecker() {
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> { task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
try { try {

View File

@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at contact<at>intellectualsites.com. All reported by contacting the project team at contact@intellectualsites.com. All
complaints will be reviewed and investigated and will result in a response that complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident. obligated to maintain confidentiality with regard to the reporter of an incident.

View File

@@ -203,7 +203,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
* @return Player manager * @return Player manager
*/ */
default @NonNull PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() { default @NonNull PlayerManager<? extends PlotPlayer<P>, ? extends P> playerManager() {
return injector().getInstance(Key.get(new TypeLiteral<PlayerManager<? extends PlotPlayer<P>, ? extends P>>() { return injector().getInstance(Key.get(new TypeLiteral<>() {
})); }));
} }

View File

@@ -133,8 +133,6 @@ public class PlotSquared {
private final Map<String, CaptionMap> captionMaps = new HashMap<>(); private final Map<String, CaptionMap> captionMaps = new HashMap<>();
public HashMap<String, HashMap<PlotId, Plot>> plots_tmp; public HashMap<String, HashMap<PlotId, Plot>> plots_tmp;
private CaptionLoader captionLoader; private CaptionLoader captionLoader;
// WorldEdit instance
private WorldEdit worldedit;
private File configFile; private File configFile;
private File worldsFile; private File worldsFile;
private YamlConfiguration worldConfiguration; private YamlConfiguration worldConfiguration;
@@ -223,11 +221,11 @@ public class PlotSquared {
} }
} }
this.worldedit = WorldEdit.getInstance(); WorldEdit worldedit = WorldEdit.getInstance();
WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener()); WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener());
// Create Event utility class // Create Event utility class
this.eventDispatcher = new EventDispatcher(this.worldedit); this.eventDispatcher = new EventDispatcher(worldedit);
// Create plot listener // Create plot listener
this.plotListener = new PlotListener(this.eventDispatcher); this.plotListener = new PlotListener(this.eventDispatcher);
@@ -270,7 +268,11 @@ public class PlotSquared {
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang")); captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
} else { } else {
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json"; String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName)); captionMap = this.captionLoader.loadOrCreateSingle(this.platform
.getDirectory()
.toPath()
.resolve("lang")
.resolve(fileName));
} }
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap); this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
LOGGER.info( LOGGER.info(
@@ -1521,10 +1523,6 @@ public class PlotSquared {
return this.backgroundUUIDPipeline; return this.backgroundUUIDPipeline;
} }
public @NonNull WorldEdit getWorldEdit() {
return this.worldedit;
}
public @NonNull File getConfigFile() { public @NonNull File getConfigFile() {
return this.configFile; return this.configFile;
} }

View File

@@ -136,9 +136,7 @@ public class SimpleBackupManager implements BackupManager {
return this.backupLimit; return this.backupLimit;
} }
private record PlotCacheKey( private record PlotCacheKey(Plot plot) {
Plot plot
) {
@Override @Override
public boolean equals(final Object o) { public boolean equals(final Object o) {

View File

@@ -173,7 +173,7 @@ public class QuadMap<T> {
public QuadMap<T> newInstance(int newsize, int x, int z, int min) { public QuadMap<T> newInstance(int newsize, int x, int z, int min) {
try { try {
return new QuadMap<T>(newsize, x, z, min) { return new QuadMap<>(newsize, x, z, min) {
@Override @Override
public CuboidRegion getRegion(T value) { public CuboidRegion getRegion(T value) {
return QuadMap.this.getRegion(value); return QuadMap.this.getRegion(value);

View File

@@ -70,7 +70,8 @@ public class Add extends Command {
plot.isOwner(player.getUUID()) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST), plot.isOwner(player.getUUID()) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST),
TranslatableCaption.of("permission.no_plot_perms") TranslatableCaption.of("permission.no_plot_perms")
); );
checkTrue(args.length == 1, checkTrue(
args.length == 1,
TranslatableCaption.of("commandconfig.command_syntax"), TranslatableCaption.of("commandconfig.command_syntax"),
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>"))) TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
); );

View File

@@ -55,7 +55,6 @@ import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil; import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.RunnableVal3; import com.plotsquared.core.util.task.RunnableVal3;
import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.EditSessionBuilder;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
@@ -233,11 +232,13 @@ public class Area extends SubCommand {
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream( try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
file))) { file))) {
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion); final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
EditSessionBuilder editSessionBuilder = WorldEdit.getInstance().newEditSessionBuilder(); final EditSession editSession = WorldEdit.getInstance().newEditSession(selectedRegion.getWorld());
editSessionBuilder.world(selectedRegion.getWorld()); final ForwardExtentCopy forwardExtentCopy = new ForwardExtentCopy(
final EditSession editSession = editSessionBuilder.build(); editSession,
final ForwardExtentCopy forwardExtentCopy = selectedRegion,
new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint()); clipboard,
selectedRegion.getMinimumPoint()
);
forwardExtentCopy.setCopyingBiomes(true); forwardExtentCopy.setCopyingBiomes(true);
forwardExtentCopy.setCopyingEntities(true); forwardExtentCopy.setCopyingEntities(true);
Operations.complete(forwardExtentCopy); Operations.complete(forwardExtentCopy);
@@ -724,7 +725,7 @@ public class Area extends SubCommand {
return false; return false;
} }
final List<PlotArea> areas = new ArrayList<>(Arrays.asList(this.plotAreaManager.getAllPlotAreas())); final List<PlotArea> areas = new ArrayList<>(Arrays.asList(this.plotAreaManager.getAllPlotAreas()));
paginate(player, areas, 8, page, new RunnableVal3<Integer, PlotArea, CaptionHolder>() { paginate(player, areas, 8, page, new RunnableVal3<>() {
@Override @Override
public void run(Integer i, PlotArea area, CaptionHolder caption) { public void run(Integer i, PlotArea area, CaptionHolder caption) {
String name; String name;

View File

@@ -35,7 +35,6 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.services.plots.AutoQuery;
import com.plotsquared.core.services.plots.AutoService; import com.plotsquared.core.services.plots.AutoService;
import com.plotsquared.core.util.EconHandler; import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.util.EventDispatcher;
@@ -327,7 +326,7 @@ public class Auto extends SubCommand {
} }
List<Plot> plots = this.servicePipeline List<Plot> plots = this.servicePipeline
.pump(new AutoQuery(player, null, sizeX, sizeZ, plotarea)) .pump(new AutoService.AutoQuery(player, null, sizeX, sizeZ, plotarea))
.through(AutoService.class) .through(AutoService.class)
.getResult(); .getResult();

View File

@@ -83,7 +83,7 @@ public class Caps extends SubCommand {
final int current = countedEntities[type]; final int current = countedEntities[type];
final int max = plot.getFlag(capFlag); final int max = plot.getFlag(capFlag);
final String percentage = String.format("%.1f", 100 * ((float) current / max)); final String percentage = String.format("%.1f", 100 * ((float) current / max));
ComponentLike maxBeautified = max >= Integer.MAX_VALUE ComponentLike maxBeautified = max == Integer.MAX_VALUE
? TranslatableCaption.of("info.infinite").toComponent(player) ? TranslatableCaption.of("info.infinite").toComponent(player)
: Component.text(max); : Component.text(max);
player.sendMessage( player.sendMessage(

View File

@@ -107,7 +107,9 @@ public class Clear extends Command {
} }
BackupManager.backup(player, plot, () -> { BackupManager.backup(player, plot, () -> {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> TaskManager.runTask(() -> { boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> {
plot.getPlotModificationManager().unlink();
TaskManager.runTask(() -> {
plot.removeRunning(); plot.removeRunning();
// If the state changes, then mark it as no longer done // If the state changes, then mark it as no longer done
if (DoneFlag.isDone(plot)) { if (DoneFlag.isDone(plot)) {
@@ -135,7 +137,8 @@ public class Clear extends Command {
.tag("plot", Tag.inserting(Component.text(plot.getId().toString()))) .tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
.build() .build()
); );
})); });
});
if (!result) { if (!result) {
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer")); player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
} else { } else {

View File

@@ -813,8 +813,7 @@ public class Cluster extends SubCommand {
if (throwable instanceof TimeoutException) { if (throwable instanceof TimeoutException) {
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout")); player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
} else { } else {
final String owner; final String owner = Objects.requireNonNullElse(username, "unknown");
owner = Objects.requireNonNullElse(username, "unknown");
String name = cluster.getName(); String name = cluster.getName();
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + ( String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
cluster.getP2().getY() - cluster.getP1().getY() + 1); cluster.getP2().getY() - cluster.getP1().getY() + 1);

View File

@@ -502,9 +502,9 @@ public abstract class Command {
public String getCommandString() { public String getCommandString() {
if (this.parent == null) { if (this.parent == null) {
return "/" + toString(); return "/" + this;
} else { } else {
return this.parent.getCommandString() + " " + toString(); return this.parent.getCommandString() + " " + this;
} }
} }
@@ -559,10 +559,9 @@ public abstract class Command {
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) { public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
switch (args.length) { switch (args.length) {
case 0 -> { case 0:
return this.allCommands; return this.allCommands;
} case 1:
case 1 -> {
String arg = args[0].toLowerCase(); String arg = args[0].toLowerCase();
if (space) { if (space) {
Command cmd = getCommand(arg); Command cmd = getCommand(arg);
@@ -581,8 +580,7 @@ public abstract class Command {
} }
return commands; return commands;
} }
} default:
default -> {
Command cmd = getCommand(args[0]); Command cmd = getCommand(args[0]);
if (cmd != null) { if (cmd != null) {
return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space); return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space);
@@ -591,7 +589,6 @@ public abstract class Command {
} }
} }
} }
}
@Override @Override
public String toString() { public String toString() {

View File

@@ -37,7 +37,7 @@ public class Confirm extends SubCommand {
} }
CmdConfirm.removePending(player); CmdConfirm.removePending(player);
if ((System.currentTimeMillis() - command.timestamp) if ((System.currentTimeMillis() - command.timestamp)
> Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS * 1000) { > Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS * 1000L) {
player.sendMessage(TranslatableCaption.of("confirm.expired_confirm")); player.sendMessage(TranslatableCaption.of("confirm.expired_confirm"));
return false; return false;
} }

View File

@@ -69,7 +69,8 @@ public class Copy extends SubCommand {
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> { plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
if (result) { if (result) {
player.sendMessage(TranslatableCaption.of("move.copy_success"), player.sendMessage(
TranslatableCaption.of("move.copy_success"),
TagResolver.builder() TagResolver.builder()
.tag("origin", Tag.inserting(Component.text(plot1.toString()))) .tag("origin", Tag.inserting(Component.text(plot1.toString())))
.tag("target", Tag.inserting(Component.text(plot2.toString()))) .tag("target", Tag.inserting(Component.text(plot2.toString())))

View File

@@ -75,13 +75,11 @@ public class DebugRoadRegen extends SubCommand {
} }
String kind = args[0].toLowerCase(); String kind = args[0].toLowerCase();
switch (kind) { switch (kind) {
case "plot" -> { case "plot":
return regenPlot(player); return regenPlot(player);
} case "region":
case "region" -> {
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length)); return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
} default:
default -> {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"), TranslatableCaption.of("commandconfig.command_syntax"),
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE))) TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
@@ -89,7 +87,6 @@ public class DebugRoadRegen extends SubCommand {
return false; return false;
} }
} }
}
public boolean regenPlot(PlotPlayer<?> player) { public boolean regenPlot(PlotPlayer<?> player) {
Location location = player.getLocation(); Location location = player.getLocation();

View File

@@ -183,24 +183,22 @@ public class Download extends SubCommand {
private void upload(PlotPlayer<?> player, Plot plot) { private void upload(PlotPlayer<?> player, Plot plot) {
if (Settings.Web.LEGACY_WEBINTERFACE) { if (Settings.Web.LEGACY_WEBINTERFACE) {
schematicHandler schematicHandler.getCompoundTag(plot).whenComplete((compoundTag, throwable) -> schematicHandler.upload(
.getCompoundTag(plot) compoundTag,
.whenComplete((compoundTag, throwable) -> { null,
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() { null,
new RunnableVal<>() {
@Override @Override
public void run(URL value) { public void run(URL value) {
plot.removeRunning(); plot.removeRunning();
player.sendMessage( player.sendMessage(TranslatableCaption.of("web.generation_link_success"), TagResolver.builder().tag(
TranslatableCaption.of("web.generation_link_success"), "download",
TagResolver.builder() Tag.preProcessParsed(value.toString())
.tag("download", Tag.preProcessParsed(value.toString())) ).tag("delete", Tag.preProcessParsed("Not available")).build());
.tag("delete", Tag.preProcessParsed("Not available"))
.build()
);
player.sendMessage(StaticCaption.of(value.toString())); player.sendMessage(StaticCaption.of(value.toString()));
} }
}); }
}); ));
return; return;
} }
// TODO legacy support // TODO legacy support

View File

@@ -60,10 +60,9 @@ public class Help extends Command {
RunnableVal2<Command, CommandResult> whenDone RunnableVal2<Command, CommandResult> whenDone
) { ) {
switch (args.length) { switch (args.length) {
case 0 -> { case 0:
return displayHelp(player, null, 0); return displayHelp(player, null, 0);
} case 1:
case 1 -> {
if (MathMan.isInteger(args[0])) { if (MathMan.isInteger(args[0])) {
try { try {
return displayHelp(player, null, Integer.parseInt(args[0])); return displayHelp(player, null, Integer.parseInt(args[0]));
@@ -73,8 +72,7 @@ public class Help extends Command {
} else { } else {
return displayHelp(player, args[0], 1); return displayHelp(player, args[0], 1);
} }
} case 2:
case 2 -> {
if (MathMan.isInteger(args[1])) { if (MathMan.isInteger(args[1])) {
try { try {
return displayHelp(player, args[0], Integer.parseInt(args[1])); return displayHelp(player, args[0], Integer.parseInt(args[1]));
@@ -83,8 +81,8 @@ public class Help extends Command {
} }
} }
return CompletableFuture.completedFuture(false); return CompletableFuture.completedFuture(false);
} default:
default -> sendUsage(player); sendUsage(player);
} }
return CompletableFuture.completedFuture(true); return CompletableFuture.completedFuture(true);
} }
@@ -134,7 +132,12 @@ public class Help extends Command {
TagResolver.builder() TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot help"))) .tag("command", Tag.inserting(Component.text("/plot help")))
.tag("category", Tag.inserting(Component.text("all"))) .tag("category", Tag.inserting(Component.text("all")))
.tag("category_desc", Tag.inserting(TranslatableCaption.of("help.help_display_all_commands").toComponent(player))) .tag(
"category_desc",
Tag.inserting(TranslatableCaption
.of("help.help_display_all_commands")
.toComponent(player))
)
.build() .build()
)); ));
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption

View File

@@ -190,7 +190,7 @@ public class Inbox extends SubCommand {
final int page; final int page;
if (args.length > 1) { if (args.length > 1) {
switch (args[1].toLowerCase()) { switch (args[1].toLowerCase()) {
case "delete" -> { case "delete":
if (!inbox.canModify(plot, player)) { if (!inbox.canModify(plot, player)) {
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify")); player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
return false; return false;
@@ -225,6 +225,7 @@ public class Inbox extends SubCommand {
); );
return false; return false;
} }
if (!inbox.getComments(plot, new RunnableVal<>() { if (!inbox.getComments(plot, new RunnableVal<>() {
@Override @Override
public void run(List<PlotComment> value) { public void run(List<PlotComment> value) {
@@ -253,8 +254,7 @@ public class Inbox extends SubCommand {
return false; return false;
} }
return true; return true;
} case "clear":
case "clear" -> {
if (!inbox.canModify(plot, player)) { if (!inbox.canModify(plot, player)) {
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify")); player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
} }
@@ -268,8 +268,7 @@ public class Inbox extends SubCommand {
plot.getPlotCommentContainer().removeComments(comments); plot.getPlotCommentContainer().removeComments(comments);
} }
return true; return true;
} default:
default -> {
try { try {
page = Integer.parseInt(args[1]); page = Integer.parseInt(args[1]);
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
@@ -277,7 +276,6 @@ public class Inbox extends SubCommand {
return false; return false;
} }
} }
}
} else { } else {
page = 1; page = 1;
} }

View File

@@ -52,7 +52,8 @@ public class Info extends SubCommand {
arg = args[0]; arg = args[0];
switch (arg) { switch (arg) {
// TODO: (re?)implement /plot info inv. (it was never properly implemented) // TODO: (re?)implement /plot info inv. (it was never properly implemented)
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" -> plot = Plot case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" ->
plot = Plot
.getPlotFromString(player, null, false); .getPlotFromString(player, null, false);
default -> { default -> {
plot = Plot.getPlotFromString(player, arg, false); plot = Plot.getPlotFromString(player, arg, false);

View File

@@ -117,7 +117,7 @@ public class ListCmd extends SubCommand {
if (player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) { if (player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
args.add("fuzzy <search...>"); args.add("fuzzy <search...>");
} }
return args.toArray(new String[args.size()]); return args.toArray(new String[0]);
} }
public void noArgs(PlotPlayer<?> player) { public void noArgs(PlotPlayer<?> player) {

View File

@@ -28,7 +28,6 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "near", @CommandDeclaration(command = "near",
@@ -56,8 +55,4 @@ public class Near extends Command {
return CompletableFuture.completedFuture(true); return CompletableFuture.completedFuture(true);
} }
private List<PlotPlayer<?>> getPlayersInPlotVisible(Plot plot, PlotPlayer<?> executor) {
return plot.getPlayersInPlot().stream().filter(executor::canSee).toList();
}
} }

View File

@@ -90,8 +90,12 @@ public class Purge extends SubCommand {
return false; return false;
} }
switch (split[0].toLowerCase()) { switch (split[0].toLowerCase()) {
case "world", "w" -> world = split[1]; case "world":
case "area", "a" -> { case "w":
world = split[1];
break;
case "area":
case "a":
area = this.plotAreaManager.getPlotAreaByString(split[1]); area = this.plotAreaManager.getPlotAreaByString(split[1]);
if (area == null) { if (area == null) {
player.sendMessage( player.sendMessage(
@@ -100,8 +104,9 @@ public class Purge extends SubCommand {
); );
return false; return false;
} }
} break;
case "plotid", "id" -> { case "plotid":
case "id":
try { try {
id = PlotId.fromString(split[1]); id = PlotId.fromString(split[1]);
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
@@ -111,8 +116,9 @@ public class Purge extends SubCommand {
); );
return false; return false;
} }
} break;
case "owner", "o" -> { case "owner":
case "o":
UUIDMapping ownerMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]); UUIDMapping ownerMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
if (ownerMapping == null) { if (ownerMapping == null) {
player.sendMessage( player.sendMessage(
@@ -122,8 +128,9 @@ public class Purge extends SubCommand {
return false; return false;
} }
owner = ownerMapping.uuid(); owner = ownerMapping.uuid();
} break;
case "shared", "s" -> { case "shared":
case "s":
UUIDMapping addedMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]); UUIDMapping addedMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
if (addedMapping == null) { if (addedMapping == null) {
player.sendMessage( player.sendMessage(
@@ -133,15 +140,24 @@ public class Purge extends SubCommand {
return false; return false;
} }
added = addedMapping.uuid(); added = addedMapping.uuid();
} break;
case "clear", "c", "delete", "d", "del" -> clear = Boolean.parseBoolean(split[1]); case "clear":
case "unknown", "?", "u" -> unknown = Boolean.parseBoolean(split[1]); case "c":
default -> { case "delete":
case "d":
case "del":
clear = Boolean.parseBoolean(split[1]);
break;
case "unknown":
case "?":
case "u":
unknown = Boolean.parseBoolean(split[1]);
break;
default:
sendUsage(player); sendUsage(player);
return false; return false;
} }
} }
}
final HashSet<Plot> toDelete = new HashSet<>(); final HashSet<Plot> toDelete = new HashSet<>();
for (Plot plot : PlotQuery.newQuery().whereBasePlot()) { for (Plot plot : PlotQuery.newQuery().whereBasePlot()) {
if (world != null && !plot.getWorldName().equalsIgnoreCase(world)) { if (world != null && !plot.getWorldName().equalsIgnoreCase(world)) {
@@ -220,8 +236,12 @@ public class Purge extends SubCommand {
try { try {
ids.add(plot.temp); ids.add(plot.temp);
if (finalClear) { if (finalClear) {
plot.getPlotModificationManager().clear(false, true, player, plot.getPlotModificationManager().clear(
() -> LOGGER.info("Plot {} cleared by purge", plot.getId())); false,
true,
player,
() -> LOGGER.info("Plot {} cleared by purge", plot.getId())
);
} else { } else {
plot.getPlotModificationManager().removeSign(); plot.getPlotModificationManager().removeSign();
} }

View File

@@ -35,21 +35,14 @@ import java.util.Map;
* the component GUI * the component GUI
*/ */
@SerializableAs("preset") @SerializableAs("preset")
public record ComponentPreset( public record ComponentPreset(ClassicPlotManagerComponent component, String pattern, double cost, String permission,
ClassicPlotManagerComponent component, String displayName, List<String> description, ItemType icon) implements ConfigurationSerializable {
String pattern,
double cost,
String permission,
String displayName,
List<String> description,
ItemType icon
) implements ConfigurationSerializable {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) { public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) {
final ClassicPlotManagerComponent classicPlotManagerComponent = ClassicPlotManagerComponent final ClassicPlotManagerComponent classicPlotManagerComponent = ClassicPlotManagerComponent
.fromString(map.getOrDefault("component", "").toString()).orElseThrow(() -> .fromString(map.getOrDefault("component", "").toString()).orElseThrow(() ->
new IllegalArgumentException("The preset in components.yml needs a valid target component, got: " + map.get("component"))); new IllegalArgumentException("The preset needs a valid target component"));
final String pattern = map.getOrDefault("pattern", "").toString(); final String pattern = map.getOrDefault("pattern", "").toString();
final double cost = Double.parseDouble(map.getOrDefault("cost", "0.0").toString()); final double cost = Double.parseDouble(map.getOrDefault("cost", "0.0").toString());
final String permission = map.getOrDefault("permission", "").toString(); final String permission = map.getOrDefault("permission", "").toString();

View File

@@ -42,32 +42,6 @@ public class Config {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Config.class.getSimpleName()); private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + Config.class.getSimpleName());
/**
* Get the value for a node<br>
* Probably throws some error if you try to get a non existent key
*
* @param key configuration key
* @param root configuration class
* @param <T> value type
* @return value
*/
@SuppressWarnings("unchecked")
public static <T> T get(String key, Class<?> root) {
String[] split = key.split("\\.");
Object instance = getInstance(split, root);
if (instance != null) {
Field field = getField(split, instance);
if (field != null) {
try {
return (T) field.get(instance);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return null;
}
/** /**
* Set the value of a specific node<br> * Set the value of a specific node<br>
* Probably throws some error if you supply non existing keys or invalid values * Probably throws some error if you supply non existing keys or invalid values
@@ -445,10 +419,6 @@ public class Config {
return INSTANCES.values(); return INSTANCES.values();
} }
public Collection<String> getSections() {
return INSTANCES.keySet();
}
private Map<String, T> getRaw() { private Map<String, T> getRaw() {
return INSTANCES; return INSTANCES;
} }

View File

@@ -146,7 +146,6 @@ public final class CaptionLoader {
* @param reader the reader to read the map from. * @param reader the reader to read the map from.
* @return the translation map. * @return the translation map.
*/ */
@SuppressWarnings("UnstableApiUsage")
static @NonNull Map<@NonNull String, @NonNull String> loadFromReader(final @NonNull Reader reader) { static @NonNull Map<@NonNull String, @NonNull String> loadFromReader(final @NonNull Reader reader) {
final Type type = new TypeToken<Map<String, String>>() { final Type type = new TypeToken<Map<String, String>>() {
}.getType(); }.getType();
@@ -225,7 +224,7 @@ public final class CaptionLoader {
*/ */
public @NonNull CaptionMap loadOrCreateSingle(final @NonNull Path file) throws IOException { public @NonNull CaptionMap loadOrCreateSingle(final @NonNull Path file) throws IOException {
final Locale locale = this.localeExtractor.apply(file); final Locale locale = this.localeExtractor.apply(file);
if (!Files.exists(file) ) { if (!Files.exists(file)) {
Map<String, String> map = new LinkedHashMap<>(); Map<String, String> map = new LinkedHashMap<>();
patch(map, locale); patch(map, locale);
save(file, map); save(file, map);

View File

@@ -56,7 +56,8 @@ final class ClassLoaderCaptionProvider implements DefaultCaptionProvider {
LOGGER.info("No resource for locale '{}' found in the plugin file." + LOGGER.info("No resource for locale '{}' found in the plugin file." +
"Please ensure you have placed the latest version of the file messages_{}.json in the 'lang' folder." + "Please ensure you have placed the latest version of the file messages_{}.json in the 'lang' folder." +
"You may be able to find completed translations at https://intellectualsites.crowdin.com/plotsquared", "You may be able to find completed translations at https://intellectualsites.crowdin.com/plotsquared",
locale, locale); locale, locale
);
return null; return null;
} }
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) {

View File

@@ -2499,7 +2499,7 @@ public class SQLManager implements AbstractDB {
id = null; id = null;
} }
String msg = set.getString("comment"); String msg = set.getString("comment");
long timestamp = set.getInt("timestamp") * 1000; long timestamp = set.getInt("timestamp") * 1000L;
PlotComment comment = PlotComment comment =
new PlotComment(world, id, msg, sender, inbox, timestamp); new PlotComment(world, id, msg, sender, inbox, timestamp);
comments.add(comment); comments.add(comment);
@@ -3414,10 +3414,7 @@ public class SQLManager implements AbstractDB {
} }
} }
private record LegacySettings( private record LegacySettings(int id, PlotSettings settings) {
int id,
PlotSettings settings
) {
} }

View File

@@ -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.core.events;
import com.sk89q.worldedit.entity.Entity;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
* @since TODO
*/
public abstract class EntityEvent {
private final Entity entity;
private String name;
/**
* @since 6.11.0
*/
public EntityEvent(Entity entity) {
this.entity = entity;
}
/**
* Obtain the entity involved in the event
*
* @return Entity
* @since 6.11.0
*/
public Entity getEntity() {
return this.entity;
}
/**
* Obtain the event's class name
*
* @return the event class name
* @since 6.11.0
*/
@NonNull public String getEventName() {
if (this.name == null) {
this.name = this.getClass().getSimpleName();
}
return this.name;
}
}

View File

@@ -105,6 +105,38 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
return this.plotArea; return this.plotArea;
} }
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeX()}
*/
@Deprecated(forRemoval = true, since = "6.1.0")
public int getSize_x() {
return getSizeX();
}
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeX(int)}
*/
@Deprecated(forRemoval = true, since = "6.1.0")
public void setSize_x(int sizeX) {
setSizeX(sizeX);
}
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeZ()}
*/
@Deprecated(forRemoval = true, since = "6.1.0")
public int getSize_z() {
return getSizeZ();
}
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeZ(int)}
*/
@Deprecated(forRemoval = true, since = "6.1.0")
public void setSize_z(int sizeZ) {
setSizeZ(sizeZ);
}
/** /**
* Get the x size of the auto-area * Get the x size of the auto-area
* *

View File

@@ -1,50 +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.core.events;
import com.sk89q.worldedit.entity.Entity;
/**
* @since 6.11.0
*/
public class RemoveRoadEntityEvent extends EntityEvent implements CancellablePlotEvent {
private Result eventResult;
/**
* RemoveRoadEntityEvent: Called when an entity on road is removed.
*
* @param entity The entity to remove
* @since 6.11.0
*/
public RemoveRoadEntityEvent(Entity entity) {
super(entity);
}
@Override
public Result getEventResult() {
return this.eventResult;
}
@Override
public void setEventResult(Result eventResult) {
this.eventResult = eventResult;
}
}

View File

@@ -38,6 +38,7 @@ import javax.annotation.Nullable;
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")
public abstract class ClassicPlotWorld extends SquarePlotWorld { public abstract class ClassicPlotWorld extends SquarePlotWorld {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ClassicPlotWorld.class.getSimpleName()); private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ClassicPlotWorld.class.getSimpleName());
public int ROAD_HEIGHT = 62; public int ROAD_HEIGHT = 62;

View File

@@ -341,7 +341,10 @@ public class HybridGen extends IndependentPlotGenerator {
for (Entity entity : hybridPlotWorld.getPlotSchematicEntities()) { for (Entity entity : hybridPlotWorld.getPlotSchematicEntities()) {
if (region.contains(entity.getLocation().toVector().toBlockPoint())) { if (region.contains(entity.getLocation().toVector().toBlockPoint())) {
Vector3 pos = (entity.getLocation().toVector() Vector3 pos = (entity.getLocation().toVector()
.subtract(region.getMinimumPoint().withY(hybridPlotWorld.getPlotSchematicMinPoint().getY()).toVector3())) .subtract(region
.getMinimumPoint()
.withY(hybridPlotWorld.getPlotSchematicMinPoint().getY())
.toVector3()))
.add(min.getBlockVector3().withY(hybridPlotWorld.SCHEM_Y).toVector3()); .add(min.getBlockVector3().withY(hybridPlotWorld.SCHEM_Y).toVector3());
result.setEntity(new PopulatingEntity( result.setEntity(new PopulatingEntity(
entity, entity,
@@ -365,7 +368,6 @@ public class HybridGen extends IndependentPlotGenerator {
} }
} }
} }
return;
} }
@Override @Override

View File

@@ -141,7 +141,11 @@ public class HybridPlotManager extends ClassicPlotManager {
(pos1.getX() + pos2.getX()) / 2, (pos1.getX() + pos2.getX()) / 2,
(pos1.getZ() + pos2.getZ()) / 2 (pos1.getZ() + pos2.getZ()) / 2
), biome)) { ), biome)) {
WorldUtil.setBiome(hybridPlotWorld.getWorldName(), new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()), biome); WorldUtil.setBiome(
hybridPlotWorld.getWorldName(),
new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3()),
biome
);
} }
} }
@@ -203,8 +207,18 @@ public class HybridPlotManager extends ClassicPlotManager {
PlotId id2 = PlotId.of(id.getX(), id.getY() + 1); PlotId id2 = PlotId.of(id.getX(), id.getY() + 1);
Location bot = getPlotBottomLocAbs(id2); Location bot = getPlotBottomLocAbs(id2);
Location top = getPlotTopLocAbs(id); Location top = getPlotTopLocAbs(id);
Location pos1 = Location.at(hybridPlotWorld.getWorldName(), bot.getX() - 1, hybridPlotWorld.getMinGenHeight(), top.getZ() + 1); Location pos1 = Location.at(
Location pos2 = Location.at(hybridPlotWorld.getWorldName(), top.getX() + 1, hybridPlotWorld.getMaxGenHeight(), bot.getZ()); hybridPlotWorld.getWorldName(),
bot.getX() - 1,
hybridPlotWorld.getMinGenHeight(),
top.getZ() + 1
);
Location pos2 = Location.at(
hybridPlotWorld.getWorldName(),
top.getX() + 1,
hybridPlotWorld.getMaxGenHeight(),
bot.getZ()
);
this.resetBiome(hybridPlotWorld, pos1, pos2); this.resetBiome(hybridPlotWorld, pos1, pos2);
if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) { if (!hybridPlotWorld.ROAD_SCHEMATIC_ENABLED) {
return true; return true;

View File

@@ -68,6 +68,8 @@ public class HybridPlotWorld extends ClassicPlotWorld {
private static final AffineTransform transform = new AffineTransform().rotateY(90); private static final AffineTransform transform = new AffineTransform().rotateY(90);
public boolean ROAD_SCHEMATIC_ENABLED; public boolean ROAD_SCHEMATIC_ENABLED;
public boolean PLOT_SCHEMATIC = false; public boolean PLOT_SCHEMATIC = false;
@Deprecated(forRemoval = true, since = "6.9.0")
public int PLOT_SCHEMATIC_HEIGHT = -1;
public short PATH_WIDTH_LOWER; public short PATH_WIDTH_LOWER;
public short PATH_WIDTH_UPPER; public short PATH_WIDTH_UPPER;
public HashMap<Integer, BaseBlock[]> G_SCH; public HashMap<Integer, BaseBlock[]> G_SCH;
@@ -102,6 +104,22 @@ public class HybridPlotWorld extends ClassicPlotWorld {
PlotSquared.platform().injector().injectMembers(this); PlotSquared.platform().injector().injectMembers(this);
} }
@Deprecated(forRemoval = true, since = "6.9.0")
public static byte wrap(byte data, int start) {
if ((data >= start) && (data < (start + 4))) {
data = (byte) ((((data - start) + 2) & 3) + start);
}
return data;
}
@Deprecated(forRemoval = true, since = "6.9.0")
public static byte wrap2(byte data, int start) {
if ((data >= start) && (data < (start + 2))) {
data = (byte) ((((data - start) + 1) & 1) + start);
}
return data;
}
public static BaseBlock rotate(BaseBlock id) { public static BaseBlock rotate(BaseBlock id) {
CompoundTag tag = id.getNbtData(); CompoundTag tag = id.getNbtData();
@@ -326,18 +344,8 @@ public class HybridPlotWorld extends ClassicPlotWorld {
if (w3 > PLOT_WIDTH || h3 > PLOT_WIDTH) { if (w3 > PLOT_WIDTH || h3 > PLOT_WIDTH) {
this.ROAD_SCHEMATIC_ENABLED = true; this.ROAD_SCHEMATIC_ENABLED = true;
} }
int centerShiftZ; int centerShiftZ = (this.PLOT_WIDTH - l3) / 2;
if (l3 < this.PLOT_WIDTH) { int centerShiftX = (this.PLOT_WIDTH - w3) / 2;
centerShiftZ = (this.PLOT_WIDTH - l3) / 2;
} else {
centerShiftZ = (PLOT_WIDTH - l3) / 2;
}
int centerShiftX;
if (w3 < this.PLOT_WIDTH) {
centerShiftX = (this.PLOT_WIDTH - w3) / 2;
} else {
centerShiftX = (PLOT_WIDTH - w3) / 2;
}
BlockVector3 min = blockArrayClipboard3.getMinimumPoint(); BlockVector3 min = blockArrayClipboard3.getMinimumPoint();
for (short x = 0; x < w3; x++) { for (short x = 0; x < w3; x++) {
@@ -468,7 +476,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
} }
} }
private void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) { /**
* @deprecated This method should not be available for public API usage and will be made private.
*/
@Deprecated(forRemoval = true, since = "6.10.2")
public void addOverlayBlock(short x, short y, short z, BaseBlock id, boolean rotate, int height) {
if (z < 0) { if (z < 0) {
z += this.SIZE; z += this.SIZE;
} else if (z >= this.SIZE) { } else if (z >= this.SIZE) {
@@ -499,7 +511,11 @@ public class HybridPlotWorld extends ClassicPlotWorld {
existing[y] = id; existing[y] = id;
} }
private void addOverlayBiome(short x, short z, BiomeType id) { /**
* @deprecated This method should not be available for public API usage and will be made private.
*/
@Deprecated(forRemoval = true, since = "6.10.2")
public void addOverlayBiome(short x, short z, BiomeType id) {
if (z < 0) { if (z < 0) {
z += this.SIZE; z += this.SIZE;
} else if (z >= this.SIZE) { } else if (z >= this.SIZE) {

View File

@@ -37,7 +37,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.BlockArrayCacheScopedQueueCoordinator; import com.plotsquared.core.queue.BlockArrayCacheScopedQueueCoordinator;
import com.plotsquared.core.queue.GlobalBlockQueue; import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.queue.QueueCoordinator; import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.RegionManager; import com.plotsquared.core.util.RegionManager;
@@ -63,7 +62,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.io.File; import java.io.File;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
@@ -88,7 +86,6 @@ public class HybridUtils {
public static boolean UPDATE = false; public static boolean UPDATE = false;
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final ChunkManager chunkManager;
private final GlobalBlockQueue blockQueue; private final GlobalBlockQueue blockQueue;
private final WorldUtil worldUtil; private final WorldUtil worldUtil;
private final SchematicHandler schematicHandler; private final SchematicHandler schematicHandler;
@@ -97,14 +94,12 @@ public class HybridUtils {
@Inject @Inject
public HybridUtils( public HybridUtils(
final @NonNull PlotAreaManager plotAreaManager, final @NonNull PlotAreaManager plotAreaManager,
final @NonNull ChunkManager chunkManager,
final @NonNull GlobalBlockQueue blockQueue, final @NonNull GlobalBlockQueue blockQueue,
final @NonNull WorldUtil worldUtil, final @NonNull WorldUtil worldUtil,
final @NonNull SchematicHandler schematicHandler, final @NonNull SchematicHandler schematicHandler,
final @NonNull EventDispatcher eventDispatcher final @NonNull EventDispatcher eventDispatcher
) { ) {
this.plotAreaManager = plotAreaManager; this.plotAreaManager = plotAreaManager;
this.chunkManager = chunkManager;
this.blockQueue = blockQueue; this.blockQueue = blockQueue;
this.worldUtil = worldUtil; this.worldUtil = worldUtil;
this.schematicHandler = schematicHandler; this.schematicHandler = schematicHandler;
@@ -380,22 +375,6 @@ public class HybridUtils {
run.run(); run.run();
} }
public int checkModified(QueueCoordinator queue, int x1, int x2, int y1, int y2, int z1, int z2, BlockState[] blocks) {
int count = 0;
for (int y = y1; y <= y2; y++) {
for (int x = x1; x <= x2; x++) {
for (int z = z1; z <= z2; z++) {
BlockState block = queue.getBlock(x, y, z);
boolean same = Arrays.stream(blocks).anyMatch(p -> this.worldUtil.isBlockSame(block, p));
if (!same) {
count++;
}
}
}
}
return count;
}
public final ArrayList<BlockVector2> getChunks(BlockVector2 region) { public final ArrayList<BlockVector2> getChunks(BlockVector2 region) {
ArrayList<BlockVector2> chunks = new ArrayList<>(); ArrayList<BlockVector2> chunks = new ArrayList<>();
int sx = region.getX() << 5; int sx = region.getX() << 5;
@@ -645,7 +624,7 @@ public class HybridUtils {
queue = queueCoordinator; queue = queueCoordinator;
enqueue = false; enqueue = false;
} }
if (id1 == null || id2 == null || id1 != id2) { if (id2 == null || id1 != id2) {
if (id1 != null) { if (id1 != null) {
Plot p1 = area.getPlotAbs(id1); Plot p1 = area.getPlotAbs(id1);
if (p1 != null && p1.hasOwner() && p1.isMerged()) { if (p1 != null && p1.hasOwner() && p1.isMerged()) {

View File

@@ -57,7 +57,8 @@ public abstract class IndependentPlotGenerator {
* @param setting PlotArea (settings) * @param setting PlotArea (settings)
* @since TODO * @since TODO
*/ */
public void populateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea setting) {} public void populateChunk(ZeroedDelegateScopedQueueCoordinator result, PlotArea setting) {
}
/** /**
* Return a new PlotArea object. * Return a new PlotArea object.

View File

@@ -185,39 +185,31 @@ public abstract class SquarePlotManager extends GridPlotManager {
return null; return null;
} }
switch (hash) { switch (hash) {
case 8 -> { case 8:
// north // north
return plot.isMerged(Direction.NORTH) ? id : null; return plot.isMerged(Direction.NORTH) ? id : null;
} case 4:
case 4 -> {
// east // east
return plot.isMerged(Direction.EAST) ? id : null; return plot.isMerged(Direction.EAST) ? id : null;
} case 2:
case 2 -> {
// south // south
return plot.isMerged(Direction.SOUTH) ? id : null; return plot.isMerged(Direction.SOUTH) ? id : null;
} case 1:
case 1 -> {
// west // west
return plot.isMerged(Direction.WEST) ? id : null; return plot.isMerged(Direction.WEST) ? id : null;
} case 12:
case 12 -> {
// northeast // northeast
return plot.isMerged(Direction.NORTHEAST) ? id : null; return plot.isMerged(Direction.NORTHEAST) ? id : null;
} case 6:
case 6 -> {
// southeast // southeast
return plot.isMerged(Direction.SOUTHEAST) ? id : null; return plot.isMerged(Direction.SOUTHEAST) ? id : null;
} case 3:
case 3 -> {
// southwest // southwest
return plot.isMerged(Direction.SOUTHWEST) ? id : null; return plot.isMerged(Direction.SOUTHWEST) ? id : null;
} case 9:
case 9 -> {
// northwest // northwest
return plot.isMerged(Direction.NORTHWEST) ? id : null; return plot.isMerged(Direction.NORTHWEST) ? id : null;
} }
}
} catch (Exception ignored) { } catch (Exception ignored) {
LOGGER.error("Invalid plot / road width in settings.yml for world: {}", squarePlotWorld.getWorldName()); LOGGER.error("Invalid plot / road width in settings.yml for world: {}", squarePlotWorld.getWorldName());
} }

View File

@@ -64,7 +64,6 @@ import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes; import com.sk89q.worldedit.world.item.ItemTypes;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike; import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
@@ -80,8 +79,6 @@ import java.util.UUID;
public class PlotListener { public class PlotListener {
private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
private final HashMap<UUID, Interval> feedRunnable = new HashMap<>(); private final HashMap<UUID, Interval> feedRunnable = new HashMap<>();
private final HashMap<UUID, Interval> healRunnable = new HashMap<>(); private final HashMap<UUID, Interval> healRunnable = new HashMap<>();
private final Map<UUID, List<StatusEffect>> playerEffects = new HashMap<>(); private final Map<UUID, List<StatusEffect>> playerEffects = new HashMap<>();
@@ -142,7 +139,9 @@ public class PlotListener {
Map.Entry<UUID, List<StatusEffect>> entry = iterator.next(); Map.Entry<UUID, List<StatusEffect>> entry = iterator.next();
List<StatusEffect> effects = entry.getValue(); List<StatusEffect> effects = entry.getValue();
effects.removeIf(effect -> currentTime > effect.expiresAt); effects.removeIf(effect -> currentTime > effect.expiresAt);
if (effects.isEmpty()) iterator.remove(); if (effects.isEmpty()) {
iterator.remove();
}
} }
} }
}, TaskTime.seconds(1L)); }, TaskTime.seconds(1L));
@@ -486,6 +485,7 @@ public class PlotListener {
/** /**
* Marks an effect as a status effect that will be removed on leaving a plot * Marks an effect as a status effect that will be removed on leaving a plot
*
* @param uuid The uuid of the player the effect belongs to * @param uuid The uuid of the player the effect belongs to
* @param name The name of the status effect * @param name The name of the status effect
* @param expiresAt The time when the effect expires * @param expiresAt The time when the effect expires
@@ -517,11 +517,6 @@ public class PlotListener {
private record StatusEffect(@NonNull String name, long expiresAt) { private record StatusEffect(@NonNull String name, long expiresAt) {
private StatusEffect(@NonNull String name, long expiresAt) {
this.name = name;
this.expiresAt = expiresAt;
}
} }
} }

View File

@@ -21,11 +21,7 @@ package com.plotsquared.core.location;
import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.StringMan; import com.plotsquared.core.util.StringMan;
public record ChunkWrapper( public record ChunkWrapper(String world, int x, int z) {
String world,
int x,
int z
) {
@Override @Override
public int hashCode() { public int hashCode() {

View File

@@ -51,7 +51,6 @@ public final class UncheckedWorldLocation extends Location {
* @param y Y coordinate * @param y Y coordinate
* @param z Z coordinate * @param z Z coordinate
* @return New location * @return New location
*
* @since 6.9.0 * @since 6.9.0
*/ */
@DoNotUse @DoNotUse

View File

@@ -215,11 +215,7 @@ public final class BlockBucket implements ConfigurationSerializable {
return result; return result;
} }
private record Range( private record Range(int min, int max, boolean automatic) {
int min,
int max,
boolean automatic
) {
public int getWeight() { public int getWeight() {
return max - min; return max - min;
@@ -229,6 +225,31 @@ public final class BlockBucket implements ConfigurationSerializable {
return num <= max && num >= min; return num <= max && num >= min;
} }
public boolean equals(final Object o) {
if (o == this) {
return true;
}
if (!(o instanceof final Range other)) {
return false;
}
if (this.min() != other.min()) {
return false;
}
if (this.max() != other.max()) {
return false;
}
return this.automatic() == other.automatic();
}
public int hashCode() {
final int PRIME = 59;
int result = 1;
result = result * PRIME + this.min();
result = result * PRIME + this.max();
result = result * PRIME + (this.automatic() ? 79 : 97);
return result;
}
} }
} }

View File

@@ -382,9 +382,6 @@ public abstract class PlotArea implements ComponentLike {
this.defaultHome = new BlockLoc(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); this.defaultHome = new BlockLoc(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE);
} else { } else {
try { try {
/*String[] split = homeDefault.split(",");
this.DEFAULT_HOME =
new PlotLoc(Integer.parseInt(split[0]), Integer.parseInt(split[1]));*/
this.defaultHome = BlockLoc.fromString(homeDefault); this.defaultHome = BlockLoc.fromString(homeDefault);
} catch (NumberFormatException ignored) { } catch (NumberFormatException ignored) {
this.defaultHome = null; this.defaultHome = null;
@@ -658,8 +655,10 @@ public abstract class PlotArea implements ComponentLike {
TranslatableCaption.of("height.height_limit"), TranslatableCaption.of("height.height_limit"),
TagResolver.builder() TagResolver.builder()
.tag("minHeight", Tag.inserting(Component.text(minBuildHeight))) .tag("minHeight", Tag.inserting(Component.text(minBuildHeight)))
.tag("maxHeight", .tag(
Tag.inserting(Component.text(maxBuildHeight))).build() "maxHeight",
Tag.inserting(Component.text(maxBuildHeight))
).build()
); );
// Return true if "failed" as the method will always be inverted otherwise // Return true if "failed" as the method will always be inverted otherwise
return true; return true;

View File

@@ -106,6 +106,17 @@ public final class PlotId {
return PlotId.of(hash >> 16, hash & 0xFFFF); return PlotId.of(hash >> 16, hash & 0xFFFF);
} }
/**
* Get a copy of the plot ID
*
* @return Plot ID copy
* @deprecated PlotId is immutable, copy is not required.
*/
@Deprecated(forRemoval = true, since = "6.10.2")
public @NonNull PlotId copy() {
return this;
}
/** /**
* Get the ID X component * Get the ID X component
* *

View File

@@ -222,6 +222,17 @@ public final class PlotModificationManager {
if (isDelete) { if (isDelete) {
this.removeSign(); this.removeSign();
} }
PlotUnlinkEvent event = PlotSquared.get().getEventDispatcher()
.callUnlink(
this.plot.getArea(),
this.plot,
true,
!isDelete,
isDelete ? PlotUnlinkEvent.REASON.DELETE : PlotUnlinkEvent.REASON.CLEAR
);
if (event.getEventResult() != Result.DENY && this.unlinkPlot(event.isCreateRoad(), event.isCreateSign())) {
PlotSquared.get().getEventDispatcher().callPostUnlink(plot, event.getReason());
}
final PlotManager manager = this.plot.getArea().getPlotManager(); final PlotManager manager = this.plot.getArea().getPlotManager();
Runnable run = new Runnable() { Runnable run = new Runnable() {
@Override @Override
@@ -272,21 +283,7 @@ public final class PlotModificationManager {
manager.clearPlot(current, this, actor, null); manager.clearPlot(current, this, actor, null);
} }
}; };
PlotUnlinkEvent event = PlotSquared.get().getEventDispatcher()
.callUnlink(
this.plot.getArea(),
this.plot,
true,
!isDelete,
isDelete ? PlotUnlinkEvent.REASON.DELETE : PlotUnlinkEvent.REASON.CLEAR
);
if (event.getEventResult() != Result.DENY) {
if (this.unlinkPlot(event.isCreateRoad(), event.isCreateSign(), run)) {
PlotSquared.get().getEventDispatcher().callPostUnlink(plot, event.getReason());
}
} else {
run.run(); run.run();
}
return true; return true;
} }
@@ -326,23 +323,7 @@ public final class PlotModificationManager {
* @return success/!cancelled * @return success/!cancelled
*/ */
public boolean unlinkPlot(final boolean createRoad, final boolean createSign) { public boolean unlinkPlot(final boolean createRoad, final boolean createSign) {
return unlinkPlot(createRoad, createSign, null);
}
/**
* Unlink the plot and all connected plots.
*
* @param createRoad whether to recreate road
* @param createSign whether to recreate signs
* @param whenDone Task to run when unlink is complete
* @return success/!cancelled
* @since 6.10.9
*/
public boolean unlinkPlot(final boolean createRoad, final boolean createSign, final Runnable whenDone) {
if (!this.plot.isMerged()) { if (!this.plot.isMerged()) {
if (whenDone != null) {
whenDone.run();
}
return false; return false;
} }
final Set<Plot> plots = this.plot.getConnectedPlots(); final Set<Plot> plots = this.plot.getConnectedPlots();
@@ -387,17 +368,14 @@ public final class PlotModificationManager {
current.getPlotModificationManager().setSign(PlayerManager.resolveName(current.getOwnerAbs()).getComponent( current.getPlotModificationManager().setSign(PlayerManager.resolveName(current.getOwnerAbs()).getComponent(
LocaleHolder.console())); LocaleHolder.console()));
} }
if (whenDone != null) {
TaskManager.runTask(whenDone);
}
})); }));
} else if (whenDone != null) {
queue.setCompleteTask(whenDone);
} }
if (createRoad) { if (createRoad) {
manager.finishPlotUnlink(ids, queue); manager.finishPlotUnlink(ids, queue);
} }
if (queue != null) {
queue.enqueue(); queue.enqueue();
}
return true; return true;
} }

View File

@@ -79,14 +79,6 @@ public class PlotSettings {
this.ratings = ratings; this.ratings = ratings;
} }
public boolean setMerged(int direction, boolean merged) {
if (this.merged[direction] != merged) {
this.merged[direction] = merged;
return true;
}
return false;
}
public boolean setMerged(Direction direction, boolean merged) { public boolean setMerged(Direction direction, boolean merged) {
if (Direction.ALL == direction) { if (Direction.ALL == direction) {
throw new IllegalArgumentException("You cannot use Direction.ALL in this method!"); throw new IllegalArgumentException("You cannot use Direction.ALL in this method!");

View File

@@ -20,13 +20,6 @@ package com.plotsquared.core.plot.comment;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
public record PlotComment( public record PlotComment(String world, PlotId id, String comment, String senderName, String inbox, long timestamp) {
String world,
PlotId id,
String comment,
String senderName,
String inbox,
long timestamp
) {
} }

View File

@@ -19,6 +19,7 @@
package com.plotsquared.core.plot.expiration; package com.plotsquared.core.plot.expiration;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.plotsquared.core.PlotPlatform;
import com.plotsquared.core.PlotSquared; import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
@@ -62,6 +63,11 @@ import java.util.concurrent.ConcurrentLinkedDeque;
public class ExpireManager { public class ExpireManager {
/**
* @deprecated Use {@link PlotPlatform#expireManager()} instead
*/
@Deprecated(forRemoval = true, since = "6.10.2")
public static ExpireManager IMP;
private final ConcurrentHashMap<UUID, Long> dates_cache; private final ConcurrentHashMap<UUID, Long> dates_cache;
private final ConcurrentHashMap<UUID, Long> account_age_cache; private final ConcurrentHashMap<UUID, Long> account_age_cache;
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;

View File

@@ -154,6 +154,7 @@ public class ExpiryTask {
/** /**
* Returns {@code true} if this task respects unknown owners * Returns {@code true} if this task respects unknown owners
*
* @return {@code true} if unknown owners should be counted as never online * @return {@code true} if unknown owners should be counted as never online
* @since 6.4.0 * @since 6.4.0
*/ */

View File

@@ -19,7 +19,6 @@
package com.plotsquared.core.plot.flag.implementations; package com.plotsquared.core.plot.flag.implementations;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.InternalFlag; import com.plotsquared.core.plot.flag.InternalFlag;
import com.plotsquared.core.plot.flag.types.ListFlag; import com.plotsquared.core.plot.flag.types.ListFlag;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
@@ -34,7 +33,7 @@ public class AnalysisFlag extends ListFlag<Integer, AnalysisFlag> implements Int
} }
@Override @Override
public AnalysisFlag parse(@NonNull String input) throws FlagParseException { public AnalysisFlag parse(@NonNull String input) {
final String[] split = input.split(","); final String[] split = input.split(",");
final List<Integer> numbers = new ArrayList<>(); final List<Integer> numbers = new ArrayList<>();
for (final String element : split) { for (final String element : split) {

View File

@@ -27,7 +27,7 @@ public class BeaconEffectsFlag extends BooleanFlag<BeaconEffectsFlag> {
public static final BeaconEffectsFlag BEACON_EFFECT_TRUE = new BeaconEffectsFlag(true); public static final BeaconEffectsFlag BEACON_EFFECT_TRUE = new BeaconEffectsFlag(true);
public static final BeaconEffectsFlag BEACON_EFFECT_FALSE = new BeaconEffectsFlag(false); public static final BeaconEffectsFlag BEACON_EFFECT_FALSE = new BeaconEffectsFlag(false);
private BeaconEffectsFlag(boolean value){ private BeaconEffectsFlag(boolean value) {
super(value, TranslatableCaption.of("flags.flag_description_beacon_effect")); super(value, TranslatableCaption.of("flags.flag_description_beacon_effect"));
} }

View File

@@ -19,7 +19,6 @@
package com.plotsquared.core.plot.flag.implementations; package com.plotsquared.core.plot.flag.implementations;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.types.ListFlag; import com.plotsquared.core.plot.flag.types.ListFlag;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
@@ -39,7 +38,7 @@ public class BlockedCmdsFlag extends ListFlag<String, BlockedCmdsFlag> {
} }
@Override @Override
public BlockedCmdsFlag parse(@NonNull String input) throws FlagParseException { public BlockedCmdsFlag parse(@NonNull String input) {
return flagOf(Arrays.asList(input.split(","))); return flagOf(Arrays.asList(input.split(",")));
} }

View File

@@ -57,16 +57,25 @@ public class DenyTeleportFlag extends PlotFlag<DenyTeleportFlag.DeniedGroup, Den
} }
final boolean result; final boolean result;
switch (value) { switch (value) {
case TRUSTED -> result = !plot.getTrusted().contains(player.getUUID()); case TRUSTED:
case MEMBERS -> result = !plot.getMembers().contains(player.getUUID()); result = !plot.getTrusted().contains(player.getUUID());
case NONMEMBERS -> result = plot.isAdded(player.getUUID()); break;
case NONTRUSTED -> result = case MEMBERS:
result = !plot.getMembers().contains(player.getUUID());
break;
case NONMEMBERS:
result = plot.isAdded(player.getUUID());
break;
case NONTRUSTED:
result =
plot.getTrusted().contains(player.getUUID()) || plot.isOwner(player.getUUID()); plot.getTrusted().contains(player.getUUID()) || plot.isOwner(player.getUUID());
case NONOWNERS -> result = plot.isOwner(player.getUUID()); break;
default -> { case NONOWNERS:
result = plot.isOwner(player.getUUID());
break;
default:
return true; return true;
} }
}
return result || player.hasPermission("plots.admin.entry.denied"); return result || player.hasPermission("plots.admin.entry.denied");
} }

View File

@@ -19,7 +19,6 @@
package com.plotsquared.core.plot.flag.implementations; package com.plotsquared.core.plot.flag.implementations;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.PlotFlag; import com.plotsquared.core.plot.flag.PlotFlag;
import com.sk89q.worldedit.world.gamemode.GameMode; import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldedit.world.gamemode.GameModes;
@@ -57,7 +56,7 @@ public class GamemodeFlag extends PlotFlag<GameMode, GamemodeFlag> {
} }
@Override @Override
public GamemodeFlag parse(@NonNull String input) throws FlagParseException { public GamemodeFlag parse(@NonNull String input) {
return switch (input) { return switch (input) {
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE); case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE); case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);

View File

@@ -19,7 +19,6 @@
package com.plotsquared.core.plot.flag.implementations; package com.plotsquared.core.plot.flag.implementations;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.PlotFlag; import com.plotsquared.core.plot.flag.PlotFlag;
import com.sk89q.worldedit.world.gamemode.GameMode; import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldedit.world.gamemode.GameModes;
@@ -52,7 +51,7 @@ public class GuestGamemodeFlag extends PlotFlag<GameMode, GuestGamemodeFlag> {
} }
@Override @Override
public GuestGamemodeFlag parse(@NonNull String input) throws FlagParseException { public GuestGamemodeFlag parse(@NonNull String input) {
return switch (input) { return switch (input) {
case "creative", "c", "1" -> flagOf(GameModes.CREATIVE); case "creative", "c", "1" -> flagOf(GameModes.CREATIVE);
case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE); case "adventure", "a", "2" -> flagOf(GameModes.ADVENTURE);

View File

@@ -27,7 +27,7 @@ public class ProjectilesFlag extends BooleanFlag<ProjectilesFlag> {
public static final ProjectilesFlag PROJECTILES_TRUE = new ProjectilesFlag(true); public static final ProjectilesFlag PROJECTILES_TRUE = new ProjectilesFlag(true);
public static final ProjectilesFlag PROJECTILES_FALSE = new ProjectilesFlag(false); public static final ProjectilesFlag PROJECTILES_FALSE = new ProjectilesFlag(false);
private ProjectilesFlag(boolean value){ private ProjectilesFlag(boolean value) {
super(value, TranslatableCaption.of("flags.flag_description_projectiles")); super(value, TranslatableCaption.of("flags.flag_description_projectiles"));
} }

View File

@@ -30,7 +30,6 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>> public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>>
extends ListFlag<BlockTypeWrapper, F> { extends ListFlag<BlockTypeWrapper, F> {
@@ -73,11 +72,9 @@ public abstract class BlockTypeListFlag<F extends ListFlag<BlockTypeWrapper, F>>
public Collection<String> getTabCompletions() { public Collection<String> getTabCompletions() {
final Collection<String> tabCompletions = new ArrayList<>(); final Collection<String> tabCompletions = new ArrayList<>();
tabCompletions.addAll( tabCompletions.addAll(
BlockType.REGISTRY.keySet().stream().map(val -> val.replace("minecraft:", "")) BlockType.REGISTRY.keySet().stream().map(val -> val.replace("minecraft:", "")).toList());
.collect(Collectors.toList()));
tabCompletions.addAll( tabCompletions.addAll(
BlockCategory.REGISTRY.keySet().stream().map(val -> "#" + val.replace("minecraft:", "")) BlockCategory.REGISTRY.keySet().stream().map(val -> "#" + val.replace("minecraft:", "")).toList());
.collect(Collectors.toList()));
return tabCompletions; return tabCompletions;
} }

View File

@@ -76,10 +76,7 @@ public abstract class TimedFlag<T, F extends PlotFlag<TimedFlag.Timed<T>, F>>
return getValue().toString(); return getValue().toString();
} }
public record Timed<T>( public record Timed<T>(int interval, T value) {
int interval,
T value
) {
@Override @Override
public String toString() { public String toString() {

View File

@@ -76,6 +76,7 @@ public class SinglePlotArea extends GridPlotWorld {
* Returns true if the given string matches the naming system used to identify single plot worlds * Returns true if the given string matches the naming system used to identify single plot worlds
* e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world * e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world
* {@link com.plotsquared.core.plot.PlotArea}. * {@link com.plotsquared.core.plot.PlotArea}.
*
* @since 6.1.4 * @since 6.1.4
*/ */
public static boolean isSinglePlotWorld(String worldName) { public static boolean isSinglePlotWorld(String worldName) {
@@ -193,17 +194,6 @@ public class SinglePlotArea extends GridPlotWorld {
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
// String worldName = plot.getWorldName();
// World world = Bukkit.getWorld(worldName);
// if (world != null) {
// return world;
// }
// WorldCreator wc = new WorldCreator(worldName);
// wc.generator("PlotSquared:single");
// wc.environment(World.Environment.NORMAL);
// wc.type(WorldType.FLAT);
// return AsyncWorld.create(wc);
} }

View File

@@ -36,7 +36,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
* The min and max points of this queue are offset according to the minimum point given in the constructor, and the offsets set * The min and max points of this queue are offset according to the minimum point given in the constructor, and the offsets set
* in {@link BlockArrayCacheScopedQueueCoordinator#setOffsetX(int)} and * in {@link BlockArrayCacheScopedQueueCoordinator#setOffsetX(int)} and
* {@link BlockArrayCacheScopedQueueCoordinator#setOffsetZ(int)} * {@link BlockArrayCacheScopedQueueCoordinator#setOffsetZ(int)}
* * <p>
* Internal use only. Subject to change at any time and created for specific use cases. * Internal use only. Subject to change at any time and created for specific use cases.
*/ */
@NotPublic @NotPublic
@@ -54,6 +54,7 @@ public class BlockArrayCacheScopedQueueCoordinator extends ZeroedDelegateScopedQ
private final int scopeMaxZ; private final int scopeMaxZ;
private int offsetX = 0; private int offsetX = 0;
private int offsetZ = 0; private int offsetZ = 0;
/** /**
* Construct a new instance * Construct a new instance
* *

View File

@@ -29,6 +29,7 @@ public abstract class ChunkCoordinator implements Runnable {
/** /**
* Cancel the chunk coordinator. * Cancel the chunk coordinator.
*
* @since 6.0.10 * @since 6.0.10
*/ */
public abstract void cancel(); public abstract void cancel();

View File

@@ -203,7 +203,7 @@ public abstract class QueueCoordinator {
* @return success or not * @return success or not
* @deprecated Biomes now take XYZ, see {@link #setBiome(int, int, int, BiomeType)} * @deprecated Biomes now take XYZ, see {@link #setBiome(int, int, int, BiomeType)}
* <br> * <br>
* Scheduled for removal once we drop the support for versions not supporting 3D biomes, 1.18 and earlier. * Scheduled for removal once we drop the support for versions not supporting 3D biomes.
*/ */
@Deprecated(forRemoval = true, since = "6.0.0") @Deprecated(forRemoval = true, since = "6.0.0")
public abstract boolean setBiome(int x, int z, @NonNull BiomeType biome); public abstract boolean setBiome(int x, int z, @NonNull BiomeType biome);

View File

@@ -41,9 +41,6 @@ public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinat
private final int minX; private final int minX;
private final int minZ; private final int minZ;
private final int maxX;
private final int maxZ;
private final int dx; private final int dx;
private final int dz; private final int dz;
@@ -59,11 +56,8 @@ public class ZeroedDelegateScopedQueueCoordinator extends DelegateQueueCoordinat
this.minX = min.getX(); this.minX = min.getX();
this.minZ = min.getZ(); this.minZ = min.getZ();
this.maxX = max.getX(); this.dx = max.getX() - minX;
this.maxZ = max.getZ(); this.dz = max.getZ() - minZ;
this.dx = maxX - minX;
this.dz = maxZ - minZ;
} }
@Override @Override

View File

@@ -93,7 +93,7 @@ public class DefaultProgressSubscriber implements ProgressSubscriber {
this.actor = actor; this.actor = actor;
this.interval = TaskTime.ms(interval); this.interval = TaskTime.ms(interval);
this.wait = TaskTime.ms(wait); this.wait = TaskTime.ms(wait);
this.caption = Objects.requireNonNullElseGet(caption, () -> TranslatableCaption.of("working.progress")); this.caption = Objects.requireNonNullElse(caption, TranslatableCaption.of("working.progress"));
} }
@Override @Override

View File

@@ -1,94 +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.core.services.plots;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotId;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
/**
* Crate a new auto query
*
* @param player Player to claim for
* @param startId Plot ID to start searching from
* @param sizeX Number of plots along the X axis
* @param sizeZ Number of plots along the Z axis
* @param plotArea Plot area to search in
*/
public record AutoQuery(
@NonNull PlotPlayer<?> player,
@Nullable PlotId startId,
int sizeX,
int sizeZ,
@NonNull PlotArea plotArea
) {
/**
* Get the player that the plots are meant for
*
* @return Player
*/
@Override
public @NonNull PlotPlayer<?> player() {
return this.player;
}
/**
* Get the plot ID to start searching from
*
* @return Start ID
*/
@Override
public @Nullable PlotId startId() {
return this.startId;
}
/**
* Get the number of plots along the X axis
*
* @return Number of plots along the X axis
*/
@Override
public int sizeX() {
return this.sizeX;
}
/**
* Get the number of plots along the Z axis
*
* @return Number of plots along the Z axis
*/
@Override
public int sizeZ() {
return this.sizeZ;
}
/**
* Get the plot area to search in
*
* @return Plot area
*/
@Override
public @NonNull PlotArea plotArea() {
return this.plotArea;
}
}

View File

@@ -21,7 +21,9 @@ package com.plotsquared.core.services.plots;
import cloud.commandframework.services.types.Service; import cloud.commandframework.services.types.Service;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotAreaType; import com.plotsquared.core.plot.PlotAreaType;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
@@ -32,12 +34,87 @@ import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Predicate; import java.util.function.Predicate;
public interface AutoService extends Service<AutoQuery, List<Plot>> { public interface AutoService extends Service<AutoService.AutoQuery, List<Plot>> {
Cache<PlotId, Plot> plotCandidateCache = CacheBuilder.newBuilder() Cache<PlotId, Plot> plotCandidateCache = CacheBuilder.newBuilder()
.expireAfterWrite(20, TimeUnit.SECONDS).build(); .expireAfterWrite(20, TimeUnit.SECONDS).build();
Object plotLock = new Object(); Object plotLock = new Object();
record AutoQuery(PlotPlayer<?> player, PlotId startId, int sizeX, int sizeZ, PlotArea plotArea) {
/**
* Crate a new auto query
*
* @param player Player to claim for
* @param startId Plot ID to start searching from
* @param sizeX Number of plots along the X axis
* @param sizeZ Number of plots along the Z axis
* @param plotArea Plot area to search in
*/
public AutoQuery(
final @NonNull PlotPlayer<?> player, final @Nullable PlotId startId,
final int sizeX, final int sizeZ, final @NonNull PlotArea plotArea
) {
this.player = player;
this.startId = startId;
this.sizeX = sizeX;
this.sizeZ = sizeZ;
this.plotArea = plotArea;
}
/**
* Get the player that the plots are meant for
*
* @return Player
*/
@Override
public @NonNull PlotPlayer<?> player() {
return this.player;
}
/**
* Get the plot ID to start searching from
*
* @return Start ID
*/
@Override
public @Nullable PlotId startId() {
return this.startId;
}
/**
* Get the number of plots along the X axis
*
* @return Number of plots along the X axis
*/
@Override
public int sizeX() {
return this.sizeX;
}
/**
* Get the number of plots along the Z axis
*
* @return Number of plots along the Z axis
*/
@Override
public int sizeZ() {
return this.sizeZ;
}
/**
* Get the plot area to search in
*
* @return Plot area
*/
@Override
public @NonNull PlotArea plotArea() {
return this.plotArea;
}
}
final class DefaultAutoService implements AutoService { final class DefaultAutoService implements AutoService {
@Override @Override
@@ -47,6 +124,7 @@ public interface AutoService extends Service<AutoQuery, List<Plot>> {
} }
final class SinglePlotService implements AutoService, Predicate<AutoQuery> { final class SinglePlotService implements AutoService, Predicate<AutoQuery> {
@Nullable @Nullable
@@ -72,11 +150,12 @@ public interface AutoService extends Service<AutoQuery, List<Plot>> {
@Override @Override
public boolean test(final @NonNull AutoQuery autoQuery) { public boolean test(final @NonNull AutoQuery autoQuery) {
return autoQuery.sizeX() == 1 && autoQuery.sizeZ() == 1; return autoQuery.sizeX == 1 && autoQuery.sizeZ == 1;
} }
} }
final class MultiPlotService implements AutoService, Predicate<AutoQuery> { final class MultiPlotService implements AutoService, Predicate<AutoQuery> {
@Override @Override

View File

@@ -72,7 +72,7 @@ public enum CommonSetupSteps implements SetupStep {
@Override @Override
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String arg) { public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String arg) {
Optional<PlotAreaType> plotAreaType = PlotAreaType.fromString(arg); Optional<PlotAreaType> plotAreaType = PlotAreaType.fromString(arg);
if (!plotAreaType.isPresent()) { if (plotAreaType.isEmpty()) {
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_world_type_error")); plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_world_type_error"));
return this; return this;
} }
@@ -180,8 +180,7 @@ public enum CommonSetupSteps implements SetupStep {
@Override @Override
public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String argument) { public SetupStep handleInput(PlotPlayer<?> plotPlayer, PlotAreaBuilder builder, String argument) {
Optional<PlotAreaTerrainType> optTerrain; Optional<PlotAreaTerrainType> optTerrain;
if (!(optTerrain = PlotAreaTerrainType.fromString(argument)) if ((optTerrain = PlotAreaTerrainType.fromString(argument)).isEmpty()) {
.isPresent()) {
plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_partial_area_error")); plotPlayer.sendMessage(TranslatableCaption.of("setup.setup_partial_area_error"));
return this; return this;
} }

View File

@@ -23,10 +23,7 @@ import com.plotsquared.core.configuration.ConfigurationNode;
/** /**
* This class wraps an array of {@link ConfigurationNode}s. * This class wraps an array of {@link ConfigurationNode}s.
*/ */
public record SettingsNodesWrapper( public record SettingsNodesWrapper(ConfigurationNode[] settingsNodes, SetupStep afterwards) {
ConfigurationNode[] settingsNodes,
SetupStep afterwards
) {
/** /**
* Returns the first step of this wrapper or the step or the * Returns the first step of this wrapper or the step or the

View File

@@ -31,8 +31,6 @@ import com.sk89q.worldedit.world.registry.LegacyMapper;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Map;
/** /**
* {@link BlockState} related utility methods * {@link BlockState} related utility methods
*/ */
@@ -109,34 +107,4 @@ public final class BlockUtil {
} }
} }
/**
* Parse a comma delimited list of block states
*
* @param commaDelimited List of block states
* @return Parsed block states
*/
public static @NonNull BlockState[] parse(final @NonNull String commaDelimited) {
final String[] split = commaDelimited.split(",(?![^\\(\\[]*[\\]\\)])");
final BlockState[] result = new BlockState[split.length];
for (int i = 0; i < split.length; i++) {
result[i] = get(split[i]);
}
return result;
}
/**
* Deserialize a serialized {@link BlockState}
*
* @param map Serialized block state
* @return Deserialized block state, or {@code null} if the map is
* not a properly serialized block state
*/
public static @Nullable BlockState deserialize(final @NonNull Map<String, Object> map) {
if (map.containsKey("material")) {
final Object object = map.get("material");
return get(object.toString());
}
return null;
}
} }

View File

@@ -18,10 +18,6 @@
*/ */
package com.plotsquared.core.util; package com.plotsquared.core.util;
import com.plotsquared.core.location.Location;
import com.sk89q.worldedit.math.BlockVector2;
import org.checkerframework.checker.nullness.qual.NonNull;
/** /**
* This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area. * This cache is used for world generation and just saves a bit of calculation time when checking if something is in the plot area.
*/ */
@@ -107,22 +103,4 @@ public class ChunkUtil {
return z_loc[j]; return z_loc[j];
} }
/**
* Returns true if the region pos1-pos2 contains the chunk
*
* @param pos1 Region minimum point
* @param pos2 Region maximum point
* @param chunk BlockVector2 of chunk coordinates
* @return {@code true} if the region pos1-pos2 contains the chunk
*/
public static boolean isWholeChunk(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockVector2 chunk) {
int x1 = pos1.getX();
int z1 = pos1.getZ();
int x2 = pos2.getX();
int z2 = pos2.getZ();
int cx = chunk.getX() << 4;
int cz = chunk.getZ() << 4;
return cx > x1 && cz > z1 && cx < x2 && cz < z2;
}
} }

View File

@@ -42,27 +42,15 @@ public class EntityUtil {
} }
private static int capNumeral(final @NonNull String flagName) { private static int capNumeral(final @NonNull String flagName) {
int i; int i = switch (flagName) {
switch (flagName) { case "mob-cap" -> CAP_MOB;
case "mob-cap": case "hostile-cap" -> CAP_MONSTER;
i = CAP_MOB; case "animal-cap" -> CAP_ANIMAL;
break; case "vehicle-cap" -> CAP_VEHICLE;
case "hostile-cap": case "misc-cap" -> CAP_MISC;
i = CAP_MONSTER; // "entity-cap"
break; default -> CAP_ENTITY;
case "animal-cap": };
i = CAP_ANIMAL;
break;
case "vehicle-cap":
i = CAP_VEHICLE;
break;
case "misc-cap":
i = CAP_MISC;
break;
case "entity-cap":
default:
i = CAP_ENTITY;
}
return i; return i;
} }

View File

@@ -45,7 +45,6 @@ import com.plotsquared.core.events.PlotFlagRemoveEvent;
import com.plotsquared.core.events.PlotMergeEvent; import com.plotsquared.core.events.PlotMergeEvent;
import com.plotsquared.core.events.PlotRateEvent; import com.plotsquared.core.events.PlotRateEvent;
import com.plotsquared.core.events.PlotUnlinkEvent; import com.plotsquared.core.events.PlotUnlinkEvent;
import com.plotsquared.core.events.RemoveRoadEntityEvent;
import com.plotsquared.core.events.TeleportCause; import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.events.post.PostPlayerAutoPlotEvent; import com.plotsquared.core.events.post.PostPlayerAutoPlotEvent;
import com.plotsquared.core.events.post.PostPlotChangeOwnerEvent; import com.plotsquared.core.events.post.PostPlotChangeOwnerEvent;
@@ -72,7 +71,6 @@ import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
@@ -300,12 +298,6 @@ public class EventDispatcher {
return event; return event;
} }
public RemoveRoadEntityEvent callRemoveRoadEntity(Entity entity) {
RemoveRoadEntityEvent event = new RemoveRoadEntityEvent(entity);
eventBus.post(event);
return event;
}
public void doJoinTask(final PlotPlayer<?> player) { public void doJoinTask(final PlotPlayer<?> player) {
if (player == null) { if (player == null) {
return; //possible future warning message to figure out where we are retrieving null return; //possible future warning message to figure out where we are retrieving null
@@ -359,13 +351,11 @@ public class EventDispatcher {
} }
} }
switch (type) { switch (type) {
case TELEPORT_OBJECT -> { case TELEPORT_OBJECT:
return false; return false;
} case READ:
case READ -> {
return true; return true;
} case INTERACT_BLOCK: {
case INTERACT_BLOCK -> {
if (plot == null) { if (plot == null) {
final List<BlockTypeWrapper> use = area.getRoadFlag(UseFlag.class); final List<BlockTypeWrapper> use = area.getRoadFlag(UseFlag.class);
for (final BlockTypeWrapper blockTypeWrapper : use) { for (final BlockTypeWrapper blockTypeWrapper : use) {
@@ -400,7 +390,7 @@ public class EventDispatcher {
} }
return false; return false;
} }
case TRIGGER_PHYSICAL -> { case TRIGGER_PHYSICAL: {
if (plot == null) { if (plot == null) {
final List<BlockTypeWrapper> use = area.getRoadFlag(UseFlag.class); final List<BlockTypeWrapper> use = area.getRoadFlag(UseFlag.class);
for (final BlockTypeWrapper blockTypeWrapper : use) { for (final BlockTypeWrapper blockTypeWrapper : use) {
@@ -432,7 +422,7 @@ public class EventDispatcher {
false false
); );
} }
case SPAWN_MOB -> { case SPAWN_MOB: {
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
@@ -474,7 +464,7 @@ public class EventDispatcher {
} }
return false; return false;
} }
case PLACE_MISC -> { case PLACE_MISC: {
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
@@ -516,7 +506,7 @@ public class EventDispatcher {
} }
return false; return false;
} }
case PLACE_VEHICLE -> { case PLACE_VEHICLE:
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
@@ -528,9 +518,8 @@ public class EventDispatcher {
); );
} }
return plot.getFlag(VehiclePlaceFlag.class); return plot.getFlag(VehiclePlaceFlag.class);
} default:
default -> { break;
}
} }
return true; return true;
} }

View File

@@ -18,9 +18,6 @@
*/ */
package com.plotsquared.core.util; package com.plotsquared.core.util;
public record FileBytes( public record FileBytes(String path, byte[] data) {
String path,
byte[] data
) {
} }

Some files were not shown because too many files have changed in this diff Show More