mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-04 22:54:43 +02:00
Compare commits
29 Commits
docs/v6/ja
...
6.5.1
Author | SHA1 | Date | |
---|---|---|---|
c2fd4edad5 | |||
78b8696778 | |||
e653961385 | |||
b21d12fd52 | |||
7557df96c7 | |||
61797c3aff | |||
78125ff1e2 | |||
d7c8715b25 | |||
34f005c244 | |||
6fbd1376ca | |||
951767dc64 | |||
16928b05f1 | |||
fff14b05cb | |||
e619c867e9 | |||
543284e016 | |||
0d78ba5f35 | |||
9ba2b62fc2 | |||
f10ee27fdd | |||
3278ce1fe9 | |||
fefb0334bd | |||
d06a827e31 | |||
10bb520f3a | |||
126aa53b61 | |||
ac71046feb | |||
7c290e6bd0 | |||
4d297cc829 | |||
5ab410a5c5 | |||
1f28bac955 | |||
92c54de5e9 |
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -7,7 +7,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
||||||
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki).
|
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
|
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -4,5 +4,5 @@ contact_links:
|
|||||||
url: https://discord.gg/intellectualsites
|
url: https://discord.gg/intellectualsites
|
||||||
about: Our support Discord, please ask questions and seek support here.
|
about: Our support Discord, please ask questions and seek support here.
|
||||||
- name: PlotSquared Wiki
|
- name: PlotSquared Wiki
|
||||||
url: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki
|
url: https://intellectualsites.github.io/plotsquared-documentation/
|
||||||
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -7,7 +7,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
||||||
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki).
|
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -4,6 +4,7 @@ on: [ pull_request, push ]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
|
37
.github/workflows/codeql.yml
vendored
Normal file
37
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ v6 ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ v6 ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'java' ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
20
.github/workflows/rebase.yml
vendored
20
.github/workflows/rebase.yml
vendored
@ -1,20 +0,0 @@
|
|||||||
name: Rebase Pull Request
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
rebase:
|
|
||||||
name: Rebase
|
|
||||||
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && github.event.comment.author_association == 'MEMBER'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v2.4.0
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.REBASE_TOKEN }}
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Automatic Rebase
|
|
||||||
uses: cirrus-actions/rebase@1.5
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.REBASE_TOKEN }}
|
|
3
.github/workflows/release-drafter.yml
vendored
3
.github/workflows/release-drafter.yml
vendored
@ -11,8 +11,9 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update_release_draft:
|
update_release_draft:
|
||||||
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: release-drafter/release-drafter@v5.17.6
|
- uses: release-drafter/release-drafter@v5.18.1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
13
.whitesource
13
.whitesource
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"scanSettings": {
|
|
||||||
"baseBranches": ["v6"]
|
|
||||||
},
|
|
||||||
"checkRunSettings": {
|
|
||||||
"vulnerableCheckRunConclusionLevel": "success",
|
|
||||||
"displayMode": "diff"
|
|
||||||
},
|
|
||||||
"issueSettings": {
|
|
||||||
"minSeverityLevel": "LOW"
|
|
||||||
},
|
|
||||||
"enableRenovate": "true"
|
|
||||||
}
|
|
@ -96,10 +96,10 @@ tasks {
|
|||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://papermc.io/javadocs/paper/1.18/")
|
opt.links("https://papermc.io/javadocs/paper/1.18/")
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.8/")
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
||||||
opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/")
|
opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/")
|
||||||
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString())
|
||||||
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,7 @@ import org.bukkit.GameMode;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Fireball;
|
import org.bukkit.entity.Fireball;
|
||||||
@ -92,6 +93,7 @@ import org.bukkit.event.block.BlockFormEvent;
|
|||||||
import org.bukkit.event.block.BlockFromToEvent;
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
import org.bukkit.event.block.BlockGrowEvent;
|
import org.bukkit.event.block.BlockGrowEvent;
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
|
import org.bukkit.event.block.BlockMultiPlaceEvent;
|
||||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||||
@ -166,7 +168,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
if (Settings.Redstone.DISABLE_OFFLINE) {
|
if (Settings.Redstone.DISABLE_OFFLINE) {
|
||||||
boolean disable = false;
|
boolean disable = false;
|
||||||
if (!plot.getOwner().equals(DBFunc.SERVER)) {
|
if (!DBFunc.SERVER.equals(plot.getOwner())) {
|
||||||
if (plot.isMerged()) {
|
if (plot.isMerged()) {
|
||||||
disable = true;
|
disable = true;
|
||||||
for (UUID owner : plot.getOwners()) {
|
for (UUID owner : plot.getOwners()) {
|
||||||
@ -277,7 +279,7 @@ public class BlockEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area
|
if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
.getMinBuildHeight()) && !Permissions
|
.getMinBuildHeight()) && !Permissions
|
||||||
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -362,7 +364,7 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area
|
} else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
.getMinBuildHeight()) && !Permissions
|
.getMinBuildHeight()) && !Permissions
|
||||||
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -1208,4 +1210,51 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BlockMultiPlaceEvent is called unrelated to the BlockPlaceEvent itself and therefore doesn't respect the cancellation.
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
|
public void onBlockMultiPlace(BlockMultiPlaceEvent event) {
|
||||||
|
// Check if the generic block place event would be cancelled
|
||||||
|
blockCreate(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
||||||
|
Location placedLocation = BukkitUtil.adapt(event.getBlockReplacedState().getLocation());
|
||||||
|
PlotArea area = placedLocation.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot plot = placedLocation.getPlot();
|
||||||
|
|
||||||
|
for (final BlockState state : event.getReplacedBlockStates()) {
|
||||||
|
Location currentLocation = BukkitUtil.adapt(state.getLocation());
|
||||||
|
if (!Permissions.hasPermission(
|
||||||
|
pp,
|
||||||
|
Permission.PERMISSION_ADMIN_BUILD_ROAD
|
||||||
|
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
||||||
|
pp.sendMessage(
|
||||||
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
|
||||||
|
pp.sendMessage(
|
||||||
|
TranslatableCaption.of("height.height_limit"),
|
||||||
|
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
|
||||||
|
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
|||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
@ -191,8 +192,32 @@ public class EntitySpawnListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTeleport(EntityTeleportEvent event) {
|
public void onTeleport(EntityTeleportEvent event) {
|
||||||
Entity ent = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
if (ent instanceof Vehicle || ent instanceof ArmorStand) {
|
Entity fromLocation = event.getEntity();
|
||||||
|
Block toLocation = event.getTo().getBlock();
|
||||||
|
final Location fromLocLocation = BukkitUtil.adapt(fromLocation.getLocation());
|
||||||
|
final PlotArea fromArea = fromLocLocation.getPlotArea();
|
||||||
|
Location toLocLocation = BukkitUtil.adapt(toLocation.getLocation());
|
||||||
|
PlotArea toArea = toLocLocation.getPlotArea();
|
||||||
|
|
||||||
|
if (toArea == null) {
|
||||||
|
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot toPlot = toArea.getOwnedPlot(toLocLocation);
|
||||||
|
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
|
||||||
|
final Plot fromPlot = fromArea.getOwnedPlot(fromLocLocation);
|
||||||
|
|
||||||
|
if (fromPlot != null || toPlot != null) {
|
||||||
|
if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (entity instanceof Vehicle || entity instanceof ArmorStand) {
|
||||||
testNether(event.getEntity());
|
testNether(event.getEntity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import org.bukkit.inventory.InventoryView;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -50,11 +51,15 @@ import java.util.stream.IntStream;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class BukkitInventoryUtil extends InventoryUtil {
|
public class BukkitInventoryUtil extends InventoryUtil {
|
||||||
|
|
||||||
private static ItemStack getItem(PlotItemStack item) {
|
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ItemStack stack = new ItemStack(BukkitAdapter.adapt(item.getType()), item.getAmount());
|
Material material = BukkitAdapter.adapt(item.getType());
|
||||||
|
if (material == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ItemStack stack = new ItemStack(material, item.getAmount());
|
||||||
ItemMeta meta = null;
|
ItemMeta meta = null;
|
||||||
if (item.getName() != null) {
|
if (item.getName() != null) {
|
||||||
meta = stack.getItemMeta();
|
meta = stack.getItemMeta();
|
||||||
@ -104,14 +109,19 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
public boolean setItemChecked(PlotInventory inv, int index, PlotItemStack item) {
|
||||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||||
InventoryView opened = bp.player.getOpenInventory();
|
InventoryView opened = bp.player.getOpenInventory();
|
||||||
if (!inv.isOpen()) {
|
ItemStack stack = getItem(item);
|
||||||
return;
|
if (stack == null) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
opened.setItem(index, getItem(item));
|
if (!inv.isOpen()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
opened.setItem(index, stack);
|
||||||
bp.player.updateInventory();
|
bp.player.updateInventory();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
@SuppressWarnings("deprecation") // Paper deprecation
|
||||||
|
@ -58,9 +58,9 @@ tasks.processResources {
|
|||||||
tasks {
|
tasks {
|
||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.8/")
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
||||||
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString())
|
||||||
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ package com.plotsquared.core.command;
|
|||||||
import com.plotsquared.core.configuration.caption.Caption;
|
import com.plotsquared.core.configuration.caption.Caption;
|
||||||
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,4 +96,16 @@ public enum CommandCategory implements Caption {
|
|||||||
public String getComponent(@NonNull LocaleHolder localeHolder) {
|
public String getComponent(@NonNull LocaleHolder localeHolder) {
|
||||||
return this.caption.getComponent(localeHolder);
|
return this.caption.getComponent(localeHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a player has access to this command category
|
||||||
|
*
|
||||||
|
* @param player The player to check against
|
||||||
|
* @return {@code true} if at least one command of this category can be executed by the player, {@code false} otherwise
|
||||||
|
* @since 6.5.0
|
||||||
|
*/
|
||||||
|
boolean canAccess(PlotPlayer<?> player) {
|
||||||
|
return !MainCommand.getInstance().getCommands(this, player).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ public class Done extends SubCommand {
|
|||||||
long flagValue = System.currentTimeMillis() / 1000;
|
long flagValue = System.currentTimeMillis() / 1000;
|
||||||
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(DoneFlag.class)
|
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(DoneFlag.class)
|
||||||
.createFlagInstance(Long.toString(flagValue));
|
.createFlagInstance(Long.toString(flagValue));
|
||||||
PlotFlagAddEvent event = new PlotFlagAddEvent(plotFlag, plot);
|
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(TranslatableCaption.of("events.event_denied"));
|
player.sendMessage(TranslatableCaption.of("events.event_denied"));
|
||||||
return;
|
return;
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
||||||
@ -44,6 +45,7 @@ import com.plotsquared.core.plot.flag.InternalFlag;
|
|||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.IntegerFlag;
|
import com.plotsquared.core.plot.flag.types.IntegerFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.ListFlag;
|
import com.plotsquared.core.plot.flag.types.ListFlag;
|
||||||
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.StringComparison;
|
import com.plotsquared.core.util.StringComparison;
|
||||||
@ -79,8 +81,12 @@ import java.util.stream.Stream;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class FlagCommand extends Command {
|
public final class FlagCommand extends Command {
|
||||||
|
|
||||||
public FlagCommand() {
|
private final EventDispatcher eventDispatcher;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public FlagCommand(final @NonNull EventDispatcher eventDispatcher) {
|
||||||
super(MainCommand.getInstance(), true);
|
super(MainCommand.getInstance(), true);
|
||||||
|
this.eventDispatcher = eventDispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean sendMessage(PlotPlayer<?> player) {
|
private static boolean sendMessage(PlotPlayer<?> player) {
|
||||||
@ -114,7 +120,7 @@ public final class FlagCommand extends Command {
|
|||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
Template.of(
|
Template.of(
|
||||||
"node",
|
"node",
|
||||||
perm
|
perm + "." + numeric
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -335,7 +341,7 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Plot plot = player.getLocation().getPlotAbs();
|
Plot plot = player.getLocation().getPlotAbs();
|
||||||
PlotFlagAddEvent event = new PlotFlagAddEvent(plotFlag, plot);
|
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
@ -394,7 +400,7 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Plot plot = player.getLocation().getPlotAbs();
|
Plot plot = player.getLocation().getPlotAbs();
|
||||||
PlotFlagAddEvent event = new PlotFlagAddEvent(plotFlag, plot);
|
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
@ -463,7 +469,7 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Plot plot = player.getLocation().getPlotAbs();
|
final Plot plot = player.getLocation().getPlotAbs();
|
||||||
PlotFlagRemoveEvent event = new PlotFlagRemoveEvent(flag, plot);
|
PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(flag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
@ -516,7 +522,7 @@ public final class FlagCommand extends Command {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
PlotFlag<?, ?> plotFlag = parsedFlag.createFlagInstance(list);
|
PlotFlag<?, ?> plotFlag = parsedFlag.createFlagInstance(list);
|
||||||
PlotFlagAddEvent addEvent = new PlotFlagAddEvent(plotFlag, plot);
|
PlotFlagAddEvent addEvent = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (addEvent.getEventResult() == Result.DENY) {
|
if (addEvent.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
|
@ -37,11 +37,11 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
@CommandDeclaration(command = "help",
|
@CommandDeclaration(command = "help",
|
||||||
aliases = "?",
|
aliases = "?",
|
||||||
@ -119,6 +119,9 @@ public class Help extends Command {
|
|||||||
TextComponent.Builder builder = Component.text();
|
TextComponent.Builder builder = Component.text();
|
||||||
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player)));
|
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player)));
|
||||||
for (CommandCategory c : CommandCategory.values()) {
|
for (CommandCategory c : CommandCategory.values()) {
|
||||||
|
if (!c.canAccess(player)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
builder.append(Component.newline()).append(MINI_MESSAGE
|
||||||
.parse(
|
.parse(
|
||||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
||||||
@ -152,12 +155,26 @@ public class Help extends Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
return Stream.of("claiming", "teleport", "settings", "chat", "schematic", "appearance", "info", "debug",
|
final String argument = args[0].toLowerCase(Locale.ENGLISH);
|
||||||
"administration", "all"
|
List<Command> result = new ArrayList<>();
|
||||||
)
|
|
||||||
.filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH)))
|
for (final CommandCategory category : CommandCategory.values()) {
|
||||||
.map(value -> new Command(null, false, value, "", RequiredType.NONE, null) {
|
if (!category.canAccess(player)) {
|
||||||
}).collect(Collectors.toList());
|
continue;
|
||||||
|
}
|
||||||
|
String name = category.name().toLowerCase();
|
||||||
|
if (!name.startsWith(argument)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
result.add(new Command(null, false, name, "", RequiredType.NONE, null) {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// add the category "all"
|
||||||
|
if ("all".startsWith(argument)) {
|
||||||
|
result.add(new Command(null, false, "all", "", RequiredType.NONE, null) {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -38,10 +38,13 @@ import com.plotsquared.core.plot.PlotInventory;
|
|||||||
import com.plotsquared.core.plot.PlotItemStack;
|
import com.plotsquared.core.plot.PlotItemStack;
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MusicFlag;
|
import com.plotsquared.core.plot.flag.implementations.MusicFlag;
|
||||||
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.InventoryUtil;
|
import com.plotsquared.core.util.InventoryUtil;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
|
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.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -63,10 +66,12 @@ public class Music extends SubCommand {
|
|||||||
);
|
);
|
||||||
|
|
||||||
private final InventoryUtil inventoryUtil;
|
private final InventoryUtil inventoryUtil;
|
||||||
|
private final EventDispatcher eventDispatcher;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public Music(final @Nullable InventoryUtil inventoryUtil) {
|
public Music(final @Nullable InventoryUtil inventoryUtil, final @NonNull EventDispatcher eventDispatcher) {
|
||||||
this.inventoryUtil = inventoryUtil;
|
this.inventoryUtil = inventoryUtil;
|
||||||
|
this.eventDispatcher = eventDispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -104,7 +109,7 @@ public class Music extends SubCommand {
|
|||||||
if (item.getType() == ItemTypes.BEDROCK) {
|
if (item.getType() == ItemTypes.BEDROCK) {
|
||||||
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class)
|
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class)
|
||||||
.createFlagInstance(item.getType());
|
.createFlagInstance(item.getType());
|
||||||
PlotFlagRemoveEvent event = new PlotFlagRemoveEvent(plotFlag, plot);
|
PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
getPlayer().sendMessage(
|
getPlayer().sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
@ -121,7 +126,7 @@ public class Music extends SubCommand {
|
|||||||
} else if (item.getName().toLowerCase(Locale.ENGLISH).contains("disc")) {
|
} else if (item.getName().toLowerCase(Locale.ENGLISH).contains("disc")) {
|
||||||
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class)
|
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class)
|
||||||
.createFlagInstance(item.getType());
|
.createFlagInstance(item.getType());
|
||||||
PlotFlagAddEvent event = new PlotFlagAddEvent(plotFlag, plot);
|
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
getPlayer().sendMessage(
|
getPlayer().sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
@ -144,8 +149,14 @@ public class Music extends SubCommand {
|
|||||||
for (final String disc : DISCS) {
|
for (final String disc : DISCS) {
|
||||||
final String name = String.format("<gold>%s</gold>", disc);
|
final String name = String.format("<gold>%s</gold>", disc);
|
||||||
final String[] lore = {TranslatableCaption.of("plotjukebox.click_to_play").getComponent(player)};
|
final String[] lore = {TranslatableCaption.of("plotjukebox.click_to_play").getComponent(player)};
|
||||||
final PlotItemStack item = new PlotItemStack(disc, 1, name, lore);
|
ItemType type = ItemTypes.get(disc);
|
||||||
inv.setItem(index++, item);
|
if (type == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
final PlotItemStack item = new PlotItemStack(type, 1, name, lore);
|
||||||
|
if (inv.setItemChecked(index, item)) {
|
||||||
|
index++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always add the cancel button
|
// Always add the cancel button
|
||||||
|
@ -51,7 +51,7 @@ public class PluginCmd extends SubCommand {
|
|||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
|
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
|
||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://github.com/IntellectualSites/PlotSquared-Documentation/wiki>https://github.com/IntellectualSites/PlotSquared-Documentation/wiki</gold>"));
|
"<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://intellectualsites.github.io/plotsquared-documentation/>https://intellectualsites.github.io/plotsquared-documentation/</gold>"));
|
||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
|
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -128,7 +128,7 @@ public class ComponentPresetManager {
|
|||||||
0,
|
0,
|
||||||
"",
|
"",
|
||||||
"<rainbow:2>Disco Floor</rainbow>",
|
"<rainbow:2>Disco Floor</rainbow>",
|
||||||
Arrays.asList("<gold>Spice up your plot floor</gold>"),
|
List.of("<gold>Spice up your plot floor</gold>"),
|
||||||
ItemTypes.YELLOW_WOOL
|
ItemTypes.YELLOW_WOOL
|
||||||
));
|
));
|
||||||
yamlConfiguration.set("presets", defaultPreset.stream().map(ComponentPreset::serialize).collect(Collectors.toList()));
|
yamlConfiguration.set("presets", defaultPreset.stream().map(ComponentPreset::serialize).collect(Collectors.toList()));
|
||||||
@ -181,6 +181,10 @@ public class ComponentPresetManager {
|
|||||||
}
|
}
|
||||||
allowedPresets.add(componentPreset);
|
allowedPresets.add(componentPreset);
|
||||||
}
|
}
|
||||||
|
if (allowedPresets.isEmpty()) {
|
||||||
|
player.sendMessage(TranslatableCaption.of("preset.empty"));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
final int size = (int) Math.ceil((double) allowedPresets.size() / 9.0D);
|
final int size = (int) Math.ceil((double) allowedPresets.size() / 9.0D);
|
||||||
final PlotInventory plotInventory = new PlotInventory(this.inventoryUtil, player, size,
|
final PlotInventory plotInventory = new PlotInventory(this.inventoryUtil, player, size,
|
||||||
TranslatableCaption.of("preset.title").getComponent(player)) {
|
TranslatableCaption.of("preset.title").getComponent(player)) {
|
||||||
@ -210,7 +214,13 @@ public class ComponentPresetManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (componentPreset.getCost() > 0.0D && econHandler.isEnabled(plot.getArea())) {
|
if (componentPreset.getCost() > 0.0D) {
|
||||||
|
if (!econHandler.isEnabled(plot.getArea())) {
|
||||||
|
getPlayer().sendMessage(
|
||||||
|
TranslatableCaption.of("preset.economy_disabled"),
|
||||||
|
Template.of("preset", componentPreset.getDisplayName()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (econHandler.getMoney(getPlayer()) < componentPreset.getCost()) {
|
if (econHandler.getMoney(getPlayer()) < componentPreset.getCost()) {
|
||||||
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_cannot_afford"));
|
getPlayer().sendMessage(TranslatableCaption.of("preset.preset_cannot_afford"));
|
||||||
return false;
|
return false;
|
||||||
@ -246,11 +256,16 @@ public class ComponentPresetManager {
|
|||||||
for (int i = 0; i < allowedPresets.size(); i++) {
|
for (int i = 0; i < allowedPresets.size(); i++) {
|
||||||
final ComponentPreset preset = allowedPresets.get(i);
|
final ComponentPreset preset = allowedPresets.get(i);
|
||||||
final List<String> lore = new ArrayList<>();
|
final List<String> lore = new ArrayList<>();
|
||||||
if (preset.getCost() > 0 && this.econHandler.isEnabled(plot.getArea())) {
|
if (preset.getCost() > 0) {
|
||||||
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
|
if (!this.econHandler.isEnabled(plot.getArea())) {
|
||||||
TranslatableCaption.of("preset.preset_lore_cost").getComponent(player),
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
|
||||||
Template.of("cost", String.format("%.2f", preset.getCost()))
|
TranslatableCaption.of("preset.preset_lore_economy_disabled").getComponent(player))));
|
||||||
)));
|
} else {
|
||||||
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
|
||||||
|
TranslatableCaption.of("preset.preset_lore_cost").getComponent(player),
|
||||||
|
Template.of("cost", String.format("%.2f", preset.getCost()))
|
||||||
|
)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
|
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
|
||||||
TranslatableCaption.of("preset.preset_lore_component").getComponent(player),
|
TranslatableCaption.of("preset.preset_lore_component").getComponent(player),
|
||||||
|
@ -201,7 +201,7 @@ public class Settings extends Config {
|
|||||||
public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*"));
|
public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*"));
|
||||||
|
|
||||||
|
|
||||||
@Comment("See: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Plot-analysis for a description of each value.")
|
@Comment("See: https://intellectualsites.github.io/plotsquared-documentation/optimization/plot-analysis for a description of each value.")
|
||||||
public static final class CALIBRATION {
|
public static final class CALIBRATION {
|
||||||
|
|
||||||
public int VARIETY = 0;
|
public int VARIETY = 0;
|
||||||
@ -221,7 +221,7 @@ public class Settings extends Config {
|
|||||||
|
|
||||||
|
|
||||||
@Comment({"Chunk processor related settings",
|
@Comment({"Chunk processor related settings",
|
||||||
"See https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Chunk-processor for more information."})
|
"See https://intellectualsites.github.io/plotsquared-documentation/optimization/chunk-processor for more information."})
|
||||||
public static class Chunk_Processor {
|
public static class Chunk_Processor {
|
||||||
|
|
||||||
@Comment("Auto trim will not save chunks which aren't claimed")
|
@Comment("Auto trim will not save chunks which aren't claimed")
|
||||||
@ -284,7 +284,7 @@ public class Settings extends Config {
|
|||||||
@Comment("Always show explosion Particles, even if explosion flag is set to false")
|
@Comment("Always show explosion Particles, even if explosion flag is set to false")
|
||||||
public static boolean ALWAYS_SHOW_EXPLOSIONS = false;
|
public static boolean ALWAYS_SHOW_EXPLOSIONS = false;
|
||||||
@Comment({"Blocks that may not be used in plot components",
|
@Comment({"Blocks that may not be used in plot components",
|
||||||
"Checkout the wiki article regarding plot components before modifying: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Plot-Components"})
|
"Checkout the wiki article regarding plot components before modifying: https://intellectualsites.github.io/plotsquared-documentation/customization/plot-components"})
|
||||||
public static List<String>
|
public static List<String>
|
||||||
INVALID_BLOCKS = Arrays.asList(
|
INVALID_BLOCKS = Arrays.asList(
|
||||||
// Acacia Stuff
|
// Acacia Stuff
|
||||||
@ -406,7 +406,7 @@ public class Settings extends Config {
|
|||||||
|
|
||||||
|
|
||||||
@Comment({"Schematic Settings",
|
@Comment({"Schematic Settings",
|
||||||
"See https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Schematic-on-Claim for more information."})
|
"See https://intellectualsites.github.io/plotsquared-documentation/schematics/schematic-on-claim for more information."})
|
||||||
public static final class Schematics {
|
public static final class Schematics {
|
||||||
|
|
||||||
@Comment(
|
@Comment(
|
||||||
@ -535,7 +535,7 @@ public class Settings extends Config {
|
|||||||
|
|
||||||
|
|
||||||
@Comment({"Backup related settings",
|
@Comment({"Backup related settings",
|
||||||
"See https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Backups for more information."})
|
"See https://intellectualsites.github.io/plotsquared-documentation/plot-backups for more information."})
|
||||||
public static final class Backup {
|
public static final class Backup {
|
||||||
|
|
||||||
@Comment("Automatically backup plots when destructive commands are performed, e.g. /plot clear")
|
@Comment("Automatically backup plots when destructive commands are performed, e.g. /plot clear")
|
||||||
@ -784,7 +784,7 @@ public class Settings extends Config {
|
|||||||
public static boolean
|
public static boolean
|
||||||
PERSISTENT_ROAD_REGEN = true;
|
PERSISTENT_ROAD_REGEN = true;
|
||||||
@Comment({"Enable the `/plot component` preset GUI",
|
@Comment({"Enable the `/plot component` preset GUI",
|
||||||
"Read more about components here: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Plot-Components"})
|
"Read more about components here: https://intellectualsites.github.io/plotsquared-documentation/customization/plot-components"})
|
||||||
public static boolean COMPONENT_PRESETS = true;
|
public static boolean COMPONENT_PRESETS = true;
|
||||||
@Comment("Enable per user locale")
|
@Comment("Enable per user locale")
|
||||||
public static boolean PER_USER_LOCALE = false;
|
public static boolean PER_USER_LOCALE = false;
|
||||||
|
@ -45,6 +45,7 @@ import com.plotsquared.core.queue.ChunkQueueCoordinator;
|
|||||||
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.ChunkManager;
|
||||||
|
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;
|
||||||
import com.plotsquared.core.util.RegionUtil;
|
import com.plotsquared.core.util.RegionUtil;
|
||||||
@ -93,6 +94,7 @@ public class HybridUtils {
|
|||||||
private final GlobalBlockQueue blockQueue;
|
private final GlobalBlockQueue blockQueue;
|
||||||
private final WorldUtil worldUtil;
|
private final WorldUtil worldUtil;
|
||||||
private final SchematicHandler schematicHandler;
|
private final SchematicHandler schematicHandler;
|
||||||
|
private final EventDispatcher eventDispatcher;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public HybridUtils(
|
public HybridUtils(
|
||||||
@ -100,13 +102,15 @@ public class HybridUtils {
|
|||||||
final @NonNull ChunkManager chunkManager,
|
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
|
||||||
) {
|
) {
|
||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
this.chunkManager = chunkManager;
|
this.chunkManager = chunkManager;
|
||||||
this.blockQueue = blockQueue;
|
this.blockQueue = blockQueue;
|
||||||
this.worldUtil = worldUtil;
|
this.worldUtil = worldUtil;
|
||||||
this.schematicHandler = schematicHandler;
|
this.schematicHandler = schematicHandler;
|
||||||
|
this.eventDispatcher = eventDispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void regeneratePlotWalls(final PlotArea area) {
|
public void regeneratePlotWalls(final PlotArea area) {
|
||||||
@ -348,7 +352,7 @@ public class HybridUtils {
|
|||||||
result.add(whenDone.value.variety_sd);
|
result.add(whenDone.value.variety_sd);
|
||||||
PlotFlag<?, ?> plotFlag = GlobalFlagContainer.getInstance().getFlag(AnalysisFlag.class).createFlagInstance(
|
PlotFlag<?, ?> plotFlag = GlobalFlagContainer.getInstance().getFlag(AnalysisFlag.class).createFlagInstance(
|
||||||
result);
|
result);
|
||||||
PlotFlagAddEvent event = new PlotFlagAddEvent(plotFlag, origin);
|
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, origin);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -174,21 +174,9 @@ public class PlotListener {
|
|||||||
String greeting = plot.getFlag(GreetingFlag.class);
|
String greeting = plot.getFlag(GreetingFlag.class);
|
||||||
if (!greeting.isEmpty()) {
|
if (!greeting.isEmpty()) {
|
||||||
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
|
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
|
||||||
player.sendMessage(
|
plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendMessage);
|
||||||
TranslatableCaption.of("flags.greeting_flag_format"),
|
|
||||||
Template.of("world", plot.getWorldName()),
|
|
||||||
Template.of("plot_id", plot.getId().toString()),
|
|
||||||
Template.of("alias", plot.getAlias()),
|
|
||||||
Template.of("greeting", greeting)
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
player.sendActionBar(
|
plot.format(StaticCaption.of(greeting), player, false).thenAcceptAsync(player::sendActionBar);
|
||||||
TranslatableCaption.of("flags.greeting_flag_format"),
|
|
||||||
Template.of("world", plot.getWorldName()),
|
|
||||||
Template.of("plot_id", plot.getId().toString()),
|
|
||||||
Template.of("alias", plot.getAlias()),
|
|
||||||
Template.of("greeting", greeting)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,21 +401,9 @@ public class PlotListener {
|
|||||||
String farewell = plot.getFlag(FarewellFlag.class);
|
String farewell = plot.getFlag(FarewellFlag.class);
|
||||||
if (!farewell.isEmpty()) {
|
if (!farewell.isEmpty()) {
|
||||||
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
|
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
|
||||||
player.sendMessage(
|
plot.format(StaticCaption.of(farewell), player, false).thenAcceptAsync(player::sendMessage);
|
||||||
TranslatableCaption.of("flags.farewell_flag_format"),
|
|
||||||
Template.of("world", plot.getWorldName()),
|
|
||||||
Template.of("plot_id", plot.getId().toString()),
|
|
||||||
Template.of("alias", plot.getAlias()),
|
|
||||||
Template.of("farewell", farewell)
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
player.sendActionBar(
|
plot.format(StaticCaption.of(farewell), player, false).thenAcceptAsync(player::sendActionBar);
|
||||||
TranslatableCaption.of("flags.farewell_flag_format"),
|
|
||||||
Template.of("world", plot.getWorldName()),
|
|
||||||
Template.of("plot_id", plot.getId().toString()),
|
|
||||||
Template.of("alias", plot.getAlias()),
|
|
||||||
Template.of("farewell", farewell)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,9 +103,32 @@ public class PlotInventory {
|
|||||||
this.open = false;
|
this.open = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put an item into this inventory
|
||||||
|
*
|
||||||
|
* @param index the index (= slot) where to place the item
|
||||||
|
* @param item the item to place
|
||||||
|
* @see #setItemChecked(int, PlotItemStack)
|
||||||
|
*/
|
||||||
public void setItem(int index, PlotItemStack item) {
|
public void setItem(int index, PlotItemStack item) {
|
||||||
|
setItemChecked(index, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Put an item into this inventory, while also checking the existence of the material in the current version
|
||||||
|
*
|
||||||
|
* @param index the index (= slot) where to place the item
|
||||||
|
* @param item the item to place
|
||||||
|
* @return {@code true} if the item could be placed, otherwise {@code false}
|
||||||
|
* @see InventoryUtil#setItemChecked(PlotInventory, int, PlotItemStack)
|
||||||
|
* @since 6.5.0
|
||||||
|
*/
|
||||||
|
public boolean setItemChecked(int index, PlotItemStack item) {
|
||||||
|
if (!this.inventoryUtil.setItemChecked(this, index, item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
this.items[index] = item;
|
this.items[index] = item;
|
||||||
this.inventoryUtil.setItem(this, index, item);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlotItemStack getItem(int index) {
|
public PlotItemStack getItem(int index) {
|
||||||
|
@ -46,7 +46,21 @@ public class PlotItemStack {
|
|||||||
final String id, final int amount, final String name,
|
final String id, final int amount, final String name,
|
||||||
final String... lore
|
final String... lore
|
||||||
) {
|
) {
|
||||||
this.type = ItemTypes.get(id);
|
this(ItemTypes.get(id), amount, name, lore);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param type The item type
|
||||||
|
* @param amount Amount of items in the stack
|
||||||
|
* @param name The display name of the item stack
|
||||||
|
* @param lore The item stack lore
|
||||||
|
* @since 6.5.0
|
||||||
|
*/
|
||||||
|
public PlotItemStack(
|
||||||
|
final ItemType type, final int amount, final String name,
|
||||||
|
final String... lore
|
||||||
|
) {
|
||||||
|
this.type = type;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.lore = lore;
|
this.lore = lore;
|
||||||
|
@ -262,7 +262,9 @@ public final class PlotModificationManager {
|
|||||||
if (queue.size() > 0) {
|
if (queue.size() > 0) {
|
||||||
queue.setCompleteTask(run);
|
queue.setCompleteTask(run);
|
||||||
queue.enqueue();
|
queue.enqueue();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
run.run();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Plot current = queue.poll();
|
Plot current = queue.poll();
|
||||||
|
@ -136,18 +136,18 @@ public class ExpireManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void confirmExpiry(final PlotPlayer<?> pp) {
|
public void confirmExpiry(final PlotPlayer<?> pp) {
|
||||||
try (final MetaDataAccess<Boolean> metaDataAccess = pp.accessTemporaryMetaData(
|
TaskManager.runTask(() -> {
|
||||||
PlayerMetaDataKeys.TEMPORARY_IGNORE_EXPIRE_TASK)) {
|
try (final MetaDataAccess<Boolean> metaDataAccess = pp.accessTemporaryMetaData(
|
||||||
if (metaDataAccess.isPresent()) {
|
PlayerMetaDataKeys.TEMPORARY_IGNORE_EXPIRE_TASK)) {
|
||||||
return;
|
if (metaDataAccess.isPresent()) {
|
||||||
}
|
return;
|
||||||
if (plotsToDelete != null && !plotsToDelete.isEmpty() && pp.hasPermission("plots.admin.command.autoclear")) {
|
}
|
||||||
final int num = plotsToDelete.size();
|
if (plotsToDelete != null && !plotsToDelete.isEmpty() && pp.hasPermission("plots.admin.command.autoclear")) {
|
||||||
while (!plotsToDelete.isEmpty()) {
|
final int num = plotsToDelete.size();
|
||||||
Iterator<Plot> iter = plotsToDelete.iterator();
|
while (!plotsToDelete.isEmpty()) {
|
||||||
final Plot current = iter.next();
|
Iterator<Plot> iter = plotsToDelete.iterator();
|
||||||
if (!isExpired(new ArrayDeque<>(tasks), current).isEmpty()) {
|
final Plot current = iter.next();
|
||||||
TaskManager.runTask(() -> {
|
if (!isExpired(new ArrayDeque<>(tasks), current).isEmpty()) {
|
||||||
metaDataAccess.set(true);
|
metaDataAccess.set(true);
|
||||||
current.getCenter(pp::teleport);
|
current.getCenter(pp::teleport);
|
||||||
metaDataAccess.remove();
|
metaDataAccess.remove();
|
||||||
@ -171,15 +171,15 @@ public class ExpireManager {
|
|||||||
cmd_keep,
|
cmd_keep,
|
||||||
cmd_no_show_expir
|
cmd_no_show_expir
|
||||||
);
|
);
|
||||||
});
|
return;
|
||||||
return;
|
} else {
|
||||||
} else {
|
iter.remove();
|
||||||
iter.remove();
|
}
|
||||||
}
|
}
|
||||||
|
plotsToDelete.clear();
|
||||||
}
|
}
|
||||||
plotsToDelete.clear();
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -307,6 +307,7 @@ public class ExpireManager {
|
|||||||
this.running = 2;
|
this.running = 2;
|
||||||
TaskManager.runTaskAsync(new Runnable() {
|
TaskManager.runTaskAsync(new Runnable() {
|
||||||
private ConcurrentLinkedDeque<Plot> plots = null;
|
private ConcurrentLinkedDeque<Plot> plots = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final Runnable task = this;
|
final Runnable task = this;
|
||||||
@ -359,7 +360,7 @@ public class ExpireManager {
|
|||||||
.getFlag(AnalysisFlag.class)
|
.getFlag(AnalysisFlag.class)
|
||||||
.createFlagInstance(changed.asList());
|
.createFlagInstance(changed.asList());
|
||||||
PlotFlagAddEvent event =
|
PlotFlagAddEvent event =
|
||||||
new PlotFlagAddEvent(plotFlag, newPlot);
|
eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -451,7 +452,7 @@ public class ExpireManager {
|
|||||||
plot.getPlotModificationManager().deletePlot(null, whenDone);
|
plot.getPlotModificationManager().deletePlot(null, whenDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated(forRemoval = true, since = "TODO")
|
@Deprecated(forRemoval = true, since = "6.4.0")
|
||||||
public long getAge(UUID uuid) {
|
public long getAge(UUID uuid) {
|
||||||
return getAge(uuid, false);
|
return getAge(uuid, false);
|
||||||
}
|
}
|
||||||
@ -462,7 +463,7 @@ public class ExpireManager {
|
|||||||
* @param uuid the uuid of the owner to check against
|
* @param uuid the uuid of the owner to check against
|
||||||
* @param shouldDeleteUnknownOwner {@code true} if an unknown player should be counted as never online
|
* @param shouldDeleteUnknownOwner {@code true} if an unknown player should be counted as never online
|
||||||
* @return the millis since the player was last online, or {@link Long#MAX_VALUE} if player was never online
|
* @return the millis since the player was last online, or {@link Long#MAX_VALUE} if player was never online
|
||||||
* @since TODO
|
* @since 6.4.0
|
||||||
*/
|
*/
|
||||||
public long getAge(UUID uuid, final boolean shouldDeleteUnknownOwner) {
|
public long getAge(UUID uuid, final boolean shouldDeleteUnknownOwner) {
|
||||||
if (PlotSquared.platform().playerManager().getPlayerIfExists(uuid) != null) {
|
if (PlotSquared.platform().playerManager().getPlayerIfExists(uuid) != null) {
|
||||||
|
@ -160,7 +160,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 TODO
|
* @since 6.4.0
|
||||||
*/
|
*/
|
||||||
public boolean shouldDeleteForUnknownOwner() {
|
public boolean shouldDeleteForUnknownOwner() {
|
||||||
return settings.DELETE_IF_OWNER_IS_UNKNOWN;
|
return settings.DELETE_IF_OWNER_IS_UNKNOWN;
|
||||||
|
@ -134,17 +134,28 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
stringClassMap = new HashMap<>();
|
stringClassMap = new HashMap<>();
|
||||||
|
|
||||||
// Register all default flags here
|
// Register all default flags here
|
||||||
|
// Block type list flags
|
||||||
|
this.addFlag(BreakFlag.BREAK_NONE);
|
||||||
|
this.addFlag(UseFlag.USE_NONE);
|
||||||
|
this.addFlag(PlaceFlag.PLACE_NONE);
|
||||||
|
|
||||||
// Boolean flags
|
// Boolean flags
|
||||||
this.addFlag(ExplosionFlag.EXPLOSION_FALSE);
|
|
||||||
this.addFlag(UntrustedVisitFlag.UNTRUSTED_VISIT_FLAG_TRUE);
|
|
||||||
this.addFlag(DenyExitFlag.DENY_EXIT_FLAG_FALSE);
|
|
||||||
this.addFlag(AnimalAttackFlag.ANIMAL_ATTACK_FALSE);
|
this.addFlag(AnimalAttackFlag.ANIMAL_ATTACK_FALSE);
|
||||||
this.addFlag(AnimalInteractFlag.ANIMAL_INTERACT_FALSE);
|
this.addFlag(AnimalInteractFlag.ANIMAL_INTERACT_FALSE);
|
||||||
this.addFlag(BlockBurnFlag.BLOCK_BURN_FALSE);
|
this.addFlag(BlockBurnFlag.BLOCK_BURN_FALSE);
|
||||||
this.addFlag(BlockIgnitionFlag.BLOCK_IGNITION_TRUE);
|
this.addFlag(BlockIgnitionFlag.BLOCK_IGNITION_TRUE);
|
||||||
|
this.addFlag(ChatFlag.CHAT_FLAG_TRUE);
|
||||||
|
this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE);
|
||||||
|
this.addFlag(CoralDryFlag.CORAL_DRY_FALSE);
|
||||||
|
this.addFlag(CropGrowFlag.CROP_GROW_TRUE);
|
||||||
|
this.addFlag(DenyExitFlag.DENY_EXIT_FLAG_FALSE);
|
||||||
|
this.addFlag(DenyPortalsFlag.DENY_PORTALS_FALSE);
|
||||||
|
this.addFlag(DenyPortalTravelFlag.DENY_PORTAL_TRAVEL_FALSE);
|
||||||
this.addFlag(DeviceInteractFlag.DEVICE_INTERACT_FALSE);
|
this.addFlag(DeviceInteractFlag.DEVICE_INTERACT_FALSE);
|
||||||
this.addFlag(DisablePhysicsFlag.DISABLE_PHYSICS_FALSE);
|
this.addFlag(DisablePhysicsFlag.DISABLE_PHYSICS_FALSE);
|
||||||
this.addFlag(DropProtectionFlag.DROP_PROTECTION_FALSE);
|
this.addFlag(DropProtectionFlag.DROP_PROTECTION_FALSE);
|
||||||
|
this.addFlag(EntityChangeBlockFlag.ENTITY_CHANGE_BLOCK_FALSE);
|
||||||
|
this.addFlag(ExplosionFlag.EXPLOSION_FALSE);
|
||||||
this.addFlag(ForcefieldFlag.FORCEFIELD_FALSE);
|
this.addFlag(ForcefieldFlag.FORCEFIELD_FALSE);
|
||||||
this.addFlag(GrassGrowFlag.GRASS_GROW_TRUE);
|
this.addFlag(GrassGrowFlag.GRASS_GROW_TRUE);
|
||||||
this.addFlag(HangingBreakFlag.HANGING_BREAK_FALSE);
|
this.addFlag(HangingBreakFlag.HANGING_BREAK_FALSE);
|
||||||
@ -154,52 +165,53 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
this.addFlag(HostileInteractFlag.HOSTILE_INTERACT_FALSE);
|
this.addFlag(HostileInteractFlag.HOSTILE_INTERACT_FALSE);
|
||||||
this.addFlag(IceFormFlag.ICE_FORM_FALSE);
|
this.addFlag(IceFormFlag.ICE_FORM_FALSE);
|
||||||
this.addFlag(IceMeltFlag.ICE_MELT_FALSE);
|
this.addFlag(IceMeltFlag.ICE_MELT_FALSE);
|
||||||
|
this.addFlag(InstabreakFlag.INSTABREAK_FALSE);
|
||||||
|
this.addFlag(InvincibleFlag.INVINCIBLE_FALSE);
|
||||||
|
this.addFlag(ItemDropFlag.ITEM_DROP_TRUE);
|
||||||
|
this.addFlag(KeepInventoryFlag.KEEP_INVENTORY_FALSE);
|
||||||
this.addFlag(KelpGrowFlag.KELP_GROW_TRUE);
|
this.addFlag(KelpGrowFlag.KELP_GROW_TRUE);
|
||||||
this.addFlag(RedstoneFlag.REDSTONE_TRUE);
|
this.addFlag(LeafDecayFlag.LEAF_DECAY_TRUE);
|
||||||
this.addFlag(ServerPlotFlag.SERVER_PLOT_FALSE);
|
this.addFlag(LecternReadBookFlag.LECTERN_READ_BOOK_FALSE);
|
||||||
this.addFlag(MiscBreakFlag.MISC_BREAK_FALSE);
|
this.addFlag(MiscBreakFlag.MISC_BREAK_FALSE);
|
||||||
this.addFlag(MobBreakFlag.MOB_BREAK_FALSE);
|
this.addFlag(MobBreakFlag.MOB_BREAK_FALSE);
|
||||||
this.addFlag(MobPlaceFlag.MOB_PLACE_FALSE);
|
this.addFlag(MobPlaceFlag.MOB_PLACE_FALSE);
|
||||||
|
this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE);
|
||||||
|
this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE);
|
||||||
this.addFlag(MycelGrowFlag.MYCEL_GROW_TRUE);
|
this.addFlag(MycelGrowFlag.MYCEL_GROW_TRUE);
|
||||||
this.addFlag(NotifyEnterFlag.NOTIFY_ENTER_FALSE);
|
this.addFlag(NotifyEnterFlag.NOTIFY_ENTER_FALSE);
|
||||||
this.addFlag(NotifyLeaveFlag.NOTIFY_LEAVE_FALSE);
|
this.addFlag(NotifyLeaveFlag.NOTIFY_LEAVE_FALSE);
|
||||||
this.addFlag(NoWorldeditFlag.NO_WORLDEDIT_FALSE);
|
this.addFlag(NoWorldeditFlag.NO_WORLDEDIT_FALSE);
|
||||||
this.addFlag(PlayerInteractFlag.PLAYER_INTERACT_FALSE);
|
this.addFlag(PlayerInteractFlag.PLAYER_INTERACT_FALSE);
|
||||||
|
this.addFlag(PreventCreativeCopyFlag.PREVENT_CREATIVE_COPY_FALSE);
|
||||||
this.addFlag(PveFlag.PVE_FALSE);
|
this.addFlag(PveFlag.PVE_FALSE);
|
||||||
this.addFlag(PvpFlag.PVP_FALSE);
|
this.addFlag(PvpFlag.PVP_FALSE);
|
||||||
|
this.addFlag(RedstoneFlag.REDSTONE_TRUE);
|
||||||
|
this.addFlag(ServerPlotFlag.SERVER_PLOT_FALSE);
|
||||||
this.addFlag(SnowFormFlag.SNOW_FORM_FALSE);
|
this.addFlag(SnowFormFlag.SNOW_FORM_FALSE);
|
||||||
this.addFlag(SnowMeltFlag.SNOW_MELT_TRUE);
|
this.addFlag(SnowMeltFlag.SNOW_MELT_TRUE);
|
||||||
this.addFlag(SoilDryFlag.SOIL_DRY_FALSE);
|
this.addFlag(SoilDryFlag.SOIL_DRY_FALSE);
|
||||||
this.addFlag(CoralDryFlag.CORAL_DRY_FALSE);
|
|
||||||
this.addFlag(TamedAttackFlag.TAMED_ATTACK_FALSE);
|
this.addFlag(TamedAttackFlag.TAMED_ATTACK_FALSE);
|
||||||
this.addFlag(TamedInteractFlag.TAMED_INTERACT_FALSE);
|
this.addFlag(TamedInteractFlag.TAMED_INTERACT_FALSE);
|
||||||
|
this.addFlag(UntrustedVisitFlag.UNTRUSTED_VISIT_FLAG_TRUE);
|
||||||
this.addFlag(VehicleBreakFlag.VEHICLE_BREAK_FALSE);
|
this.addFlag(VehicleBreakFlag.VEHICLE_BREAK_FALSE);
|
||||||
this.addFlag(VehiclePlaceFlag.VEHICLE_PLACE_FALSE);
|
this.addFlag(VehiclePlaceFlag.VEHICLE_PLACE_FALSE);
|
||||||
this.addFlag(VehicleUseFlag.VEHICLE_USE_FALSE);
|
this.addFlag(VehicleUseFlag.VEHICLE_USE_FALSE);
|
||||||
this.addFlag(VillagerInteractFlag.VILLAGER_INTERACT_FALSE);
|
this.addFlag(VillagerInteractFlag.VILLAGER_INTERACT_FALSE);
|
||||||
this.addFlag(VineGrowFlag.VINE_GROW_TRUE);
|
this.addFlag(VineGrowFlag.VINE_GROW_TRUE);
|
||||||
this.addFlag(ItemDropFlag.ITEM_DROP_TRUE);
|
|
||||||
this.addFlag(InstabreakFlag.INSTABREAK_FALSE);
|
// Double flags
|
||||||
this.addFlag(InvincibleFlag.INVINCIBLE_FALSE);
|
this.addFlag(PriceFlag.PRICE_NOT_BUYABLE);
|
||||||
this.addFlag(ChatFlag.CHAT_FLAG_TRUE);
|
|
||||||
this.addFlag(MiscPlaceFlag.MISC_PLACE_FALSE);
|
|
||||||
this.addFlag(MiscInteractFlag.MISC_INTERACT_FALSE);
|
|
||||||
this.addFlag(KeepInventoryFlag.KEEP_INVENTORY_FALSE);
|
|
||||||
this.addFlag(PreventCreativeCopyFlag.PREVENT_CREATIVE_COPY_FALSE);
|
|
||||||
this.addFlag(LeafDecayFlag.LEAF_DECAY_TRUE);
|
|
||||||
this.addFlag(CropGrowFlag.CROP_GROW_TRUE);
|
|
||||||
this.addFlag(DenyPortalTravelFlag.DENY_PORTAL_TRAVEL_FALSE);
|
|
||||||
this.addFlag(DenyPortalsFlag.DENY_PORTALS_FALSE);
|
|
||||||
this.addFlag(LecternReadBookFlag.LECTERN_READ_BOOK_FALSE);
|
|
||||||
this.addFlag(EntityChangeBlockFlag.ENTITY_CHANGE_BLOCK_FALSE);
|
|
||||||
this.addFlag(CopperOxideFlag.COPPER_OXIDE_FALSE);
|
|
||||||
|
|
||||||
// Enum Flags
|
// Enum Flags
|
||||||
this.addFlag(WeatherFlag.PLOT_WEATHER_FLAG_OFF);
|
|
||||||
this.addFlag(DenyTeleportFlag.DENY_TELEPORT_FLAG_NONE);
|
this.addFlag(DenyTeleportFlag.DENY_TELEPORT_FLAG_NONE);
|
||||||
this.addFlag(TitlesFlag.TITLES_NONE);
|
|
||||||
this.addFlag(FlyFlag.FLIGHT_FLAG_DEFAULT);
|
this.addFlag(FlyFlag.FLIGHT_FLAG_DEFAULT);
|
||||||
this.addFlag(LiquidFlowFlag.LIQUID_FLOW_DEFAULT);
|
this.addFlag(LiquidFlowFlag.LIQUID_FLOW_DEFAULT);
|
||||||
|
this.addFlag(TitlesFlag.TITLES_NONE);
|
||||||
|
this.addFlag(WeatherFlag.PLOT_WEATHER_FLAG_OFF);
|
||||||
|
|
||||||
|
// Internal flags
|
||||||
|
this.addFlag(new AnalysisFlag(Collections.emptyList()));
|
||||||
|
this.addFlag(new DoneFlag(""));
|
||||||
|
|
||||||
// Integer flags
|
// Integer flags
|
||||||
this.addFlag(AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
this.addFlag(AnimalCapFlag.ANIMAL_CAP_UNLIMITED);
|
||||||
@ -210,22 +222,10 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
this.addFlag(TimeFlag.TIME_DISABLED);
|
this.addFlag(TimeFlag.TIME_DISABLED);
|
||||||
this.addFlag(VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
this.addFlag(VehicleCapFlag.VEHICLE_CAP_UNLIMITED);
|
||||||
|
|
||||||
// Timed flags
|
|
||||||
this.addFlag(FeedFlag.FEED_NOTHING);
|
|
||||||
this.addFlag(HealFlag.HEAL_NOTHING);
|
|
||||||
|
|
||||||
// Double flags
|
|
||||||
this.addFlag(PriceFlag.PRICE_NOT_BUYABLE);
|
|
||||||
|
|
||||||
// Block type list flags
|
|
||||||
this.addFlag(BreakFlag.BREAK_NONE);
|
|
||||||
this.addFlag(PlaceFlag.PLACE_NONE);
|
|
||||||
this.addFlag(UseFlag.USE_NONE);
|
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
|
this.addFlag(BlockedCmdsFlag.BLOCKED_CMDS_FLAG_NONE);
|
||||||
this.addFlag(GamemodeFlag.GAMEMODE_FLAG_DEFAULT);
|
this.addFlag(GamemodeFlag.GAMEMODE_FLAG_DEFAULT);
|
||||||
this.addFlag(GuestGamemodeFlag.GUEST_GAMEMODE_FLAG_DEFAULT);
|
this.addFlag(GuestGamemodeFlag.GUEST_GAMEMODE_FLAG_DEFAULT);
|
||||||
this.addFlag(BlockedCmdsFlag.BLOCKED_CMDS_FLAG_NONE);
|
|
||||||
this.addFlag(KeepFlag.KEEP_FLAG_FALSE);
|
this.addFlag(KeepFlag.KEEP_FLAG_FALSE);
|
||||||
this.addFlag(MusicFlag.MUSIC_FLAG_NONE);
|
this.addFlag(MusicFlag.MUSIC_FLAG_NONE);
|
||||||
|
|
||||||
@ -235,9 +235,9 @@ public final class GlobalFlagContainer extends FlagContainer {
|
|||||||
this.addFlag(FarewellFlag.FAREWELL_FLAG_EMPTY);
|
this.addFlag(FarewellFlag.FAREWELL_FLAG_EMPTY);
|
||||||
this.addFlag(PlotTitleFlag.TITLE_FLAG_DEFAULT);
|
this.addFlag(PlotTitleFlag.TITLE_FLAG_DEFAULT);
|
||||||
|
|
||||||
// Internal flags
|
// Timed flags
|
||||||
this.addFlag(new AnalysisFlag(Collections.emptyList()));
|
this.addFlag(FeedFlag.FEED_NOTHING);
|
||||||
this.addFlag(new DoneFlag(""));
|
this.addFlag(HealFlag.HEAL_NOTHING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setup() {
|
public static void setup() {
|
||||||
|
@ -38,11 +38,33 @@ public abstract class InventoryUtil {
|
|||||||
|
|
||||||
public abstract void close(final PlotInventory inv);
|
public abstract void close(final PlotInventory inv);
|
||||||
|
|
||||||
public abstract void setItem(
|
/**
|
||||||
|
* Attempts to set an item into a {@link PlotInventory} while also checking the existence of the material
|
||||||
|
*
|
||||||
|
* @param plotInventory The inventory where the item should be placed
|
||||||
|
* @param index The index where to place the item
|
||||||
|
* @param item The item to place into the inventory
|
||||||
|
* @return {@code true} if the item could be placed, {@code false} otherwise (e.g. item not available in current version)
|
||||||
|
* @since 6.5.0
|
||||||
|
*/
|
||||||
|
public abstract boolean setItemChecked(
|
||||||
final PlotInventory plotInventory, final int index,
|
final PlotInventory plotInventory, final int index,
|
||||||
final PlotItemStack item
|
final PlotItemStack item
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to set an item into a {@link PlotInventory}
|
||||||
|
*
|
||||||
|
* @param plotInventory The inventory where the item should be placed
|
||||||
|
* @param index The index where to place the item
|
||||||
|
* @param item The item to place into the inventory
|
||||||
|
* @see #setItemChecked(PlotInventory, int, PlotItemStack)
|
||||||
|
*/
|
||||||
|
public void setItem(final PlotInventory plotInventory, final int index,
|
||||||
|
final PlotItemStack item) {
|
||||||
|
setItemChecked(plotInventory, index, item);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract PlotItemStack[] getItems(final PlotPlayer<?> player);
|
public abstract PlotItemStack[] getItems(final PlotPlayer<?> player);
|
||||||
|
|
||||||
public abstract boolean isOpen(final PlotInventory plotInventory);
|
public abstract boolean isOpen(final PlotInventory plotInventory);
|
||||||
|
@ -166,7 +166,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
* @return The player's name, None, Everyone or Unknown
|
* @return The player's name, None, Everyone or Unknown
|
||||||
* @deprecated Use {@link #resolveName(UUID)}
|
* @deprecated Use {@link #resolveName(UUID)}
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "TODO")
|
@Deprecated(forRemoval = true, since = "6.4.0")
|
||||||
public static @NonNull String getName(final @Nullable UUID owner) {
|
public static @NonNull String getName(final @Nullable UUID owner) {
|
||||||
return getName(owner, true);
|
return getName(owner, true);
|
||||||
}
|
}
|
||||||
@ -179,7 +179,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
* @return The player's name, None, Everyone or Unknown
|
* @return The player's name, None, Everyone or Unknown
|
||||||
* @deprecated Use {@link #resolveName(UUID, boolean)}
|
* @deprecated Use {@link #resolveName(UUID, boolean)}
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true, since = "TODO")
|
@Deprecated(forRemoval = true, since = "6.4.0")
|
||||||
public static @NonNull String getName(final @Nullable UUID owner, final boolean blocking) {
|
public static @NonNull String getName(final @Nullable UUID owner, final boolean blocking) {
|
||||||
if (owner == null) {
|
if (owner == null) {
|
||||||
TranslatableCaption.of("info.none");
|
TranslatableCaption.of("info.none");
|
||||||
@ -217,7 +217,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
* @param owner The UUID of the owner
|
* @param owner The UUID of the owner
|
||||||
* @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown}
|
* @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown}
|
||||||
* @see #resolveName(UUID, boolean)
|
* @see #resolveName(UUID, boolean)
|
||||||
* @since TODO
|
* @since 6.4.0
|
||||||
*/
|
*/
|
||||||
public static @NonNull Caption resolveName(final @Nullable UUID owner) {
|
public static @NonNull Caption resolveName(final @Nullable UUID owner) {
|
||||||
return resolveName(owner, true);
|
return resolveName(owner, true);
|
||||||
@ -229,7 +229,7 @@ public abstract class PlayerManager<P extends PlotPlayer<? extends T>, T> {
|
|||||||
* @param owner The UUID of the owner
|
* @param owner The UUID of the owner
|
||||||
* @param blocking If the operation should block the current thread for {@link Settings.UUID#BLOCKING_TIMEOUT} milliseconds
|
* @param blocking If the operation should block the current thread for {@link Settings.UUID#BLOCKING_TIMEOUT} milliseconds
|
||||||
* @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown}
|
* @return A caption containing either the name, {@code None}, {@code Everyone} or {@code Unknown}
|
||||||
* @since TODO
|
* @since 6.4.0
|
||||||
*/
|
*/
|
||||||
public static @NonNull Caption resolveName(final @Nullable UUID owner, final boolean blocking) {
|
public static @NonNull Caption resolveName(final @Nullable UUID owner, final boolean blocking) {
|
||||||
if (owner == null) {
|
if (owner == null) {
|
||||||
|
@ -328,7 +328,7 @@ public class StringMan {
|
|||||||
/**
|
/**
|
||||||
* @param message an input string
|
* @param message an input string
|
||||||
* @return a list of strings
|
* @return a list of strings
|
||||||
* @since TODO
|
* @since 6.4.0
|
||||||
*
|
*
|
||||||
* <table border="1">
|
* <table border="1">
|
||||||
* <caption>Converts multiple quoted and single strings into a list of strings</caption>
|
* <caption>Converts multiple quoted and single strings into a list of strings</caption>
|
||||||
|
@ -52,8 +52,7 @@ public class HelpMenu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public HelpMenu getCommands() {
|
public HelpMenu getCommands() {
|
||||||
this.commands =
|
this.commands = MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller);
|
||||||
MainCommand.getInstance().getCommands(this.commandCategory, this.commandCaller);
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,9 +460,12 @@
|
|||||||
"backups.backup_automatic_failure": "<prefix><red>The automatic backup process failed. Your pending action has been canceled. Reason: </red><gray><reason></gray>",
|
"backups.backup_automatic_failure": "<prefix><red>The automatic backup process failed. Your pending action has been canceled. Reason: </red><gray><reason></gray>",
|
||||||
"preset.preset_cannot_afford": "<prefix><red>You cannot afford that preset.</red>",
|
"preset.preset_cannot_afford": "<prefix><red>You cannot afford that preset.</red>",
|
||||||
"preset.preset_invalid": "<prefix><red>Could not generate a pattern from that preset.</red>",
|
"preset.preset_invalid": "<prefix><red>Could not generate a pattern from that preset.</red>",
|
||||||
"preset.preset_lore_cost": "<prefix><gray>Cost: </gray><gold><cost></gold>",
|
"preset.preset_lore_cost": "<gray>Cost: </gray><gold><cost></gold>",
|
||||||
|
"preset.preset_lore_economy_disabled": "<gray>Cost: </gray><red>Economy is disabled</red>",
|
||||||
"preset.preset_lore_component": "<gray>Component: </gray><gold><component></gold>",
|
"preset.preset_lore_component": "<gray>Component: </gray><gold><component></gold>",
|
||||||
"preset.title": "Plot Components",
|
"preset.title": "Plot Components",
|
||||||
|
"preset.empty": "<prefix><red>No plot component presets available.</red>",
|
||||||
|
"preset.economy_disabled": "<prefix><red>The component preset '<preset>' has a price set but economy is disabled.</red>",
|
||||||
"generic.generic_other": "<gray>other</gray>",
|
"generic.generic_other": "<gray>other</gray>",
|
||||||
"generic.generic_merged": "<gray>merged</gray>",
|
"generic.generic_merged": "<gray>merged</gray>",
|
||||||
"generic.generic_unowned": "<gray>unowned</gray>",
|
"generic.generic_unowned": "<gray>unowned</gray>",
|
||||||
@ -526,15 +529,15 @@
|
|||||||
"flags.flag_category_mixed": "<gray>Mixed Value Flags</gray>",
|
"flags.flag_category_mixed": "<gray>Mixed Value Flags</gray>",
|
||||||
"flags.flag_description_entity_cap": "<gray>Set to an integer value to limit the amount of entities on the plot.</gray>",
|
"flags.flag_description_entity_cap": "<gray>Set to an integer value to limit the amount of entities on the plot.</gray>",
|
||||||
"flags.flag_description_explosion": "<gray>Set to `true` to enable explosions in the plot, and `false` to disable them.</gray>",
|
"flags.flag_description_explosion": "<gray>Set to `true` to enable explosions in the plot, and `false` to disable them.</gray>",
|
||||||
"flags.flag_description_music": "<gray>Set to a music disk ID (item name) to play the music disc inside of the plot.</gray>",
|
"flags.flag_description_music": "<gray>Set to a music disk ID (item name) to play the music disc inside the plot.</gray>",
|
||||||
"flags.flag_description_flight": "<gray>Set to `true` to enable flight within the plot when in survival or adventure mode</gray>\n<gray>set to `default` to use the gamemode default, and `false` to disable flight entirely.</gray>",
|
"flags.flag_description_flight": "<gray>Set to `true` to enable flight within the plot when in survival or adventure mode</gray>\n<gray>set to `default` to use the gamemode default, and `false` to disable flight entirely.</gray>",
|
||||||
"flags.flag_description_untrusted": "<gray>Set to `false` to disallow untrusted players from visiting the plot.</gray>",
|
"flags.flag_description_untrusted": "<gray>Set to `false` to disallow untrusted players from visiting the plot.</gray>",
|
||||||
"flags.flag_description_deny_exit": "<gray>Set to `true` to disallow players from exiting the plot.</gray>",
|
"flags.flag_description_deny_exit": "<gray>Set to `true` to disallow players from exiting the plot.</gray>",
|
||||||
"flags.flag_description_chat": "<gray>Set to `false` to prevent plot chat on the plot.</gray>",
|
"flags.flag_description_chat": "<gray>Set to `false` to prevent plot chat on the plot.</gray>",
|
||||||
"flags.flag_description_description": "<gray>Plot description. Supports MiniMessage/Adventure.</gray>",
|
"flags.flag_description_description": "<gray>Plot description. Supports MiniMessage/Adventure.</gray>",
|
||||||
"flags.flag_description_greeting": "<gray>Message sent to players on plot entry. Supports '&' color codes.</gray>",
|
"flags.flag_description_greeting": "<gray>Message sent to players on plot entry.</gray>",
|
||||||
"flags.flag_description_farewell": "<gray>Message sent to players when leaving the plot. Supports '&' color codes.</gray>",
|
"flags.flag_description_farewell": "<gray>Message sent to players when leaving the plot.</gray>",
|
||||||
"flags.flag_description_weather": "<gray>Specifies the weather conditions inside of the plot.</gray>",
|
"flags.flag_description_weather": "<gray>Specifies the weather conditions inside the plot.</gray>",
|
||||||
"flags.flag_description_animal_attack": "<gray>Set to `true` to allow animals to be attacked in the plot.</gray>",
|
"flags.flag_description_animal_attack": "<gray>Set to `true` to allow animals to be attacked in the plot.</gray>",
|
||||||
"flags.flag_description_animal_cap": "<gray>Set to an integer value to limit the amount of animals on the plot.</gray>",
|
"flags.flag_description_animal_cap": "<gray>Set to an integer value to limit the amount of animals on the plot.</gray>",
|
||||||
"flags.flag_description_animal_interact": "<gray>Set to `true` to allow animals to be interacted with in the plot.</gray>",
|
"flags.flag_description_animal_interact": "<gray>Set to `true` to allow animals to be interacted with in the plot.</gray>",
|
||||||
@ -557,8 +560,8 @@
|
|||||||
"flags.flag_description_ice_form": "<gray>Set to `true` to allow ice to form in the plot.</gray>",
|
"flags.flag_description_ice_form": "<gray>Set to `true` to allow ice to form in the plot.</gray>",
|
||||||
"flags.flag_description_ice_melt": "<gray>Set to `false` to disable ice melting in the plot.</gray>",
|
"flags.flag_description_ice_melt": "<gray>Set to `false` to disable ice melting in the plot.</gray>",
|
||||||
"flags.flag_description_instabreak": "<gray>Set to `true` to allow blocks to be instantaneously broken in survival mode.</gray>",
|
"flags.flag_description_instabreak": "<gray>Set to `true` to allow blocks to be instantaneously broken in survival mode.</gray>",
|
||||||
"flags.flag_description_invincible": "<gray>Set to `true` to prevent players from taking damage inside of the plot.</gray>",
|
"flags.flag_description_invincible": "<gray>Set to `true` to prevent players from taking damage inside the plot.</gray>",
|
||||||
"flags.flag_description_item_drop": "<gray>Set to `false` to prevent items from being dropped inside of the plot.</gray>",
|
"flags.flag_description_item_drop": "<gray>Set to `false` to prevent items from being dropped inside the plot.</gray>",
|
||||||
"flags.flag_description_kelp_grow": "<gray>Set to `false` to prevent kelp from growing in the plot.</gray>",
|
"flags.flag_description_kelp_grow": "<gray>Set to `false` to prevent kelp from growing in the plot.</gray>",
|
||||||
"flags.flag_description_liquid_flow": "<gray>Set to `false` to disable liquids from flowing within the plot.</gray>",
|
"flags.flag_description_liquid_flow": "<gray>Set to `false` to disable liquids from flowing within the plot.</gray>",
|
||||||
"flags.flag_description_misc_break": "<gray>Set to `true` to allow guests to break miscellaneous items.</gray>",
|
"flags.flag_description_misc_break": "<gray>Set to `true` to allow guests to break miscellaneous items.</gray>",
|
||||||
@ -603,10 +606,10 @@
|
|||||||
"flags.flag_description_guest_gamemode": "<gray>Determines the guest gamemode in the plot.</gray>",
|
"flags.flag_description_guest_gamemode": "<gray>Determines the guest gamemode in the plot.</gray>",
|
||||||
"flags.flag_description_blocked_cmds": "<gray>A list of commands that are blocked in the plot.</gray>",
|
"flags.flag_description_blocked_cmds": "<gray>A list of commands that are blocked in the plot.</gray>",
|
||||||
"flags.flag_description_keep": "<gray>Prevents the plot from expiring. Can be set to: true, false, the number of milliseconds to keep the plot for or a timestamp (3w 2d 5h).</gray>",
|
"flags.flag_description_keep": "<gray>Prevents the plot from expiring. Can be set to: true, false, the number of milliseconds to keep the plot for or a timestamp (3w 2d 5h).</gray>",
|
||||||
"flags.flag_description_keep_inventory": "<gray>Prevents players from dropping their items when they die inside of the plot.</gray>",
|
"flags.flag_description_keep_inventory": "<gray>Prevents players from dropping their items when they die inside the plot.</gray>",
|
||||||
"flags.flag_description_deny_portal_travel": "<gray>Prevents players from travelling across dimensions by using portals.</gray>",
|
"flags.flag_description_deny_portal_travel": "<gray>Prevents players from travelling across dimensions by using portals.</gray>",
|
||||||
"flags.flag_description_deny_portals": "<gray>Prevents players from creating portals of any kind.</gray>",
|
"flags.flag_description_deny_portals": "<gray>Prevents players from creating portals of any kind.</gray>",
|
||||||
"flags.flag_description_lectern_read_book": "<gray>Prevents players taking books from lecterns.</gray>",
|
"flags.flag_description_lectern_read_book": "<gray>Prevent players taking books from lecterns.</gray>",
|
||||||
"flags.flag_description_prevent_creative_copy": "<gray>Prevents people from copying item NBT data in the plot unless they're added as members.</gray>",
|
"flags.flag_description_prevent_creative_copy": "<gray>Prevents people from copying item NBT data in the plot unless they're added as members.</gray>",
|
||||||
"flags.flag_description_leaf_decay": "<gray>Set to `false` to prevent leaves from decaying.",
|
"flags.flag_description_leaf_decay": "<gray>Set to `false` to prevent leaves from decaying.",
|
||||||
"flags.flag_error_boolean": "Flag value must be a boolean (true | false).",
|
"flags.flag_error_boolean": "Flag value must be a boolean (true | false).",
|
||||||
@ -620,8 +623,6 @@
|
|||||||
"flags.flag_error_title": "Flag value must be in the format </red><grey>\"A title\" \"The subtitle\"</grey><red>.",
|
"flags.flag_error_title": "Flag value must be in the format </red><grey>\"A title\" \"The subtitle\"</grey><red>.",
|
||||||
"flags.area_flags": "<prefix><gray>Area flags: </gray><dark_aqua><flags></dark_aqua>",
|
"flags.area_flags": "<prefix><gray>Area flags: </gray><dark_aqua><flags></dark_aqua>",
|
||||||
"flags.road_flags": "<prefix><gray>Road flags: </gray><dark_aqua><flags></dark_aqua>",
|
"flags.road_flags": "<prefix><gray>Road flags: </gray><dark_aqua><flags></dark_aqua>",
|
||||||
"flags.greeting_flag_format": "<prefix><gold>[<world>;<plot_id>]:</gold> <greeting>",
|
|
||||||
"flags.farewell_flag_format": "<prefix><gold>[<world>;<plot_id>]:</gold> <farewell>",
|
|
||||||
"commands.description.add": "<gray>Allow a user to build in a plot while the plot owner is online.</gray>",
|
"commands.description.add": "<gray>Allow a user to build in a plot while the plot owner is online.</gray>",
|
||||||
"commands.description.alias": "<gray>Set the plot alias.</gray>",
|
"commands.description.alias": "<gray>Set the plot alias.</gray>",
|
||||||
"commands.description.area": "<gray>Create a new plot area.</gray>",
|
"commands.description.area": "<gray>Create a new plot area.</gray>",
|
||||||
|
@ -27,15 +27,15 @@ is to provide a lag-free and smooth experience.
|
|||||||
|
|
||||||
* [Download](https://www.spigotmc.org/resources/77506/)
|
* [Download](https://www.spigotmc.org/resources/77506/)
|
||||||
* [Discord](https://discord.gg/intellectualsites)
|
* [Discord](https://discord.gg/intellectualsites)
|
||||||
* [Wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki)
|
* [Wiki](https://intellectualsites.github.io/plotsquared-documentation/)
|
||||||
* [Issues](https://github.com/IntellectualSites/PlotSquared/issues)
|
* [Issues](https://github.com/IntellectualSites/PlotSquared/issues)
|
||||||
* [Translations](https://intellectualsites.crowdin.com/plotsquared/)
|
* [Translations](https://intellectualsites.crowdin.com/plotsquared/)
|
||||||
* [Contributing](https://github.com/IntellectualSites/.github/blob/main/CONTRIBUTING.md)
|
* [Contributing](https://github.com/IntellectualSites/.github/blob/main/CONTRIBUTING.md)
|
||||||
|
|
||||||
### Developer Resources
|
### Developer Resources
|
||||||
* [API Documentation](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/API-Documentation)
|
* [API Documentation](https://intellectualsites.github.io/plotsquared-documentation/api/api-documentation)
|
||||||
* [Event API](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/Events)
|
* [Event API](https://intellectualsites.github.io/plotsquared-documentation/api/event-api)
|
||||||
* [Flag API](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki/API-Flag)
|
* [Flag API](https://intellectualsites.github.io/plotsquared-documentation/api/flag-api)
|
||||||
|
|
||||||
# Official Addons
|
# Official Addons
|
||||||
* [Plot2Dynmap](http://www.spigotmc.org/resources/plot2dynmap.1292/)
|
* [Plot2Dynmap](http://www.spigotmc.org/resources/plot2dynmap.1292/)
|
||||||
|
@ -18,7 +18,7 @@ plugins {
|
|||||||
idea
|
idea
|
||||||
}
|
}
|
||||||
|
|
||||||
version = "6.3.1-SNAPSHOT"
|
version = "6.5.1"
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "com.plotsquared"
|
group = "com.plotsquared"
|
||||||
@ -77,7 +77,7 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks.compileJava.configure {
|
tasks.compileJava.configure {
|
||||||
options.release.set(16)
|
options.release.set(17)
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations.all {
|
configurations.all {
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
[versions]
|
[versions]
|
||||||
# Minecraft expectations
|
# Minecraft expectations
|
||||||
gson = "2.8.9" # Version set by Minecraft
|
gson = "2.8.8" # Version set by Minecraft
|
||||||
log4j-api = "2.17.1" # Version set by Minecraft
|
log4j-api = "2.17.1" # Version set by Minecraft
|
||||||
guava = "31.0.1-jre" # Version set by Minecraft
|
guava = "31.0.1-jre" # Version set by Minecraft
|
||||||
|
|
||||||
# Platform expectations
|
# Platform expectations
|
||||||
paper = "1.18.1-R0.1-SNAPSHOT"
|
paper = "1.18.1-R0.1-SNAPSHOT"
|
||||||
checker-qual = "3.21.1"
|
checker-qual = "3.21.2"
|
||||||
guice = "5.0.1"
|
guice = "5.1.0"
|
||||||
findbugs = "3.0.1"
|
findbugs = "3.0.1"
|
||||||
snakeyaml = "1.30" # Version set by Bukkit
|
snakeyaml = "1.30" # Version set by Bukkit
|
||||||
|
|
||||||
@ -17,11 +17,11 @@ adventure-text-minimessage = "4.1.0-SNAPSHOT"
|
|||||||
adventure-platform-bukkit = "4.0.1"
|
adventure-platform-bukkit = "4.0.1"
|
||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
worldedit = "7.2.8"
|
worldedit = "7.2.9"
|
||||||
fawe = "2.0.0"
|
fawe = "2.0.1"
|
||||||
vault = "1.7.1"
|
vault = "1.7.1"
|
||||||
placeholderapi = "2.11.1"
|
placeholderapi = "2.11.1"
|
||||||
luckperms = "5.3"
|
luckperms = "5.4"
|
||||||
essentialsx = "2.19.2"
|
essentialsx = "2.19.2"
|
||||||
mvdwapi = "3.1.1"
|
mvdwapi = "3.1.1"
|
||||||
|
|
||||||
@ -30,8 +30,8 @@ prtree = "2.0.0"
|
|||||||
aopalliance = "1.0"
|
aopalliance = "1.0"
|
||||||
cloud-services = "1.6.1"
|
cloud-services = "1.6.1"
|
||||||
arkitektonika = "2.1.1"
|
arkitektonika = "2.1.1"
|
||||||
paster = "1.1.3"
|
paster = "1.1.4"
|
||||||
bstats = "2.2.1"
|
bstats = "3.0.0"
|
||||||
paperlib = "1.0.7"
|
paperlib = "1.0.7"
|
||||||
squirrelid = "0.3.0"
|
squirrelid = "0.3.0"
|
||||||
serverlib = "2.3.1"
|
serverlib = "2.3.1"
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
Reference in New Issue
Block a user