diff --git a/pom.xml b/pom.xml
index 58fa508..c351eba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,14 +46,15 @@
1.8
2.0.2
- 1.16.1-R0.1-SNAPSHOT
- 1.14.0-SNAPSHOT
- 2.4.0-SNAPSHOT
+ 1.16.4-R0.1-SNAPSHOT
+ 1.15.4
+ 2.5.0
+ 1.4.0-SNAPSHOT
1.7
${build.version}-SNAPSHOT
- 1.13.0
+ 1.14.0
-LOCAL
@@ -159,6 +160,12 @@
${level.version}
provided
+
+ world.bentobox
+ Greenhouses
+ ${greenhouses.version}
+ provided
+
net.milkbowl.vault
VaultAPI
diff --git a/src/main/java/world/bentobox/biomes/BiomesAddon.java b/src/main/java/world/bentobox/biomes/BiomesAddon.java
index b1ebd56..152b573 100644
--- a/src/main/java/world/bentobox/biomes/BiomesAddon.java
+++ b/src/main/java/world/bentobox/biomes/BiomesAddon.java
@@ -22,6 +22,7 @@
import world.bentobox.biomes.handlers.ChangeBiomeRequestHandler;
import world.bentobox.biomes.listeners.ChangeOwnerListener;
import world.bentobox.biomes.listeners.ChunkLoadListener;
+import world.bentobox.greenhouses.Greenhouses;
import world.bentobox.level.Level;
@@ -64,16 +65,15 @@ public void onEnable()
return;
}
- hookInGameModes();
+ this.hookInGameModes();
if (this.hooked)
{
- setupAddon();
+ this.setupAddon();
}
else
{
- this.logError(
- "Biomes could not hook into any GameMode so will not do anything!");
+ this.logError("Biomes could not hook into any GameMode so will not do anything!");
this.setState(State.DISABLED);
}
}
@@ -87,11 +87,13 @@ private void setupAddon() {
this.addonManager = new BiomesAddonManager(this);
// Try to find Level addon and if it does not exist, display a warning
- findLevelAddon();
+ this.findLevelAddon();
+ // Try to find Greenhouses addon
+ this.findGreenhousesAddon();
+ // Try to find Economy Plugin
+ this.findVaultPlugin();
- findVaultPlugin();
-
- // Register the reset listener
+ // Register the reset listener
this.registerListener(new ChangeOwnerListener(this));
this.registerListener(new ChunkLoadListener(this));
@@ -108,79 +110,87 @@ private void setupAddon() {
if (this.settings.getUpdateTickCounter() > 0)
{
// This task will force-load chunk every update tick if its biome is not updated.
- runChunkUpdatingScheduler();
+ this.runChunkUpdatingScheduler();
}
-
}
/**
* This task will force-load chunk every update tick if its biome is not updated.
*/
- private void runChunkUpdatingScheduler() {
- Bukkit.getScheduler().runTaskTimer(this.getPlugin(), () -> {
- Iterator iterator =
+ private void runChunkUpdatingScheduler()
+ {
+ Bukkit.getScheduler().runTaskTimer(this.getPlugin(), () -> {
+ Iterator iterator =
this.addonManager.getBiomeUpdaterCollection().iterator();
- // if there is nothing to load, then skip.
- if (!iterator.hasNext())
- {
- return;
- }
+ // if there is nothing to load, then skip.
+ if (!iterator.hasNext())
+ {
+ return;
+ }
- BiomeChunkUpdateObject updater = iterator.next();
+ BiomeChunkUpdateObject updater = iterator.next();
- // if chunk is already force-loaded, then skip.
- while (iterator.hasNext() && updater.isForceLoaded())
- {
- updater = iterator.next();
- }
+ // if chunk is already force-loaded, then skip.
+ while (iterator.hasNext() && updater.isForceLoaded())
+ {
+ updater = iterator.next();
+ }
- World world = updater.getWorld();
+ World world = updater.getWorld();
- // if chunk is loaded then skip.
- if (!world.isChunkLoaded(updater.getChunkX(), updater.getChunkZ()))
- {
- // Set flag as force-loaded.
- updater.setForceLoaded(true);
+ // if chunk is loaded then skip.
+ if (!world.isChunkLoaded(updater.getChunkX(), updater.getChunkZ()))
+ {
+ // Set flag as force-loaded.
+ updater.setForceLoaded(true);
- // force-load chunk asynchronously
- Util.getChunkAtAsync(world,
+ // force-load chunk asynchronously
+ Util.getChunkAtAsync(world,
updater.getChunkX(),
updater.getChunkZ());
- }
- },
- this.settings.getUpdateTickCounter(),
- this.settings.getUpdateTickCounter());
+ }
+ },
+ this.settings.getUpdateTickCounter(),
+ this.settings.getUpdateTickCounter());
}
- private void findVaultPlugin() {
+ /**
+ * This is silly method that was introduced to reduce main method complexity, and just reports
+ * if economy is enabled or not.
+ */
+ private void findVaultPlugin()
+ {
Optional vault = this.getPlugin().getVault();
if (!vault.isPresent() || !vault.get().hook())
{
this.vaultHook = null;
this.logWarning(
- "Economy plugin not found so money requirements will be ignored!");
+ "Economy plugin not found so money requirements will be ignored!");
}
else
{
- this.economyProvided = true;
this.vaultHook = vault.get();
}
-
}
- private void findLevelAddon() {
+ /**
+ * This is silly method that was introduced to reduce main method complexity, and just reports
+ * if level addon is enabled or not.
+ */
+ private void findLevelAddon()
+ {
Optional level = this.getAddonByName("Level");
if (!level.isPresent())
{
this.logWarning(
- "Level add-on not found so level requirements will be ignored!");
+ "Level add-on not found so level requirements will be ignored!");
this.levelAddon = null;
this.levelProvided = false;
}
@@ -192,7 +202,27 @@ private void findLevelAddon() {
}
- private void hookInGameModes() {
+ /**
+ * This is silly method that was introduced to reduce main method complexity, and just reports
+ * if greenhouses is enabled or not.
+ */
+ private void findGreenhousesAddon()
+ {
+ Optional greenhouses = this.getAddonByName("Greenhouses");
+
+ if (greenhouses.isPresent())
+ {
+ this.greenhousesProvided = true;
+ this.greenhouses = (Greenhouses) greenhouses.get();
+ }
+ }
+
+
+ /**
+ * This method hooks commands and flags into each GameModeAddon.
+ */
+ private void hookInGameModes()
+ {
this.getPlugin().getAddonsManager().getGameModeAddons().forEach(gameModeAddon -> {
if (!this.settings.getDisabledGameModes().contains(gameModeAddon.getDescription().getName()))
{
@@ -304,7 +334,7 @@ public Settings getSettings()
*/
public boolean isEconomyProvided()
{
- return this.economyProvided;
+ return this.vaultHook != null && this.vaultHook.hook();
}
@@ -338,9 +368,29 @@ public boolean isLevelProvided()
}
- // ---------------------------------------------------------------------
- // Section: Variables
- // ---------------------------------------------------------------------
+ /**
+ * This method returns the Greenhouses value.
+ * @return the value of Greenhouses.
+ */
+ public Greenhouses getGreenhouses()
+ {
+ return this.greenhouses;
+ }
+
+
+ /**
+ * This method returns the greenhousesProvided value.
+ * @return the value of greenhousesProvided.
+ */
+ public boolean isGreenhousesProvided()
+ {
+ return this.greenhousesProvided;
+ }
+
+
+// ---------------------------------------------------------------------
+// Section: Variables
+// ---------------------------------------------------------------------
/**
@@ -358,11 +408,6 @@ public boolean isLevelProvided()
*/
private Settings settings;
- /**
- * This boolean indicate if economy is enabled.
- */
- private boolean economyProvided;
-
/**
* VaultHook that process economy.
*/
@@ -378,6 +423,16 @@ public boolean isLevelProvided()
*/
private boolean levelProvided;
+ /**
+ * Greenhouses addon.
+ */
+ private Greenhouses greenhouses;
+
+ /**
+ * This indicate if greenhouses addon exists.
+ */
+ private boolean greenhousesProvided;
+
// ---------------------------------------------------------------------
// Section: Flags
diff --git a/src/main/java/world/bentobox/biomes/BiomesAddonManager.java b/src/main/java/world/bentobox/biomes/BiomesAddonManager.java
index a1b9997..a814b6a 100644
--- a/src/main/java/world/bentobox/biomes/BiomesAddonManager.java
+++ b/src/main/java/world/bentobox/biomes/BiomesAddonManager.java
@@ -12,6 +12,7 @@
import java.util.TreeMap;
import java.util.stream.Collectors;
+import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.configuration.ConfigurationSection;
@@ -618,6 +619,22 @@ public boolean hasAnyBiome(World world)
}
+ /**
+ * This method returns true if in given location exit a greenhouse.
+ * @param world World where greenhouse must be searched.
+ * @param x X location.
+ * @param y Y location.
+ * @param z Z location.
+ * @return {@code true} if in given location exist a greenhouse, {@code false} otherwise.
+ */
+ public boolean hasGreenhouseInLocation(World world, int x, int y, int z)
+ {
+ return this.addon.isGreenhousesProvided() &&
+ this.addon.getGreenhouses().getManager().getMap().
+ inGreenhouse(new Location(world, x, y, z));
+ }
+
+
// ---------------------------------------------------------------------
// Section: Later Biome Updater
// ---------------------------------------------------------------------
diff --git a/src/main/java/world/bentobox/biomes/events/BiomeChangedEvent.java b/src/main/java/world/bentobox/biomes/events/BiomeChangedEvent.java
index ed2fe4f..753b64b 100644
--- a/src/main/java/world/bentobox/biomes/events/BiomeChangedEvent.java
+++ b/src/main/java/world/bentobox/biomes/events/BiomeChangedEvent.java
@@ -4,6 +4,7 @@
import java.util.UUID;
import org.bukkit.block.Biome;
+import org.bukkit.event.HandlerList;
import world.bentobox.bentobox.api.events.BentoBoxEvent;
@@ -14,7 +15,7 @@
*/
public class BiomeChangedEvent extends BentoBoxEvent
{
- /**
+/**
* Constructor BiomeChangeEvent creates a new BiomeChangeEvent instance.
*
* @param biomeID of type String that represents biome unique id. May be empty.
@@ -243,6 +244,34 @@ public void setMaxY(int maxY)
}
+// ---------------------------------------------------------------------
+// Section: Handler methods
+// ---------------------------------------------------------------------
+
+
+ /**
+ * Gets handlers.
+ *
+ * @return the handlers
+ */
+ @Override
+ public HandlerList getHandlers()
+ {
+ return BiomeChangedEvent.handlers;
+ }
+
+
+ /**
+ * Gets handlers.
+ *
+ * @return the handlers
+ */
+ public static HandlerList getHandlerList()
+ {
+ return BiomeChangedEvent.handlers;
+ }
+
+
// ---------------------------------------------------------------------
// Section: Variables
// ---------------------------------------------------------------------
@@ -292,5 +321,10 @@ public void setMaxY(int maxY)
* Maximal Y coordinate of change range.
*/
private int maxY;
+
+ /**
+ * Event listener list for current
+ */
+ private static final HandlerList handlers = new HandlerList();
}
diff --git a/src/main/java/world/bentobox/biomes/listeners/ChangeOwnerListener.java b/src/main/java/world/bentobox/biomes/listeners/ChangeOwnerListener.java
index 2ee3468..ecc32b0 100644
--- a/src/main/java/world/bentobox/biomes/listeners/ChangeOwnerListener.java
+++ b/src/main/java/world/bentobox/biomes/listeners/ChangeOwnerListener.java
@@ -9,7 +9,7 @@
import org.bukkit.event.Listener;
import world.bentobox.bentobox.api.addons.GameModeAddon;
-import world.bentobox.bentobox.api.events.team.TeamEvent.TeamSetownerEvent;
+import world.bentobox.bentobox.api.events.team.TeamSetownerEvent;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.biomes.BiomesAddon;
import world.bentobox.biomes.config.Settings.UpdateMode;
@@ -30,7 +30,7 @@ public ChangeOwnerListener(BiomesAddon addon)
}
- @EventHandler(priority = EventPriority.LOW)
+ @EventHandler(priority = EventPriority.MONITOR)
public void onTeamSetOwnerEvent(TeamSetownerEvent event)
{
// Do nothing if biome reset is diabled.
diff --git a/src/main/java/world/bentobox/biomes/listeners/ChunkLoadListener.java b/src/main/java/world/bentobox/biomes/listeners/ChunkLoadListener.java
index 8ae65ad..0b12016 100644
--- a/src/main/java/world/bentobox/biomes/listeners/ChunkLoadListener.java
+++ b/src/main/java/world/bentobox/biomes/listeners/ChunkLoadListener.java
@@ -69,8 +69,13 @@ public void onChunkLoad(ChunkLoadEvent event)
{
for (int y = updateObject.getMinY(); y <= updateObject.getMaxY(); y += 4)
{
- // Change Biome
- updateObject.getWorld().setBiome(x, y, z, updateObject.getBiome());
+ // Biome should not be changed in Greenhouses.
+ if (!this.addon.getAddonManager().
+ hasGreenhouseInLocation(updateObject.getWorld(), x, y, z))
+ {
+ // Change Biome
+ updateObject.getWorld().setBiome(x, y, z, updateObject.getBiome());
+ }
}
}
}
diff --git a/src/main/java/world/bentobox/biomes/panels/user/UpdateModeGUI.java b/src/main/java/world/bentobox/biomes/panels/user/UpdateModeGUI.java
index dbb5a5a..6b00729 100644
--- a/src/main/java/world/bentobox/biomes/panels/user/UpdateModeGUI.java
+++ b/src/main/java/world/bentobox/biomes/panels/user/UpdateModeGUI.java
@@ -11,12 +11,15 @@
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
+import world.bentobox.bentobox.util.heads.HeadCache;
+import world.bentobox.bentobox.util.heads.HeadGetter;
import world.bentobox.biomes.BiomesAddon;
import world.bentobox.biomes.config.Settings.UpdateMode;
import world.bentobox.biomes.database.objects.BiomesObject;
import world.bentobox.biomes.panels.CommonGUI;
import world.bentobox.biomes.panels.GuiUtils;
import world.bentobox.biomes.panels.util.NumberGUI;
+import world.bentobox.biomes.utils.Utils;
/**
@@ -60,7 +63,7 @@ public void build()
PanelBuilder panelBuilder = new PanelBuilder().user(this.user).
name(this.user.getTranslation("biomes.gui.title.mode-choose"));
- GuiUtils.fillBorder(panelBuilder, Material.GRAY_STAINED_GLASS_PANE);
+ GuiUtils.fillBorder(panelBuilder, 4, Material.GRAY_STAINED_GLASS_PANE);
// Map at the top of the GUI
panelBuilder.item(4, this.createButton(Button.HEADER));
@@ -69,37 +72,39 @@ public void build()
if (BiomesAddon.BIOMES_WORLD_PROTECTION.isSetForWorld(this.world))
{
// Island mode should be available only if world protection is enabled.
- panelBuilder.item(12, this.createButton(Button.ISLAND));
+ panelBuilder.item(11, this.createButton(Button.ISLAND));
}
-
+
panelBuilder.item(13, this.createButton(Button.CHUNK));
- panelBuilder.item(14, this.createButton(Button.SQUARE));
-
- // Decrease of current value
- panelBuilder.item(19, this.createButton(Button.DECREASE, 10));
- panelBuilder.item(20, this.createButton(Button.DECREASE, 5));
- panelBuilder.item(21, this.createButton(Button.DECREASE, 1));
- // Paper that shows current value
- panelBuilder.item(22, this.createButton(Button.VALUE));
- // Increase of current value
- panelBuilder.item(23, this.createButton(Button.INCREASE, 1));
- panelBuilder.item(24, this.createButton(Button.INCREASE, 5));
- panelBuilder.item(25, this.createButton(Button.INCREASE, 10));
-
- // Set values
- panelBuilder.item(28, this.createButton(Button.SET, 0));
- panelBuilder.item(29, this.createButton(Button.SET, 2));
- panelBuilder.item(30, this.createButton(Button.SET, 4));
- panelBuilder.item(31, this.createButton(Button.SET, 8));
- panelBuilder.item(32, this.createButton(Button.SET, 16));
- panelBuilder.item(33, this.createButton(Button.SET, 32));
- panelBuilder.item(34, this.createButton(Button.SET, 64));
+ panelBuilder.item(15, this.createButton(Button.RANGE));
+
+ // Show buttons only for non-island update mode.
+ if (this.updateMode == UpdateMode.CHUNK)
+ {
+ // Decrease of current value
+ panelBuilder.item(21, this.createButton(Button.DECREASE, 1));
+ // Paper that shows current value
+ panelBuilder.item(22, this.createButton(Button.VALUE));
+ // Increase of current value
+ panelBuilder.item(23, this.createButton(Button.INCREASE, 1));
+ }
+ else if (this.updateMode == UpdateMode.RANGE)
+ {
+ panelBuilder.item(20, this.createButton(Button.DECREASE, 5));
+ // Decrease of current value
+ panelBuilder.item(21, this.createButton(Button.DECREASE, 1));
+ // Paper that shows current value
+ panelBuilder.item(22, this.createButton(Button.VALUE));
+ // Increase of current value
+ panelBuilder.item(23, this.createButton(Button.INCREASE, 1));
+ panelBuilder.item(24, this.createButton(Button.INCREASE, 5));
+ }
// Bottom buttons
- panelBuilder.item(39, this.createButton(Button.DECLINE));
- panelBuilder.item(41, this.createButton(Button.ACCEPT));
+ panelBuilder.item(30, this.createButton(Button.DECLINE));
+ panelBuilder.item(32, this.createButton(Button.ACCEPT));
- panelBuilder.item(44, this.returnButton);
+ panelBuilder.item(35, this.returnButton);
panelBuilder.build();
}
@@ -124,209 +129,202 @@ private PanelItem createButton(Button button)
*/
private PanelItem createButton(Button button, int number)
{
- PanelItemBuilder itemBuilder = new PanelItemBuilder();
-
+ String name;
+ ItemStack icon;
+ String description = "";
+ PanelItem.ClickHandler clickHandler;
+ boolean glow = false;
+
switch (button)
{
- case VALUE:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.value",
- NUMBER, Integer.toString(this.distanceValue)));
- itemBuilder.icon(new ItemStack(Material.PAPER, number));
+ case HEADER:
+ {
+ name = this.user.getTranslation("biomes.gui.buttons.information");
+
+ description = this.user.getTranslation("biomes.gui.descriptions.information",
+ "[biome]", this.biome.getFriendlyName(),
+ "[mode]", this.user.getTranslation("biomes.gui.descriptions.update-mode." + this.updateMode.name().toLowerCase()),
+ "[range]", Integer.toString(this.distanceValue));
- if (!this.updateMode.equals(UpdateMode.ISLAND))
+ icon = new ItemStack(Material.MAP, number);
+
+ clickHandler = null;
+ break;
+ }
+
+ case ISLAND:
{
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
+ name = this.user.getTranslation("biomes.gui.descriptions.update-mode.island");
- // On right click open NumberGui for +/- manual input.
- if (clickType.isRightClick())
- {
- new NumberGUI(this.user,
- this.distanceValue,
- 0,
- this.addon.getSettings().getLoreLineLength(),
- (status, value) -> {
- if (status)
- {
- this.distanceValue = value;
- }
-
- UpdateModeGUI.this.build();
- });
- }
+ icon = new ItemStack(Material.GRASS_BLOCK, number);
+ clickHandler = ((panel, user1, clickType, i) ->
+ {
+ this.updateMode = UpdateMode.ISLAND;
+ this.build();
return true;
});
- }
- break;
- }
- case INCREASE:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.increase", NUMBER, Integer.toString(number)));
+ glow = this.updateMode.equals(UpdateMode.ISLAND);
- if (this.updateMode.equals(UpdateMode.ISLAND))
- {
- itemBuilder.icon(new ItemStack(Material.BLACK_STAINED_GLASS_PANE, number));
+ break;
}
- else
+ case CHUNK:
{
- itemBuilder.icon(new ItemStack(Material.GREEN_STAINED_GLASS_PANE, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.distanceValue += number;
+ name = this.user.getTranslation("biomes.gui.descriptions.update-mode.chunk");
- // Several icons will be updated, so need to rebuild all?
+ icon = new ItemStack(Material.DIRT, number);
+ clickHandler = ((panel, user1, clickType, i) ->
+ {
+ this.updateMode = UpdateMode.CHUNK;
this.build();
return true;
});
- }
- break;
- }
- case DECREASE:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.decrease", NUMBER, Integer.toString(number)));
+ glow = this.updateMode.equals(UpdateMode.CHUNK);
- if (this.updateMode.equals(UpdateMode.ISLAND))
- {
- itemBuilder.icon(new ItemStack(Material.BLACK_STAINED_GLASS_PANE, number));
+ break;
}
- else
+ case RANGE:
{
- itemBuilder.icon(new ItemStack(Material.RED_STAINED_GLASS_PANE, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.distanceValue -= number;
+ name = this.user.getTranslation("biomes.gui.descriptions.update-mode.range");
- if (this.distanceValue < 0)
- {
- this.distanceValue = 0;
- // TODO: Probably need to inform or block - buttons.
- }
-
- // Several icons will be updated, so need to rebuild all?
+ icon = new ItemStack(Material.GLASS, number);
+ clickHandler = ((panel, user1, clickType, i) ->
+ {
+ this.updateMode = UpdateMode.RANGE;
this.build();
return true;
});
- }
- break;
- }
- case SET:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.set", NUMBER, Integer.toString(number)));
+ glow = this.updateMode.equals(UpdateMode.RANGE);
+
+ break;
+ }
- if (this.updateMode.equals(UpdateMode.ISLAND))
+ case VALUE:
{
- itemBuilder.icon(new ItemStack(Material.BLACK_STAINED_GLASS_PANE, number == 0 ? 1 : number));
+ name = this.user.getTranslation("biomes.gui.buttons.value",
+ NUMBER, Integer.toString(this.distanceValue));
+ icon = new ItemStack(Material.PAPER, number);
+
+ clickHandler = (panel, user1, clickType, i) -> {
+
+ // On right click open NumberGui for +/- manual input.
+ if (clickType.isRightClick())
+ {
+ new NumberGUI(this.user,
+ this.distanceValue,
+ 0,
+ this.addon.getSettings().getLoreLineLength(),
+ (status, value) -> {
+ if (status)
+ {
+ this.distanceValue = value;
+ }
+
+ UpdateModeGUI.this.build();
+ });
+ }
+ return true;
+ };
+
+ break;
}
- else
+ case INCREASE:
{
- if (number == 0)
- {
- itemBuilder.icon(new ItemStack(Material.YELLOW_STAINED_GLASS_PANE, 1));
- }
- else
- {
- itemBuilder.icon(new ItemStack(Material.WHITE_STAINED_GLASS_PANE, number));
- }
+ name = this.user.getTranslation("biomes.gui.buttons.increase",
+ NUMBER, Integer.toString(number));
+ icon = new ItemStack(Material.GREEN_CARPET);
+
+ clickHandler = (panel, user1, clickType, i) -> {
+ this.distanceValue += number;
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.distanceValue = number;
this.build();
return true;
- });
+ };
+
+ break;
}
+ case DECREASE:
+ {
+ name = this.user.getTranslation("biomes.gui.buttons.decrease",
+ NUMBER, Integer.toString(number));
+ icon = new ItemStack(Material.RED_CARPET);
+
+ clickHandler = (panel, user1, clickType, i) -> {
+ this.distanceValue -= number;
- break;
- }
- case ISLAND:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.descriptions.update-mode.island"));
- itemBuilder.icon(new ItemStack(Material.GRASS_BLOCK, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.updateMode = UpdateMode.ISLAND;
- this.build();
- return true;
- });
- itemBuilder.glow(this.updateMode.equals(UpdateMode.ISLAND));
-
- break;
- }
- case CHUNK:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.descriptions.update-mode.chunk"));
- itemBuilder.icon(new ItemStack(Material.DIRT, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.updateMode = UpdateMode.CHUNK;
- this.build();
- return true;
- });
- itemBuilder.glow(this.updateMode.equals(UpdateMode.CHUNK));
-
- break;
- }
- case SQUARE:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.descriptions.update-mode.square"));
- itemBuilder.icon(new ItemStack(Material.GLASS, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.updateMode = UpdateMode.RANGE;
- this.build();
- return true;
- });
- itemBuilder.glow(this.updateMode.equals(UpdateMode.RANGE));
-
- break;
- }
- case ACCEPT:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.accept"));
- itemBuilder.icon(new ItemStack(Material.GREEN_STAINED_GLASS_PANE, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- List arguments = new ArrayList<>(4);
+ if (this.distanceValue < 1)
+ {
+ this.distanceValue = 1;
+ }
- if (this.target != null)
- {
- arguments.add(this.target.getName());
- }
+ this.build();
+ return true;
+ };
+
+ break;
+ }
- arguments.add(this.biome.getUniqueId());
- arguments.add(this.updateMode.name());
- arguments.add(Integer.toString(this.distanceValue));
+ case ACCEPT:
+ {
+ name = this.user.getTranslation("biomes.gui.buttons.accept");
+
+ if (Utils.hasUserUpdateModePermission(this.user,
+ this.permissionPrefix,
+ this.updateMode,
+ this.biome.getUniqueId()))
+ {
+ icon = new ItemStack(Material.GREEN_STAINED_GLASS_PANE, number);
+ clickHandler = (panel, user1, clickType, i) -> {
+ List arguments = new ArrayList<>(4);
- this.callCommand(SET, arguments);
+ if (this.target != null)
+ {
+ arguments.add(this.target.getName());
+ }
- return true;
- });
+ arguments.add(this.biome.getUniqueId());
+ arguments.add(this.updateMode.name());
+ arguments.add(Integer.toString(this.distanceValue));
- break;
- }
- case DECLINE:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.decline"));
- itemBuilder.icon(new ItemStack(Material.RED_STAINED_GLASS_PANE, number));
- itemBuilder.clickHandler((panel, user1, clickType, i) -> {
- this.user.closeInventory();
- return true;
- });
-
- break;
- }
- case HEADER:
- {
- itemBuilder.name(this.user.getTranslation("biomes.gui.buttons.information"));
+ this.callCommand(SET, arguments);
- itemBuilder.description(GuiUtils.stringSplit(
- this.user.getTranslation("biomes.gui.descriptions.information",
- "[biome]", this.biome.getFriendlyName(),
- "[mode]", this.user.getTranslation("biomes.gui.descriptions.update-mode." + this.updateMode.name().toLowerCase()),
- "[range]", Integer.toString(this.distanceValue)),
- this.addon.getSettings().getLoreLineLength()));
+ return true;
+ };
+ }
+ else
+ {
+ icon = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, number);
+ clickHandler = null;
+ }
+
+ break;
+ }
+ case DECLINE:
+ {
+ name = this.user.getTranslation("biomes.gui.buttons.decline");
+ icon = new ItemStack(Material.RED_STAINED_GLASS_PANE, number);
+ clickHandler = (panel, user1, clickType, i) -> {
+ this.user.closeInventory();
+ return true;
+ };
- itemBuilder.icon(new ItemStack(Material.MAP, number));
- }
+ break;
+ }
+ default:
+ {
+ return PanelItem.empty();
+ }
}
- return itemBuilder.build();
+ return new PanelItemBuilder().
+ icon(icon).
+ name(name).
+ description(GuiUtils.stringSplit(description, this.addon.getSettings().getLoreLineLength())).
+ glow(glow).
+ clickHandler(clickHandler).
+ build();
}
@@ -340,13 +338,12 @@ private PanelItem createButton(Button button, int number)
*/
private enum Button
{
- SET,
INCREASE,
DECREASE,
VALUE,
ISLAND,
CHUNK,
- SQUARE,
+ RANGE,
ACCEPT,
DECLINE,
HEADER
@@ -360,12 +357,12 @@ private enum Button
/**
* Biomes that user can be changed.
*/
- private BiomesObject biome;
+ private final BiomesObject biome;
/**
* Target player. Most of times it will be equal user, but if admin changes, target will be different user.
*/
- private User target;
+ private final User target;
/**
* Integer value that is larger then 0 and provides information about chunk radius or block radius where
diff --git a/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateHelper.java b/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateHelper.java
index 2592cd5..f284d8a 100644
--- a/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateHelper.java
+++ b/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateHelper.java
@@ -1,12 +1,15 @@
package world.bentobox.biomes.tasks;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Optional;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
+import world.bentobox.bentobox.api.events.addon.AddonEvent;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
@@ -81,6 +84,12 @@ public boolean canChangeBiome()
return false;
}
+ if (!this.hasPermissionToUpdateMode())
+ {
+ this.callerUser.sendMessage("general.errors.no-permission");
+ return false;
+ }
+
if (!this.updateMode.equals(UpdateMode.ISLAND) && this.updateNumber <= 0)
{
// Cannot update negative numbers.
@@ -415,7 +424,16 @@ else if (World.Environment.THE_END.equals(this.biome.getEnvironment()))
if (this.canWithdraw)
{
this.addon.getPlugin().getVault().ifPresent(
- vaultHook -> vaultHook.withdraw(this.callerUser, this.biome.getRequiredCost()));
+ vaultHook -> {
+ vaultHook.withdraw(this.callerUser, this.biome.getRequiredCost());
+
+ Map keyValues = new HashMap<>();
+ keyValues.put("eventName", "BiomeBuyEvent");
+ keyValues.put("targetPlayer", this.callerUser.getUniqueId());
+ keyValues.put("biome", biome.getFriendlyName());
+
+ new AddonEvent().builder().addon(addon).keyValues(keyValues).build();
+ });
}
task.runTaskAsynchronously(this.addon.getPlugin());
@@ -433,6 +451,22 @@ private boolean checkPermissions()
}
+ /**
+ * This method returns if the caller user have a permission to change biome with a given
+ * update mode for given biomeObject.
+ * @return {@code true} if caller has permission to use given update mode on given biomeObject
+ * {@code false} otherwise.
+ */
+ public boolean hasPermissionToUpdateMode()
+ {
+ // TODO: probably passing permission string to helper would be more efficient.
+ return Utils.hasUserUpdateModePermission(this.callerUser,
+ this.addon.getPlugin().getIWM().getPermissionPrefix(this.world),
+ this.updateMode,
+ this.biome.getUniqueId());
+ }
+
+
// ---------------------------------------------------------------------
// Section: Variables
// ---------------------------------------------------------------------
diff --git a/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateTask.java b/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateTask.java
index 603afe1..68cba49 100644
--- a/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateTask.java
+++ b/src/main/java/world/bentobox/biomes/tasks/BiomeUpdateTask.java
@@ -100,8 +100,13 @@ public void run()
}
else
{
- // Change Biome
- updateObject.getWorld().setBiome(x, y, z, this.biome);
+ // Biome should not be changed in Greenhouses.
+ if (!this.addon.getAddonManager().
+ hasGreenhouseInLocation(updateObject.getWorld(), x, y, z))
+ {
+ // Change Biome
+ updateObject.getWorld().setBiome(x, y, z, this.biome);
+ }
}
}
}
diff --git a/src/main/java/world/bentobox/biomes/utils/Utils.java b/src/main/java/world/bentobox/biomes/utils/Utils.java
index d1626e9..0041b67 100644
--- a/src/main/java/world/bentobox/biomes/utils/Utils.java
+++ b/src/main/java/world/bentobox/biomes/utils/Utils.java
@@ -8,6 +8,8 @@
import org.bukkit.block.Biome;
import world.bentobox.bentobox.BentoBox;
+import world.bentobox.bentobox.api.user.User;
+import world.bentobox.biomes.config.Settings;
/**
@@ -15,6 +17,29 @@
*/
public class Utils
{
+ /**
+ * This method returns if given user has a permission to change biome to given biomeId
+ * with given updateMode.
+ * @param user User who must be checked for permissions.
+ * @param permissionPrefix String that represents gamemode permission prefix.
+ * @param updateMode UpdateMode that will be performed in biome change.
+ * @param biomeId BiomeObject it that will be applied.
+ * @return {@code true} if user has permissions to change biome with given ID and
+ * update mode, {@code false} otherwise.
+ */
+ public static boolean hasUserUpdateModePermission(User user,
+ String permissionPrefix,
+ Settings.UpdateMode updateMode,
+ String biomeId)
+ {
+ String updateModePermission =
+ permissionPrefix + "biomes.set." + updateMode.name().toLowerCase();
+
+ return user.hasPermission(updateModePermission + ".*") ||
+ user.hasPermission(updateModePermission + "." + biomeId.toLowerCase());
+ }
+
+
/**
* This method transforms given World into GameMode name. If world is not a GameMode
* world then it returns an empty string.
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index d350f79..e4e202b 100644
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -22,6 +22,15 @@ permissions:
'[gamemode].biomes.set':
description: Player can use biomes set command.
default: true
+ '[gamemode].biomes.set.island.*':
+ description: Player can change biome on whole island for all biomes.
+ default: true
+ '[gamemode].biomes.set.chunk.*':
+ description: Player can change biome by chunk for all biomes.
+ default: true
+ '[gamemode].biomes.set.range.*':
+ description: Player can change biome by range for all biomes.
+ default: true
'[gamemode].admin.biomes':
description: Player can use admin biomes command that opens GUI.
diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml
index cdbf435..1ad5eb0 100644
--- a/src/main/resources/locales/en-US.yml
+++ b/src/main/resources/locales/en-US.yml
@@ -185,7 +185,7 @@ biomes:
disabled: "disabled"
permission: " - [permission]"
- information: "If you accept these changes, we will try to change your island biome to [biome] in update mode [mode] with range [range]."
+ information: "If you accept these changes, we will try to change your island biome to [biome] in update mode [mode] with range [range]. | Be aware, that biome can be changed only in 4x4x4 blocks."
questions:
prefix: "&2[SERVER]: "
diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml
new file mode 100644
index 0000000..a55c520
--- /dev/null
+++ b/src/main/resources/locales/ru.yml
@@ -0,0 +1,318 @@
+---
+biomes:
+ gui:
+ title:
+ admin:
+ main-gui: "&6 Меню администратора"
+ edit: "&6 Редактировать [biome]"
+ settings: "&6 Настройки аддона"
+ edit-list: "&6 Редактируемый список биомов"
+ remove-list: "&6 Список съемных биомов"
+ user-list: "&6 Выберите игрока"
+ confirm-title: "&6 Подтвердить предыдущее действие"
+ manage-numbers: "&6 Управление числами"
+ select-biome: "&6 Выбрать биом"
+ toggle-environment: "&6 Переключить среду"
+ edit-text-fields: "&6 Редактировать текстовые поля"
+ select-block: "&6 Выберите материал"
+ lore-edit: "&6 Сообщение о знаниях"
+ lore-add: "&6 Добавить элемент знаний"
+ lore-remove: "&6 Удалить элемент знаний"
+ biomes-choose: "&6 Выбрать биом"
+ mode-choose: "&6 Выберите режим обновления"
+ buttons:
+ admin:
+ settings: Настройки
+ import: Импортировать
+ remove: Удалить биом
+ edit: Редактировать биом
+ add: Добавить биом
+ change: Изменить биом пользователя
+ change-biome: Биом
+ name: Отображаемое имя
+ icon: Значок
+ order: Порядок
+ description: Описание
+ deployment: Развертывание
+ required-permissions: Необходимые разрешения
+ required-level: Требуемый уровень
+ required-money: Требуемые деньги
+ advanced-menu: Расширенное меню
+ default-mode: Режим обновления по умолчанию
+ default-size: Размер по умолчанию
+ visibility-mode: Видимость биомов
+ line-length: Длина линии знаний
+ biomes-lore: Биомная история
+ cooldown: Перезарядка
+ reset-biomes: Сбросить событие
+ use-protection-range: Используйте диапазон защиты
+ toggle-user-list: Переключить список игроков
+ save: Сохранить
+ cancel: Отмена
+ input: Ввод
+ accept: Принять
+ set-mode: "="
+ increase-mode: "+"
+ reduce-mode: "-"
+ multiply-mode: "*"
+ number: "[number]"
+ add-string: Добавить строку
+ clear: Очистить
+ remove-empty: Удалить пустой
+ input-mode: Режим ввода
+ value: Стоимость
+ add-element: Добавить элемент
+ remove-element: Удалить элемент
+ environment: Изменить среду
+ lush: Показать пышные биомы
+ dry: Показать сухие биомы
+ cold: Показать холодные биомы
+ snowy: Показать снежные биомы
+ ocean: Показать биомы океана
+ nether: Показать нижние биомы
+ the_end: Показать конечные биомы
+ neutral: Показать нейтральные биомы
+ unused: Показать неиспользуемые / не включенные в список биомы
+ value: 'Текущее значение: [number]'
+ increase: Увеличить на [number]
+ decrease: Уменьшить на [number]
+ set: Установите значение [number]
+ accept: Принять
+ decline: Отказаться
+ information: Информация
+ return: Возвращение
+ previous: Предыдущий
+ next: следующий
+ descriptions:
+ admin:
+ settings: Изменить настройки
+ import: Импортируйте биомы из файла biomes.yml. | Щелкните правой кнопкой
+ мыши, чтобы включить / выключить режим перезаписи.
+ remove: Удалить биом из памяти
+ edit: Изменить свойства биома
+ add: Добавить новый биом в текущий мир
+ change: Изменить биом острова игрока
+ change-biome: Измените, какой биом Minecraft будет использоваться.
+ required-permissions: Измените необходимые разрешения для этого биома. | Без
+ этих разрешений игроки не смогут его использовать!
+ required-level: Изменить минимальный уровень острова. | &c Требуется дополнительный
+ уровень.
+ required-money: Измените стоимость биома. | &c Требуется дополнение / плагин
+ Economy.
+ name: Измените отображаемое имя для этого биома.
+ deployment: Отключить / включить возможность игроков использовать этот биом.
+ icon: Установите значок отображения для этого биома.
+ description: Измените описание этого биома.
+ order: Измените порядок размещения этого биома.
+ advanced-menu: Включение / отключение расширенного меню со всеми параметрами
+ изменения для игроков.
+ default-mode: Установить режим обновления биома по умолчанию. | Будет использоваться,
+ если расширенное меню отключено, и в качестве значений по умолчанию в этом
+ меню.
+ default-size: Установить размер обновления биома по умолчанию. | Будет использоваться,
+ если расширенное меню отключено, и в качестве значений по умолчанию в этом
+ меню.
+ visibility-mode: Измените, какие биомы могут видеть игроки.
+ line-length: Автоматическая установка длины символа строки описания.
+ biomes-lore: Измените, какие элементы в сообщении истории будут отображаться.
+ | Проверьте конфигурацию для получения дополнительной информации.
+ cooldown: Изменение времени восстановления в секундах между игроком может
+ снова сменить биом.
+ reset-biomes: Включение / отключение сброса биомов, если игрок с разрешением
+ на биом покидает остров.
+ use-protection-range: Включение / отключение обновления биома для ограничения
+ диапазона защиты острова. Если этот параметр отключен, будет использоваться
+ весь диапазон островов.
+ toggle-user-list: Переключите, какие игроки должны отображаться в текущем
+ меню.
+ save: Сохранить текущее значение и вернуться в предыдущее меню.
+ cancel: Вернуться в предыдущее меню без изменений.
+ input: Напишите номер в чате
+ set-mode: Переключитесь в режим установки, который установит текущее значение
+ на выбранное число.
+ increase-mode: Переключитесь в режим приращения, при котором текущее значение
+ будет увеличиваться на номер щелчка.
+ reduce-mode: Переключитесь в режим декремента, который уменьшит текущее значение
+ на номер щелчка.
+ multiply-mode: Переключитесь в режим умножения, в котором текущее значение
+ будет умножаться на нажатое число.
+ click-to-edit: "&4 Щелкните здесь, чтобы изменить ввод"
+ edit-text-line: "&6 Редактировать текстовое сообщение!"
+ add-text-line: "&6 Добавить новое текстовое сообщение!"
+ environment: Позволяет изменить активную среду для биома.
+ environment-active: " &2 - [value]"
+ environment-inactive: " &c - [value]"
+ lush: Содержит биомы со светло-зеленой травой (за исключением) и голубой водой.
+ | Любят равнины, лес, пляж и грибные поля.
+ dry: Содержит биомы с оливковой травой и голубой водой | Как пустыня, саванна
+ и бесплодные земли.
+ cold: Содержит биомы с травой цвета морской волны и водой цвета индиго. |
+ Любят горы и тайгу.
+ snowy: Содержит биомы с морской травой и фиолетовой водой. | Как снежная тундра
+ и замерзшая река.
+ ocean: Содержит большой объем воды. | Как океан.
+ nether: Содержит все нижние биомы. | Как пустоши преисподней.
+ the_end: Содержит все конечные биомы. | Как в конце.
+ neutral: Содержит пустоту и все биомы холмов. | Как пустота.
+ unused: Содержит неиспользуемые или не включенные в список биомы.
+ selected: "&6 Материал выбран"
+ lore:
+ description: Строка описания. | Определяемый в биомах объект - biomeObject.description.
+ original_biome: Оригинальная строка Minecraft Biome. | Представляет перевод
+ для 'biomes.gui.biome-description.biome-name'.
+ required_level: Обязательная строка уровня острова. | Представляет перевод
+ для "biomes.gui.biome-description.required-island-level".
+ required_money: Стоимость смены строки биома. | Представляет перевод для
+ "biomes.gui.biome-description.required-money".
+ required_permission: Строка необходимого разрешения. | Представляет перевод
+ для 'biomes.gui.biome-description.equired-permissions'.
+ update-mode:
+ island: Остров
+ chunk: Кусок
+ range: Ассортимент
+ undefined: Неопределенный
+ visibility-mode:
+ info: Измените видимые биомы.
+ all: Все &r- перечислить все биомы
+ deployed: Развернутые - список развернутых биомов
+ accessible: Доступный - список доступных биомов
+ toggleable: Toggleable - переключаемая кнопка в меню биомов
+ view-mode:
+ online: В сети
+ in-world: В этом мире
+ with-island: С островом
+ current-value: 'Текущее значение: [значение]'
+ enabled: включен
+ disabled: отключен
+ permission: " - [permission]"
+ information: Если вы примете эти изменения, мы попытаемся изменить биом вашего
+ острова на [биом] в режиме обновления [mode] с диапазоном [range].
+ questions:
+ prefix: "&2 [SERVER]:"
+ admin:
+ number: Напишите номер в чате и нажмите Enter, чтобы принять его.
+ name: Напишите понятное имя для данного биома.
+ uniqueID: Напишите уникальное имя объекта и нажмите Enter.
+ biomes-description:
+ biome-name: 'Биом Майнкрафт: [value]'
+ required-money: 'Стоимость: [value]'
+ required-island-level: 'Мин. Уровень острова: [value]'
+ required-permissions: 'Разрешения:'
+ commands:
+ admin:
+ add:
+ description: добавить новый биом. Он создает пустой объект биома с настройками
+ по умолчанию.
+ parameters: "[id]"
+ edit:
+ description: изменить данное свойство . Можно редактировать только существующие
+ свойства.
+ parameters: " "
+ help:
+ description: открывает интерфейс администратора для игроков.
+ import:
+ description: импортировать биомы из файла biomes.yml. Добавление перезаписи
+ перезапишет существующие биомы.
+ parameters: "[overwrite]"
+ set:
+ description: установить биом для острова . [тип] и [размер] не являются
+ обязательными.
+ parameters: " [type] [size]"
+ settings:
+ description: отредактируйте настройки по умолчанию с помощью простой команды.
+ Редактировать можно только существующие настройки.
+ parameters: " "
+ migrate:
+ description: перенести текущие данные биомов игрового мира в формат хранения.
+ user:
+ help:
+ description: открывает графический интерфейс изменения биома.
+ info:
+ description: отображать информацию о данном биоме.
+ parameters: ""
+ set:
+ description: установить биом острова на . [type] и [size] не являются
+ обязательными.
+ parameters: " [type] [size]"
+ errors:
+ unique-id: "&c Уникальный идентификатор &d [id] &c недействителен!"
+ too-many-arguments: "&c Слишком много параметров. Пожалуйста, проверьте справку!"
+ missing-arguments: "&c Отсутствуют параметры команды. Пожалуйста, проверьте справку!"
+ unknown-argument: "&c Неизвестные параметры команды. Пожалуйста, проверьте справку!"
+ incorrect-range: "&c Указанный номер &d '[number]' &c недействителен. Допустимы
+ только положительные целые числа."
+ incorrect-mode: "&c Заданное значение &d '[mode]' &c недопустимо. Допустимые значения:
+ ISLAND, CHUNK или SQUARE."
+ incorrect-icon: "&c Данный значок &d '[icon]' &c не может быть проанализирован.
+ Попробуйте что-нибудь другое."
+ incorrect-biome: "&c Данный биом &d '[biome]' &c не может быть найден в Minecraft.
+ Используйте правильное название биома."
+ incorrect-parameter: "&c Данное свойство &d '[property]' &c не определено для
+ биома."
+ incorrect-boolean: "&c Заданное значение &d '[boolean]' &c не является логическим.
+ Допустимые значения: «true» или «false»."
+ incorrect-visibility: "&c Заданное значение &d '[mode]' &c недопустимо."
+ incorrect-object: "&c Невозможно найти биом с данным ID &d '[biome]'."
+ no-biomes: "&c Биомы еще не реализованы в текущем мире!"
+ no-biomes-admin: "&c Биомы еще не реализованы в текущем мире! Используйте &5 /[command]
+ &c, чтобы добавить их!"
+ missing-user: "&c Пользователь не определен."
+ missing-biome: "&c Биом не определен."
+ wrong-icon: "&c Данный материал &6 [value] &c не может быть проанализирован в
+ ItemStack."
+ no-biomes-for-you: "&c К сожалению, пригодного для использования биома найти не
+ удалось."
+ not-valid-integer: "&c Заданное целое число «[value]» недействительно! | Значение
+ должно быть между [min] и [max]."
+ not-a-integer: '&c Заданное значение "[value]" не является целым числом!'
+ not-on-island: "&c Вы не на острове."
+ not-enough-money: "&c У вас недостаточно денег. Для изменения биома требуется
+ $[number]"
+ not-enough-level: "&c Уровень вашего острова слишком мал. Для биома требуется
+ как минимум уровень [number]"
+ admin-not-on-island: "&c Вы не на острове [user]."
+ disabled: "&c В настоящее время этот биом отключен."
+ missing-permission: "&c Для этого биома требуется &6[permission] &c разрешение.
+ У тебя нет этого."
+ no-file: "&c biomes.yml не найден."
+ no-load: "&c Ошибка при импорте биомов: [message]!"
+ load-biome: "&c Невозможно загрузить биом «[biome]», поскольку он не определен
+ в Minecraft. Используйте правильное название биома."
+ no-rank: "&c У вас недостаточно высокого ранга для этого."
+ information:
+ header: 'Биом: [name]'
+ type: " Тип: [type]"
+ description: " Описание: [description]"
+ level: " Уровень: [level]"
+ cost: " Стоимость: [cost]"
+ permission: " Разрешение: [permission]"
+ messages:
+ admin:
+ migrate-start: "&2 Начать перенос дополнительных данных о биомах."
+ migrate-end: "&2 Данные аддона Biomes обновлены до нового формата."
+ migrate-not: "&2 Все данные действительны."
+ saved: "&d Биом [biome] сохранен."
+ biome-created: "&d Новый объект биома создан с уникальным идентификатором: [id]"
+ saved-config: Обновлены настройки аддона.
+ biome-removed: Биом с уникальным идентификатором = '[biome]' удален из памяти.
+ update-start: "&e Обновление биома началось"
+ update-done: "&6[biome] &r&e успешно установлен на острове."
+ skipping: Пропуск импорта [biome].
+ overwriting: Перезапись [biome].
+ imported: "[biome] импортирован."
+ import-count: Импорт биомов завершен. Импортировано [number] биомов.
+protection:
+ flags:
+ BIOMES_ISLAND_PROTECTION:
+ description: |-
+ &5 &o Переключить, кто может
+ &5 &o изменить биом острова
+ name: Контроль биома
+ BIOMES_WORLD_PROTECTION:
+ description: |-
+ &5 &o Включить / отключить
+ &5 &o требование для игроков
+ &5 &o быть на их острове, чтобы
+ &5 &o изменить биом.
+ name: Ограничение острова Биом
+ hint: Вы должны быть на своем острове, чтобы изменить биом!
diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml
new file mode 100644
index 0000000..d0f2332
--- /dev/null
+++ b/src/main/resources/locales/tr.yml
@@ -0,0 +1,282 @@
+---
+biomes:
+ gui:
+ title:
+ admin:
+ main-gui: "& 6Yönt Menüsü"
+ edit: "& 6Düzenle [biyom]"
+ settings: "& 6Ekran Ayarları"
+ edit-list: "& 6 Düzenlenebilir Biyom Listesi"
+ remove-list: "& 6 Çıkarılabilir Biyom Listesi"
+ user-list: "& 6; Oyuncu Seç"
+ confirm-title: "& 6Önceki İşlemi Onayla"
+ manage-numbers: "& 6Yönetim Numaraları"
+ select-biome: "& 6Biyozu Seç"
+ toggle-environment: "& 6Toggle Ortamı"
+ edit-text-fields: Metin Alanlarını Düzenleme
+ select-block: "& 6Bir Malzeme Seç"
+ lore-edit: "& 6Daha Fazla Mesaj"
+ lore-add: "& 6 Lore Öğesi Ekle"
+ lore-remove: "& 6 Lore Öğesini Kaldır"
+ biomes-choose: "& 6Biyozu Seç"
+ mode-choose: "& 6Güncelleme Modunu Seç"
+ buttons:
+ admin:
+ settings: Ayarlar
+ import: İthalat
+ remove: Biyomu Kaldır
+ edit: Biyomu Düzenle
+ add: Biyom Ekle
+ change: Kullanıcı Biyomunu Değiştir
+ change-biome: biyom
+ name: Ekran adı
+ icon: ikon
+ order: Sipariş
+ description: Açıklama
+ deployment: yayılma
+ required-permissions: Gerekli İzinler
+ required-level: Gereken seviye
+ required-money: Gerekli Para
+ advanced-menu: Gelişmiş Menü
+ default-mode: Varsayılan Güncelleme Modu
+ default-size: Varsayılan Boyut
+ visibility-mode: Biyom Görünürlüğü
+ line-length: Lore Çizgi Uzunluğu
+ biomes-lore: Biome Lore
+ cooldown: Sakin ol
+ reset-biomes: Etkinliği Sıfırla
+ use-protection-range: Koruma Aralığı Kullan
+ toggle-user-list: Oyuncu Listesini Aç / Kapat
+ save: Kayıt etmek
+ cancel: İptal etmek
+ input: Giriş
+ accept: Kabul etmek
+ set-mode: "="
+ increase-mode: "+"
+ reduce-mode: "-"
+ multiply-mode: "*"
+ number: "[numara]"
+ add-string: Dize Ekle
+ clear: Açık
+ remove-empty: Boşaltmayı kaldır
+ input-mode: Giriş Modu
+ value: değer
+ add-element: Öğe Ekle
+ remove-element: Öğeyi Kaldır
+ value: 'Mevcut Değer: [sayı]'
+ increase: "[Sayı] kadar artır"
+ decrease: "[Sayı] kadar azalt"
+ set: Değeri [sayı] olarak ayarla
+ accept: Kabul etmek
+ decline: düşüş
+ information: Bilgi
+ return: Dönüş
+ previous: Önceki
+ next: Sonraki
+ descriptions:
+ admin:
+ edit-text-line: "& 6 Kısa mesajı düzenle!"
+ add-text-line: "& 6 Yeni kısa mesaj ekle!"
+ settings: Ayarları düzenle
+ import: Biomes.yml dosyasından biyomları içe aktarın. | Sağ tıklatma üzerine
+ yazma modunu etkinleştirir / devre dışı bırakır.
+ remove: Biyomu bellekten kaldır
+ edit: Biyom özelliklerini düzenleme
+ add: Mevcut dünyaya yeni biyom ekle
+ change: Oyuncunun ada biyomunu değiştir
+ change-biome: Hangi Minecraft Biome ürününün kullanılacağını değiştirin.
+ required-permissions: Bu biyom için gerekli izinleri değiştirin. | Bu izinler
+ olmadan oyuncular bunu kullanamazlar!
+ required-level: Minimum ada seviyesini değiştirin. | & CDeviye Eklentisi gerektirir.
+ required-money: Biyom maliyetini değiştirin. & CEkonomi Eklentisi / Eklentisi
+ gerektirir.
+ name: Bu Biyom için görünen adı değiştirin.
+ deployment: Oyuncuların bu biyomu kullanma yeteneğini devre dışı bırakın /
+ etkinleştirin.
+ icon: Bu biyom için ekran simgesini ayarlayın.
+ description: Bu biyomun tanımını değiştirin.
+ order: Bu biyomun sipariş yerleşimini değiştirin.
+ advanced-menu: Oyuncular için tüm değişiklik seçenekleriyle Gelişmiş Menüyü
+ etkinleştirin / devre dışı bırakın.
+ default-mode: Varsayılan biyom güncelleme modunu ayarlayın. | Gelişmiş Menü
+ devre dışı bırakılmışsa ve bu menüde varsayılan değerler olarak kullanılır.
+ default-size: Varsayılan biyom güncelleme boyutunu ayarlayın. | Gelişmiş Menü
+ devre dışıysa ve bu menüde varsayılan değerler olarak kullanılır.
+ visibility-mode: Oyuncuların hangi biyomları görebileceğini değiştirin.
+ line-length: Açıklama açıklama satırı karakter uzunluğunun otomatik ayarı.
+ biomes-lore: İrfan mesajında hangi öğelerin görüntüleneceğini değiştirin.
+ | Daha fazla bilgi için config'i kontrol edin.
+ cooldown: Oyuncu arasındaki bekleme süresini saniye cinsinden değiştirin,
+ biyomu tekrar değiştirebilir.
+ reset-biomes: Biyom izinli oyuncu adadan ayrılırsa biyom sıfırlamayı etkinleştir
+ / devre dışı bırak.
+ use-protection-range: Ada koruma aralığı ile sınırlı olmak için biyom güncellemesini
+ etkinleştirin / devre dışı bırakın. Bu devre dışı bırakılırsa, tüm ada aralığını
+ kullanır.
+ toggle-user-list: Geçerli Menü'de hangi oyuncuların görüntülenmesi gerektiğini
+ değiştirin.
+ save: Geçerli değeri kaydedin ve önceki Menüye dönün.
+ cancel: Değişiklik yapmadan önceki Menüye dönün.
+ input: Sohbete numara yaz
+ set-mode: Geçerli değeri tıklanan sayıya ayarlayacak moda ayarlama moduna
+ geçin.
+ increase-mode: Geçerli değeri tıklanan sayıya göre artıracak artış moduna
+ geçin.
+ reduce-mode: Geçerli değeri tıklanan sayı kadar azaltacak olan azaltma moduna
+ geçin.
+ multiply-mode: Mevcut değeri tıklanan sayı ile çarpacak çarpma moduna geçin.
+ click-to-edit: "& 4 Girişi düzenlemek için burayı tıklayın"
+ selected: "& 6Malzeme seçildi"
+ lore:
+ description: Açıklama dizesi. | Biyomlar nesnesinde tanımlanmıştır - biomeObject.description.
+ original_biome: Orijinal Minecraft Biome dizesi. | 'Biomes.gui.biome-description.biome-name'
+ için çeviriyi temsil eder.
+ required_level: Gerekli ada düzeyinde dize. | 'Biomes.gui.biome-description.gerek-ada-seviyesi'
+ çevirisini temsil eder.
+ required_money: Biyom dizisini değiştirme maliyeti. | 'Biomes.gui.biome-description.İhtiyaç-para'
+ çevirisini temsil eder.
+ required_permission: Gerekli izin dizesi. | 'Biomes.gui.biome-description.equired-permissions'
+ için çeviriyi temsil eder.
+ update-mode:
+ island: ada
+ chunk: yığın
+ undefined: Tanımsız
+ range: Aralık
+ visibility-mode:
+ all: Tümü & r- tüm biyomları listele
+ deployed: Konuşlandırılmış - konuşlandırılmış biyomları listele
+ accessible: Erişilebilir - erişilebilir biyomları listele
+ toggleable: Değiştirilebilir - Biomes Menüsü'ndeki değiştirilebilir düğme
+ info: Görünür biyomları değiştirin.
+ view-mode:
+ online: İnternet üzerinden
+ in-world: Bu dünyada
+ with-island: Ada ile
+ current-value: 'Geçerli değer: [değer]'
+ enabled: etkin
+ disabled: engelli
+ permission: " - [izin]"
+ information: Bu değişiklikleri kabul ederseniz, güncelleme modunda [mod] aralık
+ [aralık] ile ada biyomunuzu [biyom] olarak değiştirmeye çalışacağız.
+ questions:
+ prefix: 'Ve 2 [SERVER]:'
+ admin:
+ number: Sohbete bir numara yazın ve kabul etmek için enter tuşuna basın ve
+ enter tuşuna basın.
+ name: Verilen biyom için kolay bir isim yazın.
+ uniqueID: Nesnenin benzersiz adını yazın ve enter tuşuna basın.
+ biomes-description:
+ biome-name: 'Minecraft Biome: [değer]'
+ required-money: Maliyet değeri]
+ required-island-level: 'Min ada seviyesi: [değer]'
+ required-permissions: 'İzinler:'
+ commands:
+ admin:
+ add:
+ parameters: "[İD]"
+ description: yeni biyom ekleyin. Varsayılan ayarlarla boş biyom nesnesi oluşturur.
+ edit:
+ parameters: " "
+ description: verilen özelliği. Yalnızca mevcut özellikleri düzenleyebilir.
+ import:
+ parameters: "[Yazma]"
+ description: biyomları biomes.yml dosyasından alır. 'Üzerine yazma' eklendiğinde
+ mevcut biyomların üzerine yazılır.
+ settings:
+ parameters: " "
+ description: basit komut ile varsayılan ayarları düzenleyin. Yalnızca mevcut
+ ayarlar düzenlenebilir.
+ help:
+ description: oyuncular için Yönetici GUI'sini açar.
+ set:
+ description: " adası için biyom ayarlayın. [tip] ve [boyut] isteğe
+ bağlıdır."
+ parameters: " [tip] [boyut]"
+ migrate:
+ description: mevcut oyun dünyası biyomları verilerini depolama biçimine geçirir.
+ user:
+ info:
+ parameters: ""
+ description: verilen biyom hakkında bilgi görüntüler.
+ help:
+ description: biyom değişim GUI'sini açar.
+ set:
+ description: ada biyomunu olarak ayarlayın. [tip] ve [boyut] isteğe
+ bağlıdır.
+ parameters: " [tip] [boyut]"
+ errors:
+ unique-id: "& cBenzersiz id & d [id] & c geçerli değil!"
+ too-many-arguments: "& cÇok sayıda parametre. Lütfen yardıma bakın!"
+ missing-arguments: "& cMissing komut parametreleri. Lütfen yardıma bakın!"
+ unknown-argument: "& cBilinmeyen komut parametreleri. Lütfen yardıma bakın!"
+ incorrect-mode: "& c Verilen değer & d '[mod]' & c geçerli değil. Geçerli değerler
+ 'ADA', 'CHUNK' veya 'KARE' şeklindedir."
+ incorrect-parameter: "& c Verilen özellik & d '[özellik]' & c biyom için tanımlanmamıştır."
+ incorrect-boolean: "& c Verilen değer & d '[boolean]' & c bir boolean değildir.
+ Geçerli değerler 'true' veya 'false'."
+ incorrect-visibility: "& c Verilen değer & d '[mod]' & c geçerli değil."
+ incorrect-object: "& cVerilen ID & d '[biome]' ile biyom bulamıyor."
+ missing-user: "& cUser tanımlı değil."
+ missing-biome: "& cBiome tanımlanmamış."
+ wrong-icon: "& c Verilen malzeme & 6 [değer] & c, ItemStack ile ayrıştırılamaz."
+ not-valid-integer: '& cGerilen "[değer]" tamsayısı geçerli değil! | Değer [dak]
+ ile [maks] arasında olmalıdır.'
+ not-enough-money: "& c Yeteri kadar paran yok. Biyomu değiştirmek $ [number] gerektirir"
+ missing-permission: "& cBu biyom & 6 [izin] & c izni gerektirir. Sende yok."
+ no-file: "& cbiomes.yml bulunamadı."
+ no-load: "& cBiyomları alırken bir hata oluştu: [mesaj]!"
+ load-biome: "& c: Minecraft'ta tanımlanmadığı için '[biome]' biyomunu yükleyemiyorum.
+ Doğru biyom adını kullanın."
+ incorrect-range: "& c Verilen sayı & d '[sayı]' & c geçerli değil. Yalnızca pozitif
+ tamsayılar geçerlidir."
+ incorrect-icon: "& c Verilen simge & d '[simge]' & c ayrıştırılamıyor. Farklı
+ bir şey deneyin."
+ incorrect-biome: "& cGenilen biome & d '[biome]' & c Minecraft'ta bulunamıyor.
+ Doğru bir biyom ismi kullanın."
+ no-biomes: "& cBiomes henüz mevcut dünyada uygulanmadı!"
+ no-biomes-admin: "& cBiomes henüz mevcut dünyada uygulanmadı! Bunları eklemek
+ için & 5 / [komut] & c kullanın!"
+ no-biomes-for-you: Maalesef, kullanılabilir bir biyom bulunamadı.
+ not-a-integer: '& c Verilen değer "[değer]" bir tam sayı değil!'
+ not-on-island: "& cBir adada değilsin."
+ not-enough-level: "& c Ada seviyeniz çok küçük. Biyom en az seviye [sayı] gerektirir"
+ admin-not-on-island: "& c [Kullanıcının] adasında değilsiniz."
+ disabled: "& cŞu anda, bu biyom devre dışıdır."
+ no-rank: "& cBunu yapacak kadar yüksek bir rütbeniz yok."
+ information:
+ header: 'Biyom: [isim]'
+ type: " Tür: [tür]"
+ description: " Açıklama: [açıklama]"
+ level: " Seviye: [seviye]"
+ cost: " Maliyet maliyeti]"
+ permission: " İzin: [izin]"
+ messages:
+ admin:
+ migrate-start: "& 2Biyomlar ekleme verilerini taşımaya başlayın."
+ migrate-end: "& 2Biomes addon verileri yeni formata güncellenir."
+ migrate-not: "& 2Tüm veriler geçerlidir."
+ saved: "& dBiome [biome] kaydedilir."
+ biome-created: "& d uniqueID ile oluşturulan yeni Biome nesnesi: [id]"
+ update-done: "& 6 [biome] & r & e adada başarıyla kuruldu."
+ skipping: "[Biyom] ithalini atlıyor."
+ overwriting: Üzerine yazma [biyom].
+ saved-config: Eklenti ayarları güncellendi.
+ biome-removed: Eşsiz kimliğe sahip biyom = '[biome]' bellekten çıkarıldı.
+ update-start: "& eBiome güncellemesi başladı"
+ imported: "[biyom] ithal edildi."
+ import-count: Biyom ithalatı tamamlandı. İthal [sayı] biyomlar.
+protection:
+ flags:
+ BIOMES_WORLD_PROTECTION:
+ name: Biome Island sınırlaması
+ description: |-
+ & 5 & oEnable / devre dışı
+ & 5 & oyuncular için
+ & 5 & obe adalarında
+ & 5 & okanj biyomu.
+ hint: Biyomu değiştirmek için adanızda olmalısınız!
+ BIOMES_ISLAND_PROTECTION:
+ description: |-
+ & 5 & oKimleri yapabilir
+ & 5 & ada biyomunu değiştir
+ name: Biyom kontrolü