Compare commits
24 Commits
Author | SHA1 | Date |
---|---|---|
tastybento | aa6bd08027 | |
tastybento | 9e51156f87 | |
tastybento | 772ece5916 | |
tastybento | 1b4c4f86a8 | |
tastybento | 4d8b1c6649 | |
tastybento | 77c058b7fd | |
tastybento | 3bf71e1b98 | |
tastybento | 6e7b235e74 | |
BONNe | c21423accf | |
BONNe | e1121d3dce | |
BONNe | 75148c5e00 | |
tastybento | 4490c4a32d | |
tastybento | 6601875109 | |
BONNe | 276b9cea40 | |
BONNe | d3e3984bc0 | |
BONNe | 9e245431ac | |
gitlocalize-app[bot] | a155eb9600 | |
BONNe | 8ae4fac517 | |
BONNe | 42a9cf9c7e | |
gitlocalize-app[bot] | aab7f8eb7c | |
gitlocalize-app[bot] | 1c04f41257 | |
BONNe | 69b6bc9111 | |
BONNe | 3478c0352a | |
BONNe | 28f1a57838 |
|
@ -11,21 +11,22 @@ jobs:
|
|||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
- name: Set up JDK 16
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: 16
|
||||
distribution: 'adopt'
|
||||
java-version: 17
|
||||
- name: Cache SonarCloud packages
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.sonar/cache
|
||||
key: ${{ runner.os }}-sonar
|
||||
restore-keys: ${{ runner.os }}-sonar
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
|
@ -34,4 +35,4 @@ jobs:
|
|||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=BentoBoxWorld_CaveBlock
|
||||
run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=BentoBoxWorld_CaveBlock
|
||||
|
|
46
README.md
46
README.md
|
@ -3,14 +3,54 @@
|
|||
[![Discord](https://img.shields.io/discord/272499714048524288.svg?logo=discord)](https://discord.bentobox.world)
|
||||
[![Build Status](https://ci.codemc.org/buildStatus/icon?job=BentoBoxWorld/CaveBlock)](https://ci.codemc.org/job/BentoBoxWorld/job/CaveBlock/)
|
||||
|
||||
CaveBlock is an addon for BentoBox, so to run CaveBlock, you must have BentoBox installed. It is not a Bukkit plugin and trying to use it as one will not work.
|
||||
# Welcome to CaveBlock for BentoBox!
|
||||
|
||||
## Translation
|
||||
🌌 **Embark on a Subterranean Adventure!**
|
||||
|
||||
CaveBlock is an enthralling GameMode addon for BentoBox, designed to take your Minecraft experience to new depths. In this unique underground world, every adventure, challenge, and mystery lies beneath the surface.
|
||||
|
||||
<img src=https://github.com/BentoBoxWorld/CaveBlock/assets/4407265/af407f94-1943-4e27-96e1-d3e2ed33330f width="400">
|
||||
|
||||
## What is CaveBlock?
|
||||
|
||||
CaveBlock transforms the familiar Minecraft landscape into a vast underground realm. As a player, you begin your journey in a modest cave, equipped with only essential items. Your mission is to mine, explore, and expand your subterranean domain.
|
||||
|
||||
### Key Features:
|
||||
|
||||
- **Start Small, Dream Big:** Begin in a small cave and use your mining skills to expand your territory.
|
||||
- **Treasure Hunting:** Delve deeper to discover hidden treasures and rare resources.
|
||||
- **Beware of the Dark:** Monsters lurk in the shadows. Prepare for encounters with creatures of the deep.
|
||||
- **Build and Craft:** Utilize your resources to craft tools, build structures, and create your own underground empire.
|
||||
|
||||
## Getting Started with CaveBlock
|
||||
|
||||
CaveBlock is an addon for BentoBox, a Bukkit plugin for Minecraft. To dive into this underground adventure, you'll need to have BentoBox installed on your Minecraft server.
|
||||
|
||||
### Installation:
|
||||
|
||||
1. **Install BentoBox:** Make sure BentoBox is installed and running on your server.
|
||||
2. **Download CaveBlock:** Get the CaveBlock addon from the [official download site](https://download.bentobox.world). Or download from the releases in this repo.
|
||||
3. **Add to BentoBox:** Place the CaveBlock file in your BentoBox addons folder.
|
||||
4. **Restart Your Server:** Once installed, restart your server to activate CaveBlock.
|
||||
|
||||
### Dive Into the Depths!
|
||||
|
||||
Are you ready to explore the unknown and carve out your own piece of the underground world? Download CaveBlock now and start your subterranean adventure!
|
||||
|
||||
🔍 **Stay Updated:** For the latest updates, follow our [Discord](https://discord.gg/tqQbNA5X9A).
|
||||
|
||||
---
|
||||
|
||||
*Note: CaveBlock is constantly being updated with new features and improvements. Keep an eye on our release notes for the latest enhancements.*
|
||||
|
||||
**Happy Mining!** 🌐🛠️👾
|
||||
|
||||
## Translations
|
||||
|
||||
Like most BentoBox projects, the CaveBlock Addon is translatable into any language. Everyone can contribute, and translate some parts of the addon into their language via [GitLocalize](https://gitlocalize.com/repo/2968).
|
||||
If your language is not in the list, please contact the developers via Discord, and it will be added.
|
||||
|
||||
## Installation
|
||||
## Full Installation Instructions
|
||||
|
||||
0. Install BentoBox and run it on the server at least once to create its data folders.
|
||||
1. Place this jar in the addons folder of the BentoBox plugin.
|
||||
|
|
24
pom.xml
24
pom.xml
|
@ -43,14 +43,14 @@
|
|||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>16</java.version>
|
||||
<java.version>17</java.version>
|
||||
<!-- More visible way how to change dependency versions -->
|
||||
<spigot.version>1.18.1-R0.1-SNAPSHOT</spigot.version>
|
||||
<bentobox.version>1.19.0</bentobox.version>
|
||||
<spigot.version>1.20.2-R0.1-SNAPSHOT</spigot.version>
|
||||
<bentobox.version>2.0.0-SNAPSHOT</bentobox.version>
|
||||
<!-- Revision variable removes warning about dynamic version -->
|
||||
<revision>${build.version}-SNAPSHOT</revision>
|
||||
<!-- This allows to change between versions and snapshots. -->
|
||||
<build.version>1.16.0</build.version>
|
||||
<build.version>1.19.0</build.version>
|
||||
<build.number>-LOCAL</build.number>
|
||||
<sonar.organization>bentobox-world</sonar.organization>
|
||||
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
|
||||
|
@ -114,12 +114,6 @@
|
|||
<version>${spigot.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>plugin-annotations</artifactId>
|
||||
<version>1.2.3-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>world.bentobox</groupId>
|
||||
<artifactId>bentobox</artifactId>
|
||||
|
@ -189,18 +183,20 @@
|
|||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<version>3.3.0</version>
|
||||
<configuration>
|
||||
<show>public</show>
|
||||
<failOnError>false</failOnError>
|
||||
<additionalJOption>-Xdoclint:none</additionalJOption>
|
||||
<!-- To compile with Java 11, this tag may be required -->
|
||||
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<phase>install</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
|
@ -233,7 +229,7 @@
|
|||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.8.3</version>
|
||||
<version>0.8.10</version>
|
||||
<configuration>
|
||||
<append>true</append>
|
||||
<excludes>
|
||||
|
|
|
@ -282,6 +282,16 @@ public class CaveBlock extends GameModeAddon
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* This addon uses the new chunk generation API for the sea bottom
|
||||
*/
|
||||
@Override
|
||||
public boolean isUsesNewChunkGeneration()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
package world.bentobox.caveblock;
|
||||
|
||||
import org.bukkit.plugin.java.annotation.dependency.Dependency;
|
||||
import org.bukkit.plugin.java.annotation.plugin.ApiVersion;
|
||||
import org.bukkit.plugin.java.annotation.plugin.Plugin;
|
||||
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.addons.Pladdon;
|
||||
|
||||
|
||||
@Plugin(name = "Pladdon", version = "1.0")
|
||||
@ApiVersion(ApiVersion.Target.v1_18)
|
||||
@Dependency(value = "BentoBox")
|
||||
public class CaveBlockPladdon extends Pladdon {
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
package world.bentobox.caveblock;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
import org.bukkit.Difficulty;
|
||||
import org.bukkit.GameMode;
|
||||
|
@ -333,7 +328,7 @@ public class Settings implements WorldSettings
|
|||
* @return the defaultIslandFlags object.
|
||||
*/
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandFlags()
|
||||
public Map<String, Integer> getDefaultIslandFlagNames()
|
||||
{
|
||||
return defaultIslandFlags;
|
||||
}
|
||||
|
@ -344,7 +339,7 @@ public class Settings implements WorldSettings
|
|||
* @return the defaultIslandSettings object.
|
||||
*/
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandSettings()
|
||||
public Map<String, Integer> getDefaultIslandSettingNames()
|
||||
{
|
||||
return defaultIslandSettings;
|
||||
}
|
||||
|
@ -1179,7 +1174,7 @@ public class Settings implements WorldSettings
|
|||
* @param defaultIslandFlags the defaultIslandFlags object new value.
|
||||
*
|
||||
*/
|
||||
public void setDefaultIslandFlags(Map<Flag, Integer> defaultIslandFlags)
|
||||
public void setDefaultIslandFlags(Map<String, Integer> defaultIslandFlags)
|
||||
{
|
||||
this.defaultIslandFlags = defaultIslandFlags;
|
||||
}
|
||||
|
@ -1190,7 +1185,7 @@ public class Settings implements WorldSettings
|
|||
* @param defaultIslandSettings the defaultIslandSettings object new value.
|
||||
*
|
||||
*/
|
||||
public void setDefaultIslandSettings(Map<Flag, Integer> defaultIslandSettings)
|
||||
public void setDefaultIslandSettings(Map<String, Integer> defaultIslandSettings)
|
||||
{
|
||||
this.defaultIslandSettings = defaultIslandSettings;
|
||||
}
|
||||
|
@ -2143,6 +2138,20 @@ public class Settings implements WorldSettings
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandFlags()
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandSettings()
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
@ -2439,13 +2448,11 @@ public class Settings implements WorldSettings
|
|||
@ConfigComment(" SUB-OWNER = 900")
|
||||
@ConfigComment(" OWNER = 1000")
|
||||
@ConfigEntry(path = "world.default-cave-flags")
|
||||
@Adapter(FlagSerializer.class)
|
||||
private Map<Flag, Integer> defaultIslandFlags = new HashMap<>();
|
||||
private Map<String, Integer> defaultIslandFlags = new HashMap<>();
|
||||
|
||||
@ConfigComment("These are the default settings for new caves")
|
||||
@ConfigEntry(path = "world.default-cave-settings")
|
||||
@Adapter(FlagSerializer2.class)
|
||||
private Map<Flag, Integer> defaultIslandSettings = new HashMap<>();
|
||||
private Map<String, Integer> defaultIslandSettings = new HashMap<>();
|
||||
|
||||
@ConfigComment("These settings/flags are hidden from users")
|
||||
@ConfigComment("Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings")
|
||||
|
|
|
@ -11,6 +11,8 @@ import org.bukkit.generator.BlockPopulator;
|
|||
import org.bukkit.generator.LimitedRegion;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
import org.bukkit.util.BoundingBox;
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
|
||||
import world.bentobox.bentobox.util.Pair;
|
||||
import world.bentobox.caveblock.CaveBlock;
|
||||
import world.bentobox.caveblock.Utils;
|
||||
|
@ -95,7 +97,7 @@ public class EntitiesPopulator extends BlockPopulator {
|
|||
* @param limitedRegion Region where population operates.
|
||||
*/
|
||||
@Override
|
||||
public void populate(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, LimitedRegion limitedRegion) {
|
||||
public void populate(WorldInfo worldInfo, @NonNull Random random, int chunkX, int chunkZ, @NonNull LimitedRegion limitedRegion) {
|
||||
int minHeight = worldInfo.getMinHeight();
|
||||
int height = Math.min(worldInfo.getMaxHeight(), worldHeight) - 1;
|
||||
|
||||
|
@ -168,29 +170,22 @@ public class EntitiesPopulator extends BlockPopulator {
|
|||
if (!limitedRegion.isInRegion(location)) return;
|
||||
if (!limitedRegion.getType(location).equals(originalMaterial)) return;
|
||||
|
||||
Entity entity = limitedRegion.spawnEntity(location, entityType);
|
||||
if (entity instanceof LivingEntity livingEntity) {
|
||||
livingEntity.setAI(hasAI);
|
||||
livingEntity.setRemoveWhenFarAway(false);
|
||||
}
|
||||
BoundingBox bb = this.getEntityBoundingBox(entityType, location);
|
||||
|
||||
BoundingBox bb = entity.getBoundingBox();
|
||||
for (int x = (int) Math.floor(bb.getMinX()); x < bb.getMaxX(); x++) {
|
||||
for (int z = (int) Math.floor(bb.getMinZ()); z < bb.getMaxZ(); z++) {
|
||||
int y = (int) Math.floor(bb.getMinY());
|
||||
if (!limitedRegion.isInRegion(x, y, z)) {
|
||||
entity.remove();
|
||||
return;
|
||||
}
|
||||
|
||||
for (; y <= bb.getMaxY(); y++) {
|
||||
if (addon.getSettings().isDebug()) {
|
||||
addon.log("DEBUG: Entity spawn: " + worldInfo.getName() + " " + x + " " + y + " " + z + " " + entity.getType());
|
||||
addon.log("DEBUG: Entity spawn: " + worldInfo.getName() + " " + x + " " + y + " " + z + " " + entityType);
|
||||
}
|
||||
|
||||
if (!limitedRegion.isInRegion(x, y, z) || !limitedRegion.getType(x, y, z).equals(originalMaterial)) {
|
||||
// Cannot place entity
|
||||
entity.remove();
|
||||
return;
|
||||
}
|
||||
limitedRegion.setType(x, y, z, WATER_ENTITIES.contains(entityType) ? Material.WATER : Material.AIR);
|
||||
|
@ -201,8 +196,86 @@ public class EntitiesPopulator extends BlockPopulator {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Entity entity = limitedRegion.spawnEntity(location, entityType);
|
||||
|
||||
if (entity instanceof LivingEntity livingEntity)
|
||||
{
|
||||
livingEntity.setAI(hasAI);
|
||||
livingEntity.setRemoveWhenFarAway(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This is manual bounding box calculation base on entity type.
|
||||
* @param entityType Entity type which bounding box should be created.
|
||||
* @param location Location of the bounding box.
|
||||
* @return Approximate bounding box of the entity type.
|
||||
*/
|
||||
private BoundingBox getEntityBoundingBox(EntityType entityType, Location location)
|
||||
{
|
||||
BoundingBox boundingBox = new BoundingBox();
|
||||
// Set bounding box to 1 for all entities
|
||||
boundingBox.expand(1);
|
||||
// Shift to correct location.
|
||||
boundingBox.shift(location);
|
||||
|
||||
switch (entityType)
|
||||
{
|
||||
// Turtles base size is 1.1
|
||||
case TURTLE -> boundingBox.expand(-0.05, 0, -0.05, 0.05, 0, 0.05);
|
||||
// Panda base size is 1.3 and height is 1.25
|
||||
case PANDA -> boundingBox.expand(-0.15, 0, -0.15, 0.15, 0.25, 0.15);
|
||||
// Sheep height is 1.3
|
||||
case SHEEP -> boundingBox.expand(0, 0, 0, 0, 0.3, 0);
|
||||
// Cow height is 1.4
|
||||
case COW, MUSHROOM_COW -> boundingBox.expand(0, 0, 0, 0, 0.4, 0);
|
||||
// Polar Bear base size is 1.3 and height is 1.4
|
||||
case POLAR_BEAR -> boundingBox.expand(-0.15, 0, -0.15, 0.15, 0.4, 0.15);
|
||||
// Horse base size is 1.3964
|
||||
case HORSE, ZOMBIE_HORSE, SKELETON_HORSE -> boundingBox.expand(-0.2, 0, -0.2, 0.2, 0.6, 0.2);
|
||||
// Llama height is 1.875
|
||||
case LLAMA -> boundingBox.expand(0, 0, 0, 0, 0.875, 0);
|
||||
// Ravager base size is 1.95 and height is 2.2
|
||||
case RAVAGER -> boundingBox.expand(-0.48, 0, -0.48, 0.48, 1.2, 0.48);
|
||||
// Spider base size is 1.4
|
||||
case SPIDER -> boundingBox.expand(-0.2, 0, -0.2, 0.2, 0, 0.2);
|
||||
// Creeper height 1.7
|
||||
case CREEPER -> boundingBox.expand(0, 0, 0, 0, 0.7, 0);
|
||||
// Blaze height 1.8
|
||||
case BLAZE -> boundingBox.expand(0, 0, 0, 0, 0.8, 0);
|
||||
// Zombie, evoker, villager, husk, witch, vindicator, illusioner, drowned, pigman, villager and pillager height is 1.95
|
||||
case ZOMBIE, EVOKER, VILLAGER, HUSK, WITCH, VINDICATOR, ILLUSIONER, DROWNED, PIGLIN, PIGLIN_BRUTE, ZOMBIFIED_PIGLIN, ZOMBIE_VILLAGER, PILLAGER, WANDERING_TRADER ->
|
||||
boundingBox.expand(0, 0, 0, 0, 0.95, 0);
|
||||
// Skeletons height is 1.99
|
||||
case SKELETON, STRAY -> boundingBox.expand(0, 0, 0, 0, 0.99, 0);
|
||||
// Elder Guardians base height is 2
|
||||
case ELDER_GUARDIAN -> boundingBox.expand(-0.5, 0, -0.5, 0.5, 1, 0.5);
|
||||
// Slimes are up to 2.04
|
||||
case SLIME -> boundingBox.expand(-0.5, 0, -0.5, 0.5, 1, 0.5);
|
||||
// Wither skeletons height is 2.4
|
||||
case WITHER_SKELETON -> boundingBox.expand(0, 0, 0, 0, 1.4, 0);
|
||||
// Wither height is 3.5
|
||||
case WITHER -> boundingBox.expand(0, 0, 0, 0, 2.5, 0);
|
||||
// Enderman height is 2.9
|
||||
case ENDERMAN -> boundingBox.expand(0, 0, 0, 0, 1.9, 0);
|
||||
// Ghast base size is 4
|
||||
case GHAST -> boundingBox.expand(-2, 0, -2, 2, 3, 2);
|
||||
// Iron Golem base size is 1.4 and height is 2.7
|
||||
case IRON_GOLEM -> boundingBox.expand(-0.2, 0, -0.2, 0.2, 1.7, 0.2);
|
||||
// Snowman height is 1.9
|
||||
case SNOWMAN -> boundingBox.expand(0, 0, 0, 0, 0.9, 0);
|
||||
// Hoglin base size is 1.4 and height is 1.3965
|
||||
case HOGLIN, ZOGLIN -> boundingBox.expand(-0.2, 0, -0.2, 0.2, 0.4, 0.2);
|
||||
// Warden height is 2.9
|
||||
case WARDEN -> boundingBox.expand(0, 0, 0, 0, 1.9, 0);
|
||||
}
|
||||
|
||||
return boundingBox;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Private Classes
|
||||
// ---------------------------------------------------------------------
|
||||
|
|
|
@ -1,16 +1,22 @@
|
|||
package world.bentobox.caveblock.generators.populators;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.LimitedRegion;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
|
||||
import world.bentobox.caveblock.Utils;
|
||||
import world.bentobox.caveblock.generators.Ore;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author tastybento
|
||||
*/
|
||||
|
@ -19,95 +25,102 @@ public class NewMaterialPopulator extends BlockPopulator {
|
|||
private static final Map<World.Environment, List<Ore>> ORES;
|
||||
|
||||
static {
|
||||
Map<World.Environment, List<Ore>> ores = new EnumMap<>(World.Environment.class);
|
||||
// Source https://minecraft.fandom.com/wiki/Blob
|
||||
List<Ore> worldOres = new ArrayList<>();
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_DIAMOND_ORE, 1, 10, true));
|
||||
worldOres.add(new Ore(7, 16, Material.DIAMOND_ORE, 1, 10, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_LAPIS_ORE, 1, 7, true));
|
||||
worldOres.add(new Ore(7, 64, Material.LAPIS_ORE, 1, 7, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_GOLD_ORE, 2, 9, true));
|
||||
worldOres.add(new Ore(7, 30, Material.GOLD_ORE, 2, 9, true));
|
||||
worldOres.add(new Ore(0, 16, Material.TUFF, 2, 33, false));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_REDSTONE_ORE, 8, 8, true));
|
||||
worldOres.add(new Ore(7, 16, Material.REDSTONE_ORE, 8, 8, true));
|
||||
worldOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.GRANITE, 5, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.ANDESITE, 5, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.DIORITE, 5, 33, false));
|
||||
worldOres.add(new Ore(32, 320, Material.EMERALD_ORE, 11, 1, true));
|
||||
worldOres.add(new Ore(95, 136, Material.COAL_ORE, 20, 17, false));
|
||||
worldOres.add(new Ore(0, 7, Material.DEEPSLATE_COPPER_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(7, 96, Material.COPPER_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_IRON_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(7, 320, Material.IRON_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
ores.put(World.Environment.NORMAL, worldOres);
|
||||
List<Ore> netherOres = new ArrayList<>();
|
||||
netherOres.add(new Ore(1, 22, Material.ANCIENT_DEBRIS, 1, 5, true));
|
||||
netherOres.add(new Ore(-64, 30, Material.NETHER_GOLD_ORE, 2, 9, true));
|
||||
netherOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.BASALT, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.BLACKSTONE, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.FIRE, 8, 33, false));
|
||||
netherOres.add(new Ore(200, 320, Material.GLOWSTONE, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 320, Material.LAVA, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 16, Material.MAGMA_BLOCK, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_FUNGUS, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_FUNGUS, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_NYLIUM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_NYLIUM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.SHROOMLIGHT, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_STEM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_STEM, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 34, Material.SOUL_SOIL, 20, 17, false));
|
||||
netherOres.add(new Ore(0, 96, Material.NETHER_QUARTZ_ORE, 20, 9, true));
|
||||
netherOres.add(new Ore(-64, 320, Material.BONE_BLOCK, 20, 9, true));
|
||||
ores.put(World.Environment.NETHER, netherOres);
|
||||
List<Ore> endOres = new ArrayList<>();
|
||||
endOres.add(new Ore(32, 320, Material.PURPUR_BLOCK, 11, 1, true));
|
||||
endOres.add(new Ore(95, 136, Material.OBSIDIAN, 20, 17, false));
|
||||
endOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
ores.put(World.Environment.THE_END, endOres);
|
||||
ORES = Collections.unmodifiableMap(ores);
|
||||
Map<World.Environment, List<Ore>> ores = new EnumMap<>(World.Environment.class);
|
||||
// Source https://minecraft.fandom.com/wiki/Blob
|
||||
List<Ore> worldOres = new ArrayList<>();
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_DIAMOND_ORE, 1, 10, true));
|
||||
worldOres.add(new Ore(7, 16, Material.DIAMOND_ORE, 1, 10, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_LAPIS_ORE, 1, 7, true));
|
||||
worldOres.add(new Ore(7, 64, Material.LAPIS_ORE, 1, 7, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_GOLD_ORE, 2, 9, true));
|
||||
worldOres.add(new Ore(7, 30, Material.GOLD_ORE, 2, 9, true));
|
||||
worldOres.add(new Ore(0, 16, Material.TUFF, 2, 33, false));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_REDSTONE_ORE, 8, 8, true));
|
||||
worldOres.add(new Ore(7, 16, Material.REDSTONE_ORE, 8, 8, true));
|
||||
worldOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.GRANITE, 5, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.ANDESITE, 5, 33, false));
|
||||
worldOres.add(new Ore(0, 79, Material.DIORITE, 5, 33, false));
|
||||
worldOres.add(new Ore(32, 320, Material.EMERALD_ORE, 11, 1, true));
|
||||
worldOres.add(new Ore(95, 136, Material.COAL_ORE, 20, 17, false));
|
||||
worldOres.add(new Ore(0, 7, Material.DEEPSLATE_COPPER_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(7, 96, Material.COPPER_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(-64, 7, Material.DEEPSLATE_IRON_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(7, 320, Material.IRON_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
ores.put(World.Environment.NORMAL, worldOres);
|
||||
List<Ore> netherOres = new ArrayList<>();
|
||||
netherOres.add(new Ore(1, 22, Material.ANCIENT_DEBRIS, 1, 5, true));
|
||||
netherOres.add(new Ore(-64, 30, Material.NETHER_GOLD_ORE, 2, 9, true));
|
||||
netherOres.add(new Ore(0, 16, Material.GRAVEL, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.BASALT, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.BLACKSTONE, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.FIRE, 8, 33, false));
|
||||
netherOres.add(new Ore(200, 320, Material.GLOWSTONE, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 320, Material.LAVA, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 16, Material.MAGMA_BLOCK, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_FUNGUS, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_FUNGUS, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_NYLIUM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_NYLIUM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.SHROOMLIGHT, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.CRIMSON_STEM, 8, 33, false));
|
||||
netherOres.add(new Ore(0, 320, Material.WARPED_STEM, 8, 33, false));
|
||||
netherOres.add(new Ore(-64, 34, Material.SOUL_SOIL, 20, 17, false));
|
||||
netherOres.add(new Ore(0, 96, Material.NETHER_QUARTZ_ORE, 20, 9, true));
|
||||
netherOres.add(new Ore(-64, 320, Material.BONE_BLOCK, 20, 9, true));
|
||||
ores.put(World.Environment.NETHER, netherOres);
|
||||
List<Ore> endOres = new ArrayList<>();
|
||||
endOres.add(new Ore(32, 320, Material.PURPUR_BLOCK, 11, 1, true));
|
||||
endOres.add(new Ore(95, 136, Material.OBSIDIAN, 20, 17, false));
|
||||
endOres.add(new Ore(-64, 320, Material.CAVE_AIR, 8, 33, false));
|
||||
ores.put(World.Environment.THE_END, endOres);
|
||||
ORES = Collections.unmodifiableMap(ores);
|
||||
}
|
||||
|
||||
private final int worldDepth;
|
||||
|
||||
/**
|
||||
* @param worldDepth - Depth. If depth is set smaller than the world height,
|
||||
* then the area above will be empty. Should not be less than
|
||||
* cave height.
|
||||
*/
|
||||
public NewMaterialPopulator(int worldDepth) {
|
||||
this.worldDepth = worldDepth;
|
||||
this.worldDepth = worldDepth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populate(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, LimitedRegion limitedRegion) {
|
||||
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.worldDepth);
|
||||
for (int y = worldInfo.getMinHeight(); y < worldHeight - 1; y++) {
|
||||
for (Ore o : ORES.get(worldInfo.getEnvironment())) {
|
||||
if (y > o.minY() && y < o.maxY() && random.nextInt(100) <= o.chance()) {
|
||||
pasteBlob(worldInfo, random, chunkX, chunkZ, limitedRegion, y, o);
|
||||
if (o.cont()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.worldDepth);
|
||||
for (int y = worldInfo.getMinHeight() + 1; y < worldHeight - 1; y++) {
|
||||
for (Ore o : ORES.get(worldInfo.getEnvironment())) {
|
||||
if (y > o.minY() && y < o.maxY() && random.nextInt(100) <= o.chance()) {
|
||||
pasteBlob(worldInfo, random, chunkX, chunkZ, limitedRegion, y, o);
|
||||
if (o.cont()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void pasteBlob(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, LimitedRegion limitedRegion, int y, Ore o) {
|
||||
int offset = random.nextInt(16);
|
||||
for (int x = Math.max(0, offset - BLOB_SIZE); x < Math.min(16, offset + BLOB_SIZE); x++) {
|
||||
for (int z = Math.max(0, offset - BLOB_SIZE); z < Math.min(16, offset + BLOB_SIZE); z++) {
|
||||
for (int yy = Math.max(worldInfo.getMinHeight(), y - BLOB_SIZE); yy < Math.min(worldInfo.getMaxHeight(), y + BLOB_SIZE); yy++) {
|
||||
Location location = Utils.getLocationFromChunkLocation(x, yy, z, chunkX, chunkZ);
|
||||
if (!limitedRegion.isInRegion(location)) {
|
||||
continue;
|
||||
}
|
||||
if (limitedRegion.getType(location).isSolid() && random.nextBoolean()) {
|
||||
limitedRegion.setType(location, o.material());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void pasteBlob(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, LimitedRegion limitedRegion,
|
||||
int y, Ore o) {
|
||||
int offset = random.nextInt(16);
|
||||
for (int x = Math.max(0, offset - BLOB_SIZE); x < Math.min(16, offset + BLOB_SIZE); x++) {
|
||||
for (int z = Math.max(0, offset - BLOB_SIZE); z < Math.min(16, offset + BLOB_SIZE); z++) {
|
||||
for (int yy = Math.max(worldInfo.getMinHeight() + 1, y - BLOB_SIZE); yy < Math
|
||||
.min(worldInfo.getMaxHeight() - 1, y + BLOB_SIZE); yy++) {
|
||||
Location location = Utils.getLocationFromChunkLocation(x, yy, z, chunkX, chunkZ);
|
||||
if (!limitedRegion.isInRegion(location)) {
|
||||
continue;
|
||||
}
|
||||
if (limitedRegion.getType(location).isSolid() && random.nextBoolean()) {
|
||||
limitedRegion.setType(location, o.material());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
name: CaveBlock
|
||||
main: world.bentobox.caveblock.CaveBlock
|
||||
version: ${version}${build.number}
|
||||
api-version: 1.19.0
|
||||
api-version: 1.23.0
|
||||
metrics: true
|
||||
repository: "BentoBoxWorld/CaveBlock"
|
||||
icon: "STONE_PICKAXE"
|
||||
|
|
|
@ -18,6 +18,8 @@ caveblock:
|
|||
no-safe-location-found: "&cKann keinen sicheren Ort finden, an den du dich in
|
||||
der Höhle teleportieren kannst."
|
||||
not-owner: "&cDu bist nicht der Besitzer deiner Höhle!"
|
||||
cave-limit-reached: "&c Du hast die Spitze deiner Höhle erreicht. Höher geht
|
||||
nicht!"
|
||||
commands:
|
||||
admin:
|
||||
team:
|
||||
|
@ -81,7 +83,7 @@ caveblock:
|
|||
Höhlen im Müll
|
||||
setrange:
|
||||
description: Stellen Sie die Reichweite der Spielerhöhle ein
|
||||
range-updated: Höhlenbereich auf [Nummer] aktualisiert
|
||||
range-updated: Höhlenbereich auf [number] aktualisiert
|
||||
tp:
|
||||
description: teleportiere zur Höhle eines Spielers
|
||||
getrank:
|
||||
|
@ -141,15 +143,15 @@ caveblock:
|
|||
description: Lass einen Spieler in deiner Höhle ranken
|
||||
uncoop:
|
||||
you-are-no-longer-a-coop-member: "&cSie sind kein Coop-Mitglied mehr in
|
||||
der Höhle von [Name]"
|
||||
der Höhle von [name]"
|
||||
all-members-logged-off: "& cAlle Höhlenmitglieder haben sich abgemeldet,
|
||||
sodass Sie nicht länger ein Coop-Mitglied der Höhle von [Name] sind"
|
||||
sodass Sie nicht länger ein Coop-Mitglied der Höhle von [name] sind "
|
||||
trust:
|
||||
description: Gib einem Spieler einen vertrauenswürdigen Rang in deiner Höhle
|
||||
invite:
|
||||
description: Lade einen Spieler ein, sich deiner Höhle anzuschließen
|
||||
name-has-invited-you: "& a [Name] hat dich eingeladen, dich ihrer Höhle
|
||||
anzuschließen."
|
||||
name-has-invited-you: "& a [name] hat dich eingeladen, dich ihrer Höhle
|
||||
anzuschließen. "
|
||||
you-will-lose-your-island: "& WARNUNG! Sie werden Ihre Höhle verlieren,
|
||||
wenn Sie akzeptieren!"
|
||||
errors:
|
||||
|
@ -164,16 +166,16 @@ caveblock:
|
|||
reject:
|
||||
you-rejected-invite: "& aSie lehnten die Einladung ab, sich einer Höhle
|
||||
anzuschließen."
|
||||
name-rejected-your-invite: "& c [Name] hat deine Höhleneinladung abgelehnt!"
|
||||
name-rejected-your-invite: "& c [name] hat deine Höhleneinladung abgelehnt!"
|
||||
cancel:
|
||||
description: storniere die ausstehende Einladung, dich deiner Höhle anzuschließen
|
||||
leave:
|
||||
description: Verlasse deine Höhle
|
||||
left-your-island: "& c [Name] & spalte deine Höhle"
|
||||
left-your-island: "& c [name] & spalte deine Höhle"
|
||||
kick:
|
||||
description: Entferne ein Mitglied aus deiner Höhle
|
||||
owner-kicked: "& cDer Besitzer hat dich aus der Höhle geworfen!"
|
||||
success: "& b [Name] & wurde aus deiner Höhle geworfen."
|
||||
success: "& b [name] & wurde aus deiner Höhle geworfen."
|
||||
demote:
|
||||
description: Herabstufen eines Spielers in Ihrer Höhle um einen Rang
|
||||
promote:
|
||||
|
@ -182,19 +184,19 @@ caveblock:
|
|||
description: Übertragen Sie Ihren Höhlenbesitz auf ein Mitglied
|
||||
errors:
|
||||
target-is-not-member: "& cDieser Spieler ist nicht Teil Ihres Höhlenteams!"
|
||||
name-is-the-owner: "& a [Name] ist jetzt der Höhlenbesitzer!"
|
||||
name-is-the-owner: "& a [name] ist jetzt der Höhlenbesitzer!"
|
||||
you-are-the-owner: "& aSie sind jetzt der Höhlenbesitzer!"
|
||||
ban:
|
||||
description: verbanne einen Spieler aus deiner Höhle
|
||||
cannot-ban-more-players: "& cSie haben das Sperrlimit erreicht, können Sie
|
||||
keine Spieler mehr aus Ihrer Höhle verbannen."
|
||||
player-banned: "& b [Name] & c ist jetzt aus deiner Höhle verbannt."
|
||||
owner-banned-you: "& b [Name] & c hat dich aus ihrer Höhle verbannt!"
|
||||
player-banned: "& b [name] & c ist jetzt aus deiner Höhle verbannt."
|
||||
owner-banned-you: "& b [name] & c hat dich aus ihrer Höhle verbannt!"
|
||||
you-are-banned: "& bSie sind aus dieser Höhle verbannt!"
|
||||
unban:
|
||||
description: Entbinde einen Spieler aus deiner Höhle
|
||||
player-unbanned: "& b [Name] & a ist jetzt nicht mehr in deiner Höhle verboten."
|
||||
you-are-unbanned: "& b [Name] & a verbannt dich aus ihrer Höhle!"
|
||||
player-unbanned: "& b [name] & a ist jetzt nicht mehr in deiner Höhle verboten."
|
||||
you-are-unbanned: "& b [name] & a verbannt dich aus ihrer Höhle!"
|
||||
banlist:
|
||||
noone: "& aKeine Höhle ist in dieser Höhle verboten."
|
||||
settings:
|
||||
|
@ -202,7 +204,7 @@ caveblock:
|
|||
expel:
|
||||
description: Vertreibe einen Spieler aus deiner Höhle
|
||||
not-on-island: "& cDieser Spieler ist nicht in deiner Höhle!"
|
||||
player-expelled-you: "& b [Name] & c hat dich aus der Höhle vertrieben!"
|
||||
player-expelled-you: "& b [name] & c hat dich aus der Höhle vertrieben!"
|
||||
ranks:
|
||||
owner: Zwergenkönig
|
||||
sub-owner: Zwergenritter
|
||||
|
@ -219,7 +221,7 @@ caveblock:
|
|||
& Ablocks aus Höhlen
|
||||
name: Enderman trauert
|
||||
ENTER_EXIT_MESSAGES:
|
||||
island: "[Name] Höhle"
|
||||
island: "[name] Höhle"
|
||||
GEO_LIMIT_MOBS:
|
||||
description: |-
|
||||
& aEntferne Mobs, die gehen
|
||||
|
@ -287,8 +289,8 @@ caveblock:
|
|||
hint: "& cSie können sich nicht in Ihre Höhle zurück teleportieren, während
|
||||
Sie fallen."
|
||||
locked: "& cDiese Höhle ist verschlossen!"
|
||||
protected: "& cCave protected: [Beschreibung]"
|
||||
spawn-protected: "& cSpawn protected: [Beschreibung]"
|
||||
protected: "& cCave protected: [description]"
|
||||
spawn-protected: "& cSpawn protected: [description]"
|
||||
panel:
|
||||
PROTECTION:
|
||||
description: |-
|
||||
|
|
|
@ -18,6 +18,8 @@ caveblock:
|
|||
no-safe-location-found: "&cНе удалось найти безопасное место для телепортации
|
||||
в пещеру."
|
||||
not-owner: "&cВы не владелец этой пещеры!"
|
||||
cave-limit-reached: "&c Вы достигли вершины своей пещеры. Вы не можете стать
|
||||
выше!"
|
||||
commands:
|
||||
admin:
|
||||
team:
|
||||
|
|
|
@ -0,0 +1,302 @@
|
|||
---
|
||||
caveblock:
|
||||
sign:
|
||||
line0: "&cCaveBlock"
|
||||
line1: Hoş geldin!
|
||||
line2: "[isim]"
|
||||
line3: Kazmaya başlayın! &c<3
|
||||
informational:
|
||||
to-nether: Şansızca nethere düştün.
|
||||
to-the-end: Sona ulaştınız.
|
||||
to-normal: Mağarana geri dön
|
||||
general:
|
||||
errors:
|
||||
no-island: "&cMağaraya sahip değilsin!"
|
||||
player-has-island: "&cOyuncu bir mağaraya sahip!"
|
||||
player-has-no-island: "&cBu oyuncunun mağarası yok!"
|
||||
already-have-island: "&cZaten bir mağaraya sahipsin!"
|
||||
no-safe-location-found: "&cMağarada sizi ışınlayacak güvenli bir yer bulunamadı."
|
||||
not-owner: "&cMağaranın sahibi sen değilsin!"
|
||||
cave-limit-reached: "&c Mağaranızın tepesine ulaştınız. Daha yükseğe çıkamazsın!"
|
||||
commands:
|
||||
admin:
|
||||
team:
|
||||
add:
|
||||
name-has-island: "&c[name] bir mağaraya sahip, tekrar kayıt olmalı ya da
|
||||
silmeli!"
|
||||
success: "&b[name]&a Başarıyla &b[owner]&a'nın mağarasına katıldı."
|
||||
kick:
|
||||
success: "&b[name] , &b[owner]&a'nın mağarasından atıldı."
|
||||
setowner:
|
||||
description: Mağara sahipliğini oyuncuya verir
|
||||
already-owner: "&c[name] zaten bu mağaranın sahibi!"
|
||||
success: "&b[name]&a artık mağaranın sahibi."
|
||||
range:
|
||||
description: Yönetici mağara Alanı komutu
|
||||
display:
|
||||
description: mağara alanı göstergeleri show/hide
|
||||
hint: |-
|
||||
&cKırmızı Bariyer simgeleri &fmevcut mağara korumalı menzil sınırını gösterir.
|
||||
&7Gri Parçacıklar &fmaksimum mağara sınırını gösterir.
|
||||
&aYeşil Parçacıklar &fmağara koruma aralığı bundan farklıysa, varsayılan korumalı aralığı gösterir.
|
||||
set:
|
||||
description: mağara korumalı alanı ayarlar
|
||||
success: "&aMağara koruma aralığını &b[number]'a ayarla."
|
||||
reset:
|
||||
description: mağara korumalı aralığı dünya varsayılanına sıfırlar
|
||||
success: "&aMağara koruma aralığını &b[number]'a sıfırla."
|
||||
register:
|
||||
description: Oyuncuyu bulunduğunuz sahipsiz mağaraya kaydedin
|
||||
registered-island: "&aKayıtlı oyuncu [xyz]'de mağaraya kayıt oldu"
|
||||
already-owned: "&cMağara zaten başka bir oyuncuya ait!"
|
||||
no-island-here: "&cBurada mağara yok. Bir tane yapmayı onaylayın."
|
||||
in-deletion: "&cBu mağara alanı şu anda siliniyor. Daha sonra tekrar deneyin."
|
||||
cannot-make-island: "&c Buraya bir mağara yerleştirilemez, üzgünüm. Olası
|
||||
hatalar için konsola bakın."
|
||||
unregister:
|
||||
description: sahibinin kaydını mağaradan sil, ancak mağara bloklarını sakla
|
||||
unregistered-island: "&a[xyz]'deki mağaradan kayıtlı olmayan oyuncu."
|
||||
info:
|
||||
description: nerde olduğunuz veya oyuncunun mağarası hakkında bilgi al
|
||||
no-island: "&cŞu anda bir mağarada değilsiniz..."
|
||||
title: "========== Mağara Bilgisi ============"
|
||||
islands-in-trash: "&dPlayer'ın çöp kutusunda mağaraları var."
|
||||
is-spawn: Başlangıç mağarasıdır.
|
||||
switchto:
|
||||
description: oyuncunun mağarasını çöp kutusundaki bir numaraya değiştir
|
||||
out-of-range: "&cSayı 1 ile [sayı] arasında olmalıdır. Mağara numaralarını
|
||||
görmek için &l[label] çöp kutusu [player] &r&kullanın"
|
||||
trash:
|
||||
no-unowned-in-trash: "&cÇöp kutusunda sahipsiz mağara yok"
|
||||
no-islands-in-trash: "&cPlayer'ın çöp kutusunda mağarası yok"
|
||||
description: sahipsiz mağaraları veya oyuncunun mağaralarını çöp kutusunda
|
||||
göster
|
||||
title: "&d=========== Çöpteki Mağaralar ==========="
|
||||
count: "&l&dMağara [number]:"
|
||||
use-switch: "&aOyuncuyu çöp kutusunda mağaraya geçirmek için &l[label] switchto
|
||||
<player> <number>&r&a kullanın"
|
||||
emptytrash:
|
||||
description: Oyuncu için çöp kutusunu veya sahip olunmayan tüm mağaraları
|
||||
çöp kutusundan temizleyin
|
||||
setrange:
|
||||
description: oyuncunun mağara aralığını ayarla
|
||||
range-updated: Mağara aralığı [sayı] olarak güncellendi
|
||||
tp:
|
||||
description: oyuncunun mağarasına ışınlanma
|
||||
getrank:
|
||||
description: bir oyuncunun rütbesini mağarasında almak
|
||||
rank-is: "&aRank onların mağarasında [rütbe]."
|
||||
setrank:
|
||||
description: bir oyuncunun sıralamasını mağarasında belirle
|
||||
setspawn:
|
||||
description: bu dünya için bir mağara belirle
|
||||
already-spawn: "&cBu mağara zaten bir oluşum!"
|
||||
no-island-here: "&cBurada mağara yok."
|
||||
confirmation: "&cBu mağarayı bu dünyanın doğuşu olarak ayarlamak istediğinizden
|
||||
emin misiniz?"
|
||||
resetflags:
|
||||
description: config.yml'deki tüm mağaraları varsayılan bayrak ayarlarına sıfırlayın
|
||||
delete:
|
||||
description: bir oyuncunun mağarasını siler
|
||||
cannot-delete-owner: "&cMağara silinmeden önce tüm mağara üyelerinin mağaradan
|
||||
atılması gerekir."
|
||||
deleted-island: "&e[xyz] &akoordinatlı mağara başarıyla silindi."
|
||||
island:
|
||||
go:
|
||||
description: Mağarana ışınlan
|
||||
teleport: "&aSizi mağaranıza ışınlıyorum."
|
||||
help:
|
||||
description: Ana mağara komutu
|
||||
create:
|
||||
description: Bir mağara oluştur, isteğe bağlı blueprint kullanımı (izin gerekli)
|
||||
too-many-islands: "&cBu dünyada çok fazla mağara var: seninkinin yaratılması
|
||||
için yeterli yer yok."
|
||||
unable-create-island: "&cMağaranız oluşturulamadı, lütfen bir yönetici ile
|
||||
iletişime geçin."
|
||||
creating-island: "&aMağaranız oluşturuluyor, lütfen biraz bekleyin..."
|
||||
pick: "&aBir mağara seçin"
|
||||
info:
|
||||
description: mağaranız veya oyuncunun mağarası hakkında bilgi görüntüleyin
|
||||
near:
|
||||
description: Çevredeki mağaraları göster
|
||||
the-following-islands: "&aAşağıdaki mağaralar yakındadır:"
|
||||
no-neighbors: "&cYakın komşu mağaranız yok!"
|
||||
reset:
|
||||
description: mağaranızı yeniden başlatın ve eskisini kaldırın
|
||||
must-remove-members: "&cMağaranızı yeniden başlatmadan önce tüm üyeleri çıkarmalısınız
|
||||
(/island team kick <player>)."
|
||||
sethome:
|
||||
must-be-on-your-island: "&cEve gitmek için mağaranızda olmalısınız!"
|
||||
home-set: "&6Mağara eviniz mevcut konumunuza ayarlandı."
|
||||
setname:
|
||||
description: Mağaran için isim belirle
|
||||
resetname:
|
||||
description: mağara adını sıfırla
|
||||
team:
|
||||
coop:
|
||||
description: Bir oyuncuyu mağaranda işçi yap
|
||||
uncoop:
|
||||
you-are-no-longer-a-coop-member: "&cArtık [isim] adlı kişinin mağarasının
|
||||
kooperatif üyesi değilsin"
|
||||
all-members-logged-off: "&cTüm mağara üyeleri oturumu kapattı, böylece artık
|
||||
[ad] adlı kişinin mağarasının bir kooperatif üyesi değilsiniz"
|
||||
trust:
|
||||
description: mağaranızda bir oyuncuya güvenilir rütbe verin
|
||||
invite:
|
||||
description: bir oyuncuyu mağaranıza katılmaya davet edin
|
||||
name-has-invited-you: "&a[name] sizi mağarasına davet etti."
|
||||
you-will-lose-your-island: "&cUYARI! Kabul edersen mağaranı kaybedersin!"
|
||||
errors:
|
||||
island-is-full: "&cMağaranız dolu, başkasını davet edemezsiniz."
|
||||
accept:
|
||||
you-joined-island: "&aBir mağaraya katıldınız! Diğer üyeleri görmek için
|
||||
/[label] takım bilgisini kullanın."
|
||||
name-joined-your-island: "&a[name] Mağarana katıldı!"
|
||||
confirmation: |-
|
||||
&cBu daveti kabul etmek istediğinizden emin misiniz?
|
||||
&c&lMevcut mağaranızı &n&c&l&nkaybedeceksiniz!
|
||||
reject:
|
||||
you-rejected-invite: "&aBir mağaraya katılma davetini reddettiniz."
|
||||
name-rejected-your-invite: "&c[isim] mağara davetinizi reddetti!"
|
||||
cancel:
|
||||
description: mağaranıza katılmak için bekleyen daveti iptal edin
|
||||
leave:
|
||||
description: mağaranı terk et
|
||||
left-your-island: "&c[name] &cMağarandan ayrıldı"
|
||||
kick:
|
||||
description: mağaranızdan bir üyeyi çıkarın
|
||||
owner-kicked: "&cSahibi seni mağaradan attı!"
|
||||
success: "&b[name] &aMağaradan atıldı."
|
||||
demote:
|
||||
description: Mağaranızdaki bir oyuncuyu bir rütbe aşağı indirin
|
||||
promote:
|
||||
description: mağaranızdaki bir oyuncuyu bir üst rütbeye terfi ettirin
|
||||
setowner:
|
||||
description: mağara sahipliğini bir üyeye devret
|
||||
errors:
|
||||
target-is-not-member: "&cBu oyuncu mağara ekibinizin bir parçası değil!"
|
||||
name-is-the-owner: "&a[isim] artık mağaranın sahibi!"
|
||||
you-are-the-owner: "&aArtık mağara sahibi sizsiniz!"
|
||||
ban:
|
||||
description: mağaranızdan bir oyuncuyu yasaklayın
|
||||
cannot-ban-more-players: "&cYasak sınırına ulaştınız, mağaranızdan daha fazla
|
||||
oyuncu yasaklayamazsınız."
|
||||
player-banned: "&b[name]&c artık mağaranıza girmesi yasaklandı."
|
||||
owner-banned-you: "&b[name]&c Mağarasından banlandın!"
|
||||
you-are-banned: "&bBu mağaraya girmeniz yasaklandı!"
|
||||
unban:
|
||||
description: mağaranızdaki bir oyuncunun yasağını kaldırın
|
||||
player-unbanned: "&b[name]&a artık mağaranızdan çıkar."
|
||||
you-are-unbanned: "&b[name] sizi mağaralarından çıkardı!"
|
||||
banlist:
|
||||
noone: "&aKimse bu mağarada yasaklı değil."
|
||||
settings:
|
||||
description: mağara ayarlarını göster
|
||||
expel:
|
||||
description: bir oyuncuyu mağarandan kov
|
||||
not-on-island: "&cOyuncu mağaranızda değil!"
|
||||
player-expelled-you: "&b[name]&c seni mağaradan kovdu!"
|
||||
ranks:
|
||||
owner: Cüce Kral
|
||||
sub-owner: Cüce Şövalye
|
||||
member: Cüce
|
||||
trusted: güvenilir
|
||||
coop: Kümes
|
||||
visitor: İnsan
|
||||
banned: Orc
|
||||
protection:
|
||||
flags:
|
||||
ENDERMAN_GRIEFING:
|
||||
description: |-
|
||||
&aEndermen kaldırabilir
|
||||
&mağaralardan birkaç blok ötede
|
||||
name: Enderman kederli
|
||||
ENTER_EXIT_MESSAGES:
|
||||
island: "[isim] mağarası"
|
||||
GEO_LIMIT_MOBS:
|
||||
description: |-
|
||||
&aGidip gelen çeteleri kaldır
|
||||
&dış korumalı
|
||||
&akave alanı
|
||||
name: "&eÇeteleri mağaraya sınırlayın"
|
||||
ISLAND_RESPAWN:
|
||||
description: |-
|
||||
&aOyuncular mağarada
|
||||
&atekrar doğar.
|
||||
name: Mağara yeniden doğuşu
|
||||
LIQUIDS_FLOWING_OUT:
|
||||
name: Mağaraların dışında akan sıvılar
|
||||
description: |-
|
||||
&aSıvıların dışarıya akıp akmayacağını değiştir
|
||||
&a mağaranın koruma aralığında.
|
||||
LOCK:
|
||||
description: Kilidi değiştir
|
||||
name: Mağarayı kilitle
|
||||
NATURAL_SPAWNING_OUTSIDE_RANGE:
|
||||
name: Menzil dışında yumurtlayan doğal yaratık
|
||||
description: |-
|
||||
&aYaratıklar (hayvanlar ve
|
||||
&amonsters) dışarıda doğal olarak ortaya çıkabilir
|
||||
&aa mağarasının koruma alanı.
|
||||
|
||||
&cYaratıkları engellemediğini unutmayın
|
||||
&cto bir mafya oluşturucu veya bir yumurtlama aracıyla yumurtlar
|
||||
&cig.
|
||||
OFFLINE_GROWTH:
|
||||
description: |-
|
||||
&aDevre dışı bırakıldığında bitkiler
|
||||
&a mağaralarda büyümeyecek
|
||||
&atüm üyeler çevrimdışı olduğunda.
|
||||
&aGecikmeyi azaltmaya yardımcı olabilir.
|
||||
name: Çevrimdışı Büyüme
|
||||
OFFLINE_REDSTONE:
|
||||
description: |-
|
||||
&aDevre dışı bırakıldığında, redstone
|
||||
&a mağaralarda çalışmayacaktır
|
||||
&tüm üyelerin çevrimdışı olduğu bir yer.
|
||||
&aGecikmeyi azaltmaya yardımcı olabilir.
|
||||
name: Kapalı Kızıltaş
|
||||
PISTON_PUSH:
|
||||
description: |-
|
||||
&aPistonların itmesine izin ver
|
||||
&mağaranın dışındaki bloklar
|
||||
name: Piston itme
|
||||
REMOVE_MOBS:
|
||||
description: |-
|
||||
&aCanavarları kaldır
|
||||
&mağaraya ışınlanma
|
||||
name: Canavarları kaldır
|
||||
TREES_GROWING_OUTSIDE_RANGE:
|
||||
name: Menzil dışında büyüyen ağaçlar
|
||||
description: |-
|
||||
&aAğaçların bir alanın dışında büyüyüp büyüyemeyeceğini değiştir
|
||||
&aMağaranın koruma menzili içinde olup olmadığı.
|
||||
PREVENT_TELEPORT_WHEN_FALLING:
|
||||
name: Düşerken ışınlanmayı engelle
|
||||
description: |-
|
||||
&aOyuncuların ışınlanmasını engelle
|
||||
&komutları kullanarak mağaralarına geri dönün
|
||||
Düşüyorlarsa.
|
||||
hint: "&cDüştüğün için mağaraya ışınlanamazsın."
|
||||
locked: "&cBu mağara kilitli!"
|
||||
protected: "&cCave korumalı: [açıklama]"
|
||||
spawn-protected: "&cSpawn korumalı: [açıklama]"
|
||||
panel:
|
||||
PROTECTION:
|
||||
description: |-
|
||||
&aKoruma ayarları
|
||||
&bu mağara için
|
||||
SETTING:
|
||||
description: |-
|
||||
&aGenel ayarlar
|
||||
&bu mağara için
|
||||
protection:
|
||||
flags:
|
||||
SKY_WALKER_FLAG:
|
||||
description: |-
|
||||
&5&oEtkinleştir/devre dışı bırak
|
||||
&5&o üzerinde yürüme yeteneği
|
||||
&5&o mağara dünyasının zirvesi
|
||||
Ekstra izinler olmadan &5&o.
|
||||
name: Gökyüzü Yürüteç
|
||||
hint: Mağara çatısında yürümeyi sağlar.
|
|
@ -0,0 +1,9 @@
|
|||
name: BentoBox-CaveBlock
|
||||
main: world.bentobox.caveblock.CaveBlockPladdon
|
||||
version: ${project.version}${build.number}
|
||||
api-version: "1.19"
|
||||
|
||||
authors: [tastybento, BONNe]
|
||||
contributors: ["The BentoBoxWorld Community"]
|
||||
website: https://bentobox.world
|
||||
description: ${project.description}
|
Loading…
Reference in New Issue