Compare commits
25 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 | 0cbb775db7 | |
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.15.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>
|
||||
|
|
|
@ -34,7 +34,9 @@ public class CaveBlock extends GameModeAddon
|
|||
this.saveDefaultConfig();
|
||||
this.loadSettings();
|
||||
|
||||
this.chunkGenerator = new ChunkGeneratorWorld(this);
|
||||
this.chunkNormalGenerator = new ChunkGeneratorWorld(this, World.Environment.NORMAL);
|
||||
this.chunkNetherGenerator = new ChunkGeneratorWorld(this, World.Environment.NETHER);
|
||||
this.chunkEndGenerator = new ChunkGeneratorWorld(this, World.Environment.THE_END);
|
||||
|
||||
// Player Command
|
||||
this.playerCommand = new DefaultPlayerCommand(this)
|
||||
|
@ -137,7 +139,7 @@ public class CaveBlock extends GameModeAddon
|
|||
// Create the world if it does not exist
|
||||
this.islandWorld = WorldCreator.name(worldName).
|
||||
environment(World.Environment.NORMAL).
|
||||
generator(this.chunkGenerator).
|
||||
generator(this.chunkNormalGenerator).
|
||||
createWorld();
|
||||
// Set spawn rates
|
||||
setSpawnRates(islandWorld);
|
||||
|
@ -162,7 +164,7 @@ public class CaveBlock extends GameModeAddon
|
|||
{
|
||||
this.netherWorld = WorldCreator.name(worldName + NETHER).
|
||||
type(WorldType.FLAT).
|
||||
generator(this.chunkGenerator).
|
||||
generator(this.chunkNetherGenerator).
|
||||
environment(World.Environment.NETHER).
|
||||
createWorld();
|
||||
}
|
||||
|
@ -187,7 +189,7 @@ public class CaveBlock extends GameModeAddon
|
|||
{
|
||||
this.endWorld = WorldCreator.name(worldName + THE_END).
|
||||
type(WorldType.FLAT).
|
||||
generator(this.chunkGenerator).
|
||||
generator(this.chunkEndGenerator).
|
||||
environment(World.Environment.THE_END).
|
||||
createWorld();
|
||||
}
|
||||
|
@ -232,7 +234,18 @@ public class CaveBlock extends GameModeAddon
|
|||
@Override
|
||||
public @NonNull ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
|
||||
{
|
||||
return this.chunkGenerator;
|
||||
if (worldName.endsWith("_nether"))
|
||||
{
|
||||
return this.chunkNetherGenerator;
|
||||
}
|
||||
else if (worldName.endsWith("_the_end"))
|
||||
{
|
||||
return this.chunkEndGenerator;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.chunkNormalGenerator;
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
@ -269,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
|
||||
// ---------------------------------------------------------------------
|
||||
|
@ -284,9 +307,19 @@ public class CaveBlock extends GameModeAddon
|
|||
private Settings settings;
|
||||
|
||||
/**
|
||||
* This stores CaveBlock addon WorldGenerator.
|
||||
* This stores CaveBlock addon WorldGenerator for overworld.
|
||||
*/
|
||||
private ChunkGeneratorWorld chunkGenerator;
|
||||
private ChunkGeneratorWorld chunkNormalGenerator;
|
||||
|
||||
/**
|
||||
* This stores CaveBlock addon WorldGenerator for the nether.
|
||||
*/
|
||||
private ChunkGeneratorWorld chunkNetherGenerator;
|
||||
|
||||
/**
|
||||
* This stores CaveBlock addon WorldGenerator for the end.
|
||||
*/
|
||||
private ChunkGeneratorWorld chunkEndGenerator;
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
@ -2077,6 +2072,86 @@ public class Settings implements WorldSettings
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is generate caves boolean.
|
||||
*
|
||||
* @return the boolean
|
||||
*/
|
||||
public boolean isGenerateCaves()
|
||||
{
|
||||
return generateCaves;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets generate caves.
|
||||
*
|
||||
* @param generateCaves the generate caves
|
||||
*/
|
||||
public void setGenerateCaves(boolean generateCaves)
|
||||
{
|
||||
this.generateCaves = generateCaves;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is generate natural bedrock boolean.
|
||||
*
|
||||
* @return the boolean
|
||||
*/
|
||||
public boolean isGenerateNaturalBedrock()
|
||||
{
|
||||
return generateNaturalBedrock;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets generate natural bedrock.
|
||||
*
|
||||
* @param generateNaturalBedrock the generate natural bedrock
|
||||
*/
|
||||
public void setGenerateNaturalBedrock(boolean generateNaturalBedrock)
|
||||
{
|
||||
this.generateNaturalBedrock = generateNaturalBedrock;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Is generate natural surface boolean.
|
||||
*
|
||||
* @return the boolean
|
||||
*/
|
||||
public boolean isGenerateNaturalSurface()
|
||||
{
|
||||
return generateNaturalSurface;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets generate natural surface.
|
||||
*
|
||||
* @param generateNaturalSurface the generate natural surface
|
||||
*/
|
||||
public void setGenerateNaturalSurface(boolean generateNaturalSurface)
|
||||
{
|
||||
this.generateNaturalSurface = generateNaturalSurface;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandFlags()
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Map<Flag, Integer> getDefaultIslandSettings()
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
@ -2196,8 +2271,8 @@ public class Settings implements WorldSettings
|
|||
private int banLimit = -1;
|
||||
|
||||
@ConfigComment("")
|
||||
@ConfigComment("This is cave.. no height... only depth. Max 256.")
|
||||
@ConfigComment("Should not be less then cave height.")
|
||||
@ConfigComment("This is cave.. no height... only depth. If depth is set smaller than maximal world height, then area above will be empty.")
|
||||
@ConfigComment("Should not be less than cave height.")
|
||||
@ConfigEntry(path = "world.world-depth", needsReset = true)
|
||||
private int worldDepth = 256;
|
||||
|
||||
|
@ -2212,14 +2287,34 @@ public class Settings implements WorldSettings
|
|||
private boolean newMaterialGenerator = false;
|
||||
|
||||
@ConfigComment("")
|
||||
@ConfigComment("Make over world roof of bedrock, if false, it will be made from stone")
|
||||
@ConfigComment("Make over world roof of bedrock, if false, it will be made from stone.")
|
||||
@ConfigEntry(path = "world.normal.roof", needsReset = true)
|
||||
private boolean normalRoof = true;
|
||||
|
||||
@ConfigComment("Make over world floor of bedrock, if false, it will be made from stone")
|
||||
@ConfigComment("")
|
||||
@ConfigComment("Option allows to toggle if world generator should generate natural(-ish) looking surface with dirt and grass blocks.")
|
||||
@ConfigComment("Enabling this option will ignore roof setting.")
|
||||
@ConfigComment("Default value is false.")
|
||||
@ConfigEntry(path = "world.normal.natural-surface", needsReset = true, experimental = true)
|
||||
private boolean generateNaturalSurface = false;
|
||||
|
||||
@ConfigComment("")
|
||||
@ConfigComment("Option allows to toggle if world generator should generate natural looking caves.")
|
||||
@ConfigComment("Default value is false.")
|
||||
@ConfigEntry(path = "world.normal.natural-caves", needsReset = true)
|
||||
private boolean generateCaves = false;
|
||||
|
||||
@ConfigComment("Make over world floor of bedrock, if false, it will be made from stone.")
|
||||
@ConfigEntry(path = "world.normal.floor", needsReset = true)
|
||||
private boolean normalFloor = true;
|
||||
|
||||
@ConfigComment("")
|
||||
@ConfigComment("Option allows to toggle if world generator should generate natural looking bedrock block patterns.")
|
||||
@ConfigComment("Enabling this option will ignore floor setting.")
|
||||
@ConfigComment("Default value is false.")
|
||||
@ConfigEntry(path = "world.normal.natural-bedrock", needsReset = true)
|
||||
private boolean generateNaturalBedrock = false;
|
||||
|
||||
@ConfigComment("Main block of which world will be generated.")
|
||||
@ConfigEntry(path = "world.normal.main-block", needsReset = true)
|
||||
private Material normalMainBlock = Material.STONE;
|
||||
|
@ -2353,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")
|
||||
|
|
|
@ -6,12 +6,10 @@ import org.bukkit.generator.BiomeProvider;
|
|||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.generator.WorldInfo;
|
||||
|
||||
import world.bentobox.caveblock.CaveBlock;
|
||||
import world.bentobox.caveblock.Settings;
|
||||
import world.bentobox.caveblock.generators.populators.EntitiesPopulator;
|
||||
import world.bentobox.caveblock.generators.populators.FlatBiomeProvider;
|
||||
import world.bentobox.caveblock.generators.populators.MaterialPopulator;
|
||||
import world.bentobox.caveblock.generators.populators.NewMaterialPopulator;
|
||||
import world.bentobox.caveblock.generators.populators.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -31,6 +29,7 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
|
|||
private final CaveBlock addon;
|
||||
private final Settings settings;
|
||||
private final List<BlockPopulator> blockPopulators;
|
||||
private final World.Environment environment;
|
||||
private BiomeProvider biomeProvider;
|
||||
private boolean isNewGenerator;
|
||||
|
||||
|
@ -40,12 +39,14 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
|
|||
|
||||
/**
|
||||
* @param addon - CaveBlock object
|
||||
* @param environment - World environment
|
||||
*/
|
||||
public ChunkGeneratorWorld(CaveBlock addon) {
|
||||
public ChunkGeneratorWorld(CaveBlock addon, World.Environment environment) {
|
||||
this.addon = addon;
|
||||
this.settings = addon.getSettings();
|
||||
this.blockPopulators = new ArrayList<>(2);
|
||||
|
||||
this.environment = environment;
|
||||
reload();
|
||||
}
|
||||
|
||||
|
@ -53,14 +54,24 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
|
|||
// Section: Methods
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
private Material getGroundCeilMaterial(World.Environment environment) {
|
||||
private Material getGroundRoofMaterial(World.Environment environment) {
|
||||
return switch (environment) {
|
||||
case NETHER -> this.settings.isNetherRoof() ? Material.BEDROCK : this.settings.getNetherMainBlock();
|
||||
case THE_END -> this.settings.isEndRoof() ? Material.BEDROCK : this.settings.getEndMainBlock();
|
||||
default -> this.settings.isNormalRoof() ? Material.BEDROCK : this.settings.getNormalMainBlock();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private Material getGroundFloorMaterial(World.Environment environment) {
|
||||
return switch (environment) {
|
||||
case NETHER -> this.settings.isNetherFloor() ? Material.BEDROCK : this.settings.getNetherMainBlock();
|
||||
case THE_END -> this.settings.isEndFloor() ? Material.BEDROCK : this.settings.getEndMainBlock();
|
||||
default -> this.settings.isNormalFloor() ? Material.BEDROCK : this.settings.getNormalMainBlock();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private Material getBaseMaterial(World.Environment environment) {
|
||||
return switch (environment) {
|
||||
case NETHER -> this.settings.getNetherMainBlock();
|
||||
|
@ -70,19 +81,35 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
|
||||
final int minHeight = worldInfo.getMinHeight();
|
||||
Material material = getGroundCeilMaterial(worldInfo.getEnvironment());
|
||||
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, material);
|
||||
public void generateBedrock(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
|
||||
{
|
||||
if (!this.shouldGenerateBedrock())
|
||||
{
|
||||
final int minHeight = worldInfo.getMinHeight();
|
||||
Material material = this.getGroundFloorMaterial(worldInfo.getEnvironment());
|
||||
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, material);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Apparently default surface generation does not include 0 bedrock layer.
|
||||
final int minHeight = worldInfo.getMinHeight();
|
||||
chunkData.setRegion(0, minHeight, 0, 16, minHeight + 1, 16, Material.BEDROCK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void generateSurface(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
|
||||
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.settings.getWorldDepth());
|
||||
Material material = getGroundCeilMaterial(worldInfo.getEnvironment());
|
||||
chunkData.setRegion(0, worldHeight - 1, 0, 16, worldHeight, 16, material);
|
||||
public void generateSurface(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData)
|
||||
{
|
||||
if (!this.shouldGenerateSurface())
|
||||
{
|
||||
final int worldHeight = Math.min(worldInfo.getMaxHeight(), this.settings.getWorldDepth());
|
||||
Material material = this.getGroundRoofMaterial(worldInfo.getEnvironment());
|
||||
chunkData.setRegion(0, worldHeight - 1, 0, 16, worldHeight, 16, material);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void generateNoise(WorldInfo worldInfo, Random random, int chunkX, int chunkZ, ChunkData chunkData) {
|
||||
final int minHeight = worldInfo.getMinHeight();
|
||||
|
@ -127,18 +154,22 @@ public class ChunkGeneratorWorld extends ChunkGenerator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateSurface() {
|
||||
return true;
|
||||
public boolean shouldGenerateSurface()
|
||||
{
|
||||
// Surface generation should happen only in overworld. Nether and end worlds does not have surface.
|
||||
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateNaturalSurface();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateBedrock() {
|
||||
return true;
|
||||
// Bedrock generation should happen only in overworld. Nether and end worlds does not have nice bedrock layers.
|
||||
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateNaturalBedrock();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldGenerateCaves() {
|
||||
return this.isNewGenerator;
|
||||
// Cave generation should happen only in overworld. Nether and end worlds does not have nice cave layers.
|
||||
return this.environment.equals(World.Environment.NORMAL) && this.settings.isGenerateCaves();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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,89 +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, 16, Material.DIAMOND_ORE, 1, 10, true));
|
||||
worldOres.add(new Ore(-64, 64, Material.LAPIS_ORE, 1, 7, true));
|
||||
worldOres.add(new Ore(-64, 30, Material.GOLD_ORE, 2, 9, true));
|
||||
worldOres.add(new Ore(0, 16, Material.TUFF, 2, 33, false));
|
||||
worldOres.add(new Ore(-64, 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, 96, Material.COPPER_ORE, 20, 9, true));
|
||||
worldOres.add(new Ore(-64, 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"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# CaveBlock Configuration {$version}
|
||||
# CaveBlock Configuration 1.15.0-SNAPSHOT-LOCAL
|
||||
caveblock:
|
||||
command:
|
||||
# Cave Command. What command users will run to access their cave.
|
||||
|
@ -9,12 +9,12 @@ caveblock:
|
|||
admin: cbadmin cba
|
||||
# The default action for new player command call.
|
||||
# Sub-command of main player command that will be run on first player command call.
|
||||
# By default, it is the sub-command 'create'.
|
||||
# By default it is sub-command 'create'.
|
||||
# Added since 1.13.0.
|
||||
new-player-action: create
|
||||
# The default action for player command.
|
||||
# Sub-command of main player command that will be run on each player command call.
|
||||
# By default, it is the sub-command 'go'.
|
||||
# By default it is sub-command 'go'.
|
||||
# Added since 1.13.0.
|
||||
default-action: go
|
||||
world:
|
||||
|
@ -81,9 +81,9 @@ world:
|
|||
# The permission caveblock.ban.maxlimit.X where X is a number can also be used per player
|
||||
# -1 = unlimited
|
||||
ban-limit: -1
|
||||
#
|
||||
# This is cave.. no height... only depth. Max 256.
|
||||
# Should not be less then cave height.
|
||||
#
|
||||
# This is cave.. no height... only depth. If depth is set smaller than maximal world height, then area above will be empty.
|
||||
# Should not be less than cave height.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
world-depth: 256
|
||||
# This indicate how many times block should be tried to generate.
|
||||
|
@ -95,13 +95,31 @@ world:
|
|||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
use-new-material-generator: false
|
||||
normal:
|
||||
#
|
||||
# Make over world roof of bedrock, if false, it will be made from stone
|
||||
#
|
||||
# Make over world roof of bedrock, if false, it will be made from stone.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
roof: true
|
||||
# Make over world floor of bedrock, if false, it will be made from stone
|
||||
#
|
||||
# Option allows to toggle if world generator should generate natural(-ish) looking surface with dirt and grass blocks.
|
||||
# Enabling this option will ignore roof setting.
|
||||
# Default value is false.
|
||||
# /!\ This feature is experimental and might not work as expected or might not work at all.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
natural-surface: false
|
||||
#
|
||||
# Option allows to toggle if world generator should generate natural looking caves.
|
||||
# Default value is false.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
natural-caves: false
|
||||
# Make over world floor of bedrock, if false, it will be made from stone.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
floor: true
|
||||
#
|
||||
# Option allows to toggle if world generator should generate natural looking bedrock block patterns.
|
||||
# Enabling this option will ignore floor setting.
|
||||
# Default value is false.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
natural-bedrock: false
|
||||
# Main block of which world will be generated.
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
main-block: STONE
|
||||
|
@ -116,24 +134,24 @@ world:
|
|||
# where max amount in pack are 5 per each subchunk!
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
blocks:
|
||||
- MATERIAL:DIAMOND_ORE:1:5
|
||||
- MATERIAL:GOLD_ORE:1:4
|
||||
- MATERIAL:IRON_ORE:5:4
|
||||
- MATERIAL:COAL_ORE:10:6
|
||||
- MATERIAL:EMERALD_ORE:1:1
|
||||
- MATERIAL:CLAY:10:6
|
||||
- MATERIAL:DIRT:20:10
|
||||
- MATERIAL:GRAVEL:40:6
|
||||
- MATERIAL:GRANITE:40:10
|
||||
- MATERIAL:ANDESITE:20:10
|
||||
- MATERIAL:DIORITE:30:8
|
||||
- ENTITY:ZOMBIE:10:1
|
||||
- ENTITY:ENDERMAN:10:1
|
||||
- ENTITY:SKELETON:10:1
|
||||
- ENTITY:CREEPER:1:1
|
||||
- ENTITY:DOLPHIN:1:1
|
||||
- ENTITY:BAT:10:1
|
||||
- ENTITY:CAVE_SPIDER:10:1
|
||||
- MATERIAL:DIAMOND_ORE:1:5
|
||||
- MATERIAL:GOLD_ORE:1:4
|
||||
- MATERIAL:IRON_ORE:5:4
|
||||
- MATERIAL:COAL_ORE:10:6
|
||||
- MATERIAL:EMERALD_ORE:1:1
|
||||
- MATERIAL:CLAY:10:6
|
||||
- MATERIAL:DIRT:20:10
|
||||
- MATERIAL:GRAVEL:40:6
|
||||
- MATERIAL:GRANITE:40:10
|
||||
- MATERIAL:ANDESITE:20:10
|
||||
- MATERIAL:DIORITE:30:8
|
||||
- ENTITY:ZOMBIE:10:1
|
||||
- ENTITY:ENDERMAN:10:1
|
||||
- ENTITY:SKELETON:10:1
|
||||
- ENTITY:CREEPER:1:1
|
||||
- ENTITY:DOLPHIN:1:1
|
||||
- ENTITY:BAT:10:1
|
||||
- ENTITY:CAVE_SPIDER:10:1
|
||||
nether:
|
||||
# Generate Nether - if this is false, the nether world will not be made and access to
|
||||
# the nether will not occur. Other plugins may still enable portal usage.
|
||||
|
@ -172,18 +190,19 @@ world:
|
|||
# where max amount in pack are 5 per each subchunk!
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
blocks:
|
||||
- MATERIAL:NETHER_QUARTZ_ORE:30:5
|
||||
- MATERIAL:SOUL_SAND:40:10
|
||||
- MATERIAL:MAGMA_BLOCK:10:3
|
||||
- MATERIAL:GLOWSTONE:20:8
|
||||
- MATERIAL:NETHER_BRICKS:10:5
|
||||
- MATERIAL:LAVA:10:1
|
||||
- ENTITY:MAGMA_CUBE:0.5:1
|
||||
- ENTITY:GHAST:0.1:1
|
||||
- ENTITY:WITHER_SKELETON:0.1:1
|
||||
- MATERIAL:FIRE:10:1
|
||||
- MATERIAL:NETHER_QUARTZ_ORE:30:5
|
||||
- MATERIAL:SOUL_SAND:40:10
|
||||
- MATERIAL:MAGMA_BLOCK:10:3
|
||||
- MATERIAL:GLOWSTONE:20:8
|
||||
- MATERIAL:NETHER_BRICKS:10:5
|
||||
- MATERIAL:LAVA:10:1
|
||||
- ENTITY:MAGMA_CUBE:0.5:1
|
||||
- ENTITY:GHAST:0.1:1
|
||||
- ENTITY:WITHER_SKELETON:0.1:1
|
||||
- MATERIAL:FIRE:10:1
|
||||
# This option indicates if nether portals should be linked via dimensions.
|
||||
# Option will simulate vanilla portal mechanics that links portals together or creates a new portal, if there is not a portal in other dimension.
|
||||
# Option will simulate vanilla portal mechanics that links portals together
|
||||
# or creates a new portal, if there is not a portal in that dimension.
|
||||
create-and-link-portals: false
|
||||
end:
|
||||
generate: true
|
||||
|
@ -214,16 +233,17 @@ world:
|
|||
# where max amount in pack are 5 per each subchunk!
|
||||
# /!\ BentoBox currently does not support changing this value mid-game. If you do need to change it, do a full reset of your databases and worlds.
|
||||
blocks:
|
||||
- ENTITY:SHULKER:0.2:1
|
||||
- MATERIAL:OBSIDIAN:1:1
|
||||
- MATERIAL:CHORUS_PLANT:1:3
|
||||
# This option indicates if obsidian platform in the end should be generated when player enters the end world.
|
||||
- ENTITY:SHULKER:0.2:1
|
||||
- MATERIAL:OBSIDIAN:1:1
|
||||
- MATERIAL:CHORUS_PLANT:1:3
|
||||
# This option indicates if obsidian platform in the end should be generated
|
||||
# when player enters the end world.
|
||||
create-obsidian-platform: false
|
||||
# Mob white list - these mobs will NOT be removed when logging in or doing /cave
|
||||
remove-mobs-whitelist:
|
||||
- WITHER
|
||||
- ENDERMAN
|
||||
- ZOMBIE_VILLAGER
|
||||
- ZOMBIE_VILLAGER
|
||||
- WITHER
|
||||
- ENDERMAN
|
||||
# World flags. These are boolean settings for various flags for this world
|
||||
flags:
|
||||
CREEPER_DAMAGE: true
|
||||
|
@ -232,6 +252,7 @@ world:
|
|||
ISLAND_RESPAWN: true
|
||||
CREEPER_GRIEFING: false
|
||||
COARSE_DIRT_TILLING: true
|
||||
PETS_STAY_AT_HOME: true
|
||||
ENDERMAN_GRIEFING: true
|
||||
CLEAN_SUPER_FLAT: false
|
||||
CHEST_DAMAGE: false
|
||||
|
@ -241,6 +262,7 @@ world:
|
|||
ENDERMAN_DEATH_DROP: true
|
||||
LIQUIDS_FLOWING_OUT: false
|
||||
OFFLINE_REDSTONE: true
|
||||
REMOVE_END_EXIT_ISLAND: true
|
||||
OFFLINE_GROWTH: true
|
||||
REMOVE_MOBS: true
|
||||
ENDER_CHEST: false
|
||||
|
@ -272,15 +294,15 @@ world:
|
|||
END_PORTAL: 500
|
||||
BREEDING: 500
|
||||
HURT_VILLAGERS: 500
|
||||
TURTLE_EGGS: 500
|
||||
FROST_WALKER: 500
|
||||
TURTLE_EGGS: 500
|
||||
COLLECT_LAVA: 500
|
||||
BREAK_SPAWNERS: 500
|
||||
LEVER: 500
|
||||
ELYTRA: 0
|
||||
CAKE: 500
|
||||
HURT_MONSTERS: 0
|
||||
RIDING: 500
|
||||
HURT_MONSTERS: 0
|
||||
NAME_TAG: 500
|
||||
ARMOR_STAND: 500
|
||||
TRADING: 0
|
||||
|
@ -301,17 +323,17 @@ world:
|
|||
COMMAND_RANKS: 500
|
||||
BEACON: 500
|
||||
TRAPDOOR: 500
|
||||
EXPERIENCE_BOTTLE_THROWING: 500
|
||||
PRESSURE_PLATE: 0
|
||||
EXPERIENCE_BOTTLE_THROWING: 500
|
||||
DYE: 500
|
||||
ITEM_FRAME: 500
|
||||
PLACE_BLOCKS: 500
|
||||
CRAFTING: 0
|
||||
ENCHANTING: 0
|
||||
SHEARING: 500
|
||||
ENCHANTING: 0
|
||||
BOAT: 500
|
||||
BED: 500
|
||||
SPAWN_EGGS: 500
|
||||
BED: 500
|
||||
MILKING: 0
|
||||
DISPENSER: 500
|
||||
GATE: 0
|
||||
|
@ -322,8 +344,8 @@ world:
|
|||
BREAK_BLOCKS: 500
|
||||
CHORUS_FRUIT: 500
|
||||
CONTAINER: 500
|
||||
POTION_THROWING: 500
|
||||
JUKEBOX: 500
|
||||
POTION_THROWING: 500
|
||||
# These are the default settings for new caves
|
||||
default-cave-settings:
|
||||
PVP_END: false
|
||||
|
@ -335,33 +357,33 @@ world:
|
|||
MONSTER_NATURAL_SPAWN: true
|
||||
FIRE_IGNITE: true
|
||||
FIRE_SPREAD: true
|
||||
ANIMAL_SPAWNERS_SPAWN: true
|
||||
FIRE_BURNING: true
|
||||
ANIMAL_SPAWNERS_SPAWN: true
|
||||
PVP_OVERWORLD: false
|
||||
# These settings/flags are hidden from users
|
||||
# Ops can toggle hiding in-game using SHIFT-LEFT-CLICK on flags in settings
|
||||
hidden-flags: []
|
||||
# Visitor banned commands - Visitors to caves cannot use these commands in this world
|
||||
visitor-banned-commands:
|
||||
- spawner
|
||||
- spawnmob
|
||||
- spawner
|
||||
- spawnmob
|
||||
# Falling banned commands - players cannot use these commands when falling
|
||||
# if the PREVENT_TELEPORT_WHEN_FALLING world setting flag is active
|
||||
falling-banned-commands:
|
||||
- warp
|
||||
- spawn
|
||||
- warp
|
||||
- spawn
|
||||
cave:
|
||||
# Default max team size
|
||||
# Permission size cannot be less than the default below.
|
||||
# Permission size cannot be less than the default below.
|
||||
max-team-size: 4
|
||||
# Default maximum number of coop rank members per cave
|
||||
# Players can have the caveblock.coop.maxsize.<number> permission to be bigger but
|
||||
# permission size cannot be less than the default below.
|
||||
# permission size cannot be less than the default below.
|
||||
# Added since 1.13.0.
|
||||
max-coop-size: 4
|
||||
# Default maximum number of trusted rank members per cave
|
||||
# Players can have the caveblock.trust.maxsize.<number> permission to be bigger but
|
||||
# permission size cannot be less than the default below.
|
||||
# permission size cannot be less than the default below.
|
||||
# Added since 1.13.0.
|
||||
max-trusted-size: 4
|
||||
# Default maximum number of homes a player can have. Min = 1
|
||||
|
@ -461,10 +483,46 @@ cave:
|
|||
create-missing-nether-end-caves: false
|
||||
commands:
|
||||
# List of commands to run when a player joins an cave or creates one.
|
||||
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
|
||||
# in which case they are executed by the player.
|
||||
#
|
||||
# Available placeholders for the commands are the following:
|
||||
# * [name]: name of the player
|
||||
#
|
||||
# Here are some examples of valid commands to execute:
|
||||
# * '[SUDO] bbox version'
|
||||
# * 'bsbadmin deaths set [player] 0'
|
||||
#
|
||||
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
|
||||
# Added since 1.8.0.
|
||||
on-join: []
|
||||
# List of commands to run when a player leaves a cave, resets his cave or gets kicked from it.
|
||||
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
|
||||
# in which case they are executed by the player.
|
||||
#
|
||||
# Available placeholders for the commands are the following:
|
||||
# * [name]: name of the player
|
||||
#
|
||||
# Here are some examples of valid commands to execute:
|
||||
# * '[SUDO] bbox version'
|
||||
# * 'bsbadmin deaths set [player] 0'
|
||||
#
|
||||
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
|
||||
# Added since 1.8.0.
|
||||
on-leave: []
|
||||
# Returns a list of commands that should be executed when the player respawns after death if Flags.ISLAND_RESPAWN is true.
|
||||
# List of commands that should be executed when the player respawns after death if Flags.ISLAND_RESPAWN is true.
|
||||
# These commands are run by the console, unless otherwise stated using the [SUDO] prefix,
|
||||
# in which case they are executed by the player.
|
||||
#
|
||||
# Available placeholders for the commands are the following:
|
||||
# * [name]: name of the player
|
||||
#
|
||||
# Here are some examples of valid commands to execute:
|
||||
# * '[SUDO] bbox version'
|
||||
# * 'bsbadmin deaths set [player] 0'
|
||||
#
|
||||
# Note that player-executed commands might not work, as these commands can be run with said player being offline.
|
||||
# Added since 1.14.0.
|
||||
on-respawn: []
|
||||
sethome:
|
||||
nether:
|
||||
|
@ -488,9 +546,9 @@ protection:
|
|||
# Geo restrict mobs.
|
||||
# Mobs that exit the cave space where they were spawned will be removed.
|
||||
geo-limit-settings:
|
||||
- GHAST
|
||||
- BAT
|
||||
- BLAZE
|
||||
- GHAST
|
||||
- BAT
|
||||
- BLAZE
|
||||
# CaveBlock blocked mobs.
|
||||
# List of mobs that should not spawn in the CaveBlock.
|
||||
# Added since 1.13.0.
|
||||
|
@ -498,30 +556,30 @@ protection:
|
|||
# Invincible visitors. List of damages that will not affect visitors.
|
||||
# Make list blank if visitors should receive all damages
|
||||
invincible-visitors:
|
||||
- BLOCK_EXPLOSION
|
||||
- CONTACT
|
||||
- CUSTOM
|
||||
- DROWNING
|
||||
- ENTITY_ATTACK
|
||||
- ENTITY_EXPLOSION
|
||||
- FALL
|
||||
- FALLING_BLOCK
|
||||
- FIRE
|
||||
- FIRE_TICK
|
||||
- LAVA
|
||||
- LIGHTNING
|
||||
- MAGIC
|
||||
- POISON
|
||||
- PROJECTILE
|
||||
- STARVATION
|
||||
- SUFFOCATION
|
||||
- THORNS
|
||||
- WITHER
|
||||
- DRAGON_BREATH
|
||||
- FLY_INTO_WALL
|
||||
- HOT_FLOOR
|
||||
- CRAMMING
|
||||
- VOID
|
||||
- BLOCK_EXPLOSION
|
||||
- CONTACT
|
||||
- CUSTOM
|
||||
- DROWNING
|
||||
- ENTITY_ATTACK
|
||||
- ENTITY_EXPLOSION
|
||||
- FALL
|
||||
- FALLING_BLOCK
|
||||
- FIRE
|
||||
- FIRE_TICK
|
||||
- LAVA
|
||||
- LIGHTNING
|
||||
- MAGIC
|
||||
- POISON
|
||||
- PROJECTILE
|
||||
- STARVATION
|
||||
- SUFFOCATION
|
||||
- THORNS
|
||||
- WITHER
|
||||
- DRAGON_BREATH
|
||||
- FLY_INTO_WALL
|
||||
- HOT_FLOOR
|
||||
- CRAMMING
|
||||
- VOID
|
||||
do-not-edit-these-settings:
|
||||
# These settings should not be edited
|
||||
reset-epoch: 0
|
||||
|
|
|
@ -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