Release 1.7.0 (#91)

* Version 1.6.1

* Version 1.6.1

* Added Blue Orchids spawning in the Swamp biome

* Version 1.7.0

1.18.1 update

* German translation (#86)

* Translate de.yml via GitLocalize

* Translate de.yml via GitLocalize

Co-authored-by: mt-gitlocalize <mt@gitlocalize.com>
Co-authored-by: xXjojojXx <sven.f92@gmx.de>

* Translate hu.yml via GitLocalize (#87)

Co-authored-by: driverdakid <tamascsiszar99@icloud.com>

* Translate ja.yml via GitLocalize (#88)

Co-authored-by: tastybento <tastybento@wasteofplastic.com>

* Translate zh-CN.yml via GitLocalize (#89)

Co-authored-by: tastybento <tastybento@wasteofplastic.com>

* Code refactoring around BoundingBox

* Fix test.

* Remove saving of greenhouses on exit.

https://github.com/BentoBoxWorld/Greenhouses/issues/85

* Add Pladdon Class (#90)

* Add Pladdon Class

Add Greenhouses Pladdon class.

* Add Spigot Annotations API

* Fix test. Avoid ambiguity.

* Add natural spawn protection listener.

Fixes #84

* Update gitignore for Eclipse

* Remove some code smells.

Co-authored-by: tastybento <tastybento@wasteofplastic.com>
Co-authored-by: Florian CUNY <poslovitch@bentobox.world>
Co-authored-by: gitlocalize-app[bot] <55277160+gitlocalize-app[bot]@users.noreply.github.com>
Co-authored-by: mt-gitlocalize <mt@gitlocalize.com>
Co-authored-by: xXjojojXx <sven.f92@gmx.de>
Co-authored-by: driverdakid <tamascsiszar99@icloud.com>
This commit is contained in:
BONNe 2022-05-16 14:49:06 +03:00 committed by GitHub
parent 4aec983c81
commit a96d4d4c67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 541 additions and 357 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/target/
/.classpath
/.project

14
pom.xml
View File

@ -46,12 +46,12 @@
<java.version>16</java.version>
<powermock.version>2.0.9</powermock.version>
<!-- More visible way how to change dependency versions -->
<spigot.version>1.17.1-R0.1-SNAPSHOT</spigot.version>
<bentobox.version>1.16.0</bentobox.version>
<spigot.version>1.18.1-R0.1-SNAPSHOT</spigot.version>
<bentobox.version>1.18.1</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.6.0</build.version>
<build.version>1.7.0</build.version>
<build.number>-LOCAL</build.number>
<sonar.projectKey>BentoBoxWorld_Greenhouses</sonar.projectKey>
<sonar.organization>bentobox-world</sonar.organization>
@ -116,6 +116,12 @@
<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>
@ -277,4 +283,4 @@
</plugin>
</plugins>
</build>
</project>
</project>

View File

@ -92,9 +92,8 @@ public class Greenhouses extends Addon {
*/
@Override
public void onDisable() {
if (manager != null) {
manager.saveGreenhouses();
if (manager.getEcoMgr() != null) manager.getEcoMgr().cancel();
if (manager != null && manager.getEcoMgr() != null) {
manager.getEcoMgr().cancel();
}
}

View File

@ -0,0 +1,25 @@
package world.bentobox.greenhouses;
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;
/**
* @author tastybento
*/
@Plugin(name = "Pladdon", version = "1.0")
@ApiVersion(ApiVersion.Target.v1_18)
@Dependency(value = "BentoBox")
public class GreenhousesPladdon extends Pladdon
{
@Override
public Addon getAddon()
{
return new Greenhouses();
}
}

View File

@ -171,7 +171,7 @@ public class Greenhouse implements DataObject {
*/
@NonNull
public BoundingBox getBoundingBox() {
return Objects.requireNonNullElseGet(boundingBox, BoundingBox::new);
return Objects.requireNonNull(boundingBox);
}
/**
@ -220,7 +220,9 @@ public class Greenhouse implements DataObject {
* @return true if inside the greenhouse
*/
public boolean contains(Location location2) {
return location.getWorld() != null && location.getWorld().equals(location2.getWorld()) && boundingBox.contains(location2.toVector());
return getLocation().getWorld() != null
&& getLocation().getWorld().equals(location2.getWorld())
&& getBoundingBox().contains(location2.toVector());
}
/**
@ -262,12 +264,13 @@ public class Greenhouse implements DataObject {
* @return true if wall or roof block
*/
public boolean isRoofOrWallBlock(Location l) {
final BoundingBox bb = getBoundingBox();
return (l.getBlockY() > this.getFloorHeight()
&& ((l.getBlockY() == getCeilingHeight() - 1)
|| l.getBlockX() == (int)getBoundingBox().getMinX()
|| l.getBlockX() == (int)getBoundingBox().getMaxX() - 1
|| l.getBlockZ() == (int)getBoundingBox().getMinZ()
|| l.getBlockZ() == (int)getBoundingBox().getMaxZ() - 1
|| l.getBlockX() == (int)bb.getMinX()
|| l.getBlockX() == (int)bb.getMaxX() - 1
|| l.getBlockZ() == (int)bb.getMinZ()
|| l.getBlockZ() == (int)bb.getMaxZ() - 1
));
}
}

View File

@ -28,7 +28,6 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Hoglin;
import org.bukkit.entity.Piglin;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.Vector;
import com.google.common.base.Enums;
@ -367,9 +366,7 @@ public class BiomeRecipe implements Comparable<BiomeRecipe> {
.getManager()
.getMap()
.getGreenhouse(b.getLocation()).map(gh -> {
BoundingBox interior = gh.getBoundingBox().clone();
interior.expand(-1, -1, -1);
if (!interior.contains(entity.getBoundingBox())) {
if (!gh.getInternalBoundingBox().contains(entity.getBoundingBox())) {
entity.remove();
return false;
}
@ -422,7 +419,7 @@ public class BiomeRecipe implements Comparable<BiomeRecipe> {
* @return a list of blocks that are required for this recipe
*/
public List<String> getRecipeBlocks() {
return requiredBlocks.entrySet().stream().map(en -> Util.prettifyText(en.getKey().toString()) + " x " + en.getValue()).collect(Collectors.toList());
return requiredBlocks.entrySet().stream().map(en -> Util.prettifyText(en.getKey().toString()) + " x " + en.getValue()).toList();
}
/**
@ -474,10 +471,10 @@ public class BiomeRecipe implements Comparable<BiomeRecipe> {
private boolean canGrowOn(GrowthBlock block, GreenhousePlant p) {
// Ceiling plants can only grow on ceiling blocks
if (CEILING_PLANTS.contains(p.plantMaterial()) && block.floor()) {
if (CEILING_PLANTS.contains(p.plantMaterial()) && Boolean.TRUE.equals(block.floor())) {
return false;
}
return p.plantGrownOn().equals(block.block().getRelative(block.floor() ? BlockFace.DOWN : BlockFace.UP).getType());
return p.plantGrownOn().equals(block.block().getRelative(Boolean.TRUE.equals(block.floor()) ? BlockFace.DOWN : BlockFace.UP).getType());
}
/**

View File

@ -10,6 +10,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.entity.CreatureSpawnEvent;
import world.bentobox.greenhouses.Greenhouses;
import world.bentobox.greenhouses.data.Greenhouse;
@ -78,6 +79,23 @@ public class GreenhouseGuard implements Listener {
.anyMatch(this::inGreenhouse));
}
/**
* Guard Greenhouse from natural entity spawning.
*
* @param spawnEvent the spawn event
*/
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onCreatureSpawn(CreatureSpawnEvent spawnEvent)
{
if (CreatureSpawnEvent.SpawnReason.NATURAL == spawnEvent.getSpawnReason())
{
// Natural spawn events should be cancelled. Greenhouse spawns its own mobs.
spawnEvent.setCancelled(this.inGreenhouse(spawnEvent.getLocation()));
}
}
private boolean inGreenhouse(Location l) {
return addon.getManager().getMap().getGreenhouse(l).map(g -> g.isRoofOrWallBlock(l)).orElse(false);
}

View File

@ -5,6 +5,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import org.bukkit.Bukkit;
import org.bukkit.Material;
@ -21,9 +22,9 @@ import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.weather.WeatherChangeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.BoundingBox;
import com.google.common.base.Enums;
import com.google.common.base.Optional;
import world.bentobox.bentobox.util.Util;
import world.bentobox.greenhouses.Greenhouses;
@ -58,9 +59,10 @@ public class SnowTracker implements Listener {
}
boolean createdSnow = false;
List<Block> waterBlocks = new ArrayList<>();
for (int x = (int)gh.getBoundingBox().getMinX() + 1; x < (int)gh.getBoundingBox().getMaxX() -1; x++) {
for (int z = (int)gh.getBoundingBox().getMinZ() + 1; z < (int)gh.getBoundingBox().getMaxZ() - 1; z++) {
for (int y = (int)gh.getBoundingBox().getMaxY() - 2; y >= (int)gh.getBoundingBox().getMinY(); y--) {
final BoundingBox bb = gh.getBoundingBox();
for (int x = (int)bb.getMinX() + 1; x < (int)bb.getMaxX() -1; x++) {
for (int z = (int)bb.getMinZ() + 1; z < (int)bb.getMaxZ() - 1; z++) {
for (int y = (int)bb.getMaxY() - 2; y >= (int)bb.getMinY(); y--) {
Block b = Objects.requireNonNull(gh.getLocation().getWorld()).getBlockAt(x, y, z);
Material type = b.getType();
if (type.equals(Material.AIR) || type.equals(Material.SNOW)) {
@ -98,7 +100,7 @@ public class SnowTracker implements Listener {
}
private boolean placeSnow(Block b) {
Optional<Material> snowCauldron = Enums.getIfPresent(Material.class, "POWDER_SNOW_CAULDRON");
Optional<Material> snowCauldron = Enums.getIfPresent(Material.class, "POWDER_SNOW_CAULDRON").toJavaUtil();
if (snowCauldron.isPresent()) {
if (b.getType().equals(Material.CAULDRON)) {
b.setType(snowCauldron.get());

View File

@ -15,6 +15,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.Hopper;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.NumberConversions;
import world.bentobox.greenhouses.Greenhouses;
@ -85,18 +86,20 @@ public class EcoSystemManager {
}
private void convertBlocks(Greenhouse gh) {
World world = gh.getWorld();
final World world = gh.getWorld();
final BoundingBox bb = gh.getBoundingBox();
if(world == null || gh.getLocation() == null || gh.getLocation().getWorld() == null
|| !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMaxX()) >> 4, ((int) gh.getBoundingBox().getMaxZ()) >> 4)
|| !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMinX()) >> 4, ((int) gh.getBoundingBox().getMinZ()) >> 4)){
|| !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMaxX()) >> 4, ((int) bb.getMaxZ()) >> 4)
|| !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMinX()) >> 4, ((int) bb.getMinZ()) >> 4)){
return;
}
int gh_min_x = NumberConversions.floor(gh.getInternalBoundingBox().getMinX());
int gh_max_x = NumberConversions.floor(gh.getInternalBoundingBox().getMaxX());
final BoundingBox ibb = gh.getInternalBoundingBox();
int gh_min_x = NumberConversions.floor(ibb.getMinX());
int gh_max_x = NumberConversions.floor(ibb.getMaxX());
int gh_min_y = NumberConversions.floor(gh.getBoundingBox().getMinY()); // Note: this gets the floor
int gh_max_y = NumberConversions.floor(gh.getInternalBoundingBox().getMaxY());
int gh_min_z = NumberConversions.floor(gh.getInternalBoundingBox().getMinZ());
int gh_max_z = NumberConversions.floor(gh.getInternalBoundingBox().getMaxZ());
int gh_max_y = NumberConversions.floor(ibb.getMaxY());
int gh_min_z = NumberConversions.floor(ibb.getMinZ());
int gh_max_z = NumberConversions.floor(ibb.getMaxZ());
BiomeRecipe biomeRecipe = gh.getBiomeRecipe();
for (int x = gh_min_x; x < gh_max_x; x++) {
@ -129,8 +132,9 @@ public class EcoSystemManager {
}
private void addMobs(Greenhouse gh) {
final BoundingBox bb = gh.getBoundingBox();
if(gh.getLocation() == null || gh.getLocation().getWorld() == null || gh.getWorld() == null
|| !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMaxX()) >> 4, ((int) gh.getBoundingBox().getMaxZ()) >> 4) || !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMinX()) >> 4, ((int) gh.getBoundingBox().getMinZ()) >> 4)){
|| !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMaxX()) >> 4, ((int) bb.getMaxZ()) >> 4) || !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMinX()) >> 4, ((int) bb.getMinZ()) >> 4)){
// Skipping addmobs for unloaded greenhouse
return;
}
@ -138,8 +142,8 @@ public class EcoSystemManager {
return;
}
// Check greenhouse chunks are loaded
for (double blockX = gh.getBoundingBox().getMinX(); blockX < gh.getBoundingBox().getMaxX(); blockX+=16) {
for (double blockZ = gh.getBoundingBox().getMinZ(); blockZ < gh.getBoundingBox().getMaxZ(); blockZ+=16) {
for (double blockX = bb.getMinX(); blockX < bb.getMaxX(); blockX+=16) {
for (double blockZ = bb.getMinZ(); blockZ < bb.getMaxZ(); blockZ+=16) {
int chunkX = (int)(blockX / 16);
int chunkZ = (int)(blockZ / 16);
if (!gh.getWorld().isChunkLoaded(chunkX, chunkZ)) {
@ -170,8 +174,9 @@ public class EcoSystemManager {
* @param gh - greenhouse
*/
private void growPlants(Greenhouse gh) {
final BoundingBox bb = gh.getBoundingBox();
if (gh.getLocation() == null || gh.getLocation().getWorld() == null
|| !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMaxX()) >> 4, ((int) gh.getBoundingBox().getMaxZ()) >> 4) || !gh.getLocation().getWorld().isChunkLoaded(((int) gh.getBoundingBox().getMinX()) >> 4, ((int) gh.getBoundingBox().getMinZ()) >> 4)){
|| !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMaxX()) >> 4, ((int) bb.getMaxZ()) >> 4) || !gh.getLocation().getWorld().isChunkLoaded(((int) bb.getMinX()) >> 4, ((int) bb.getMinZ()) >> 4)){
//Skipping growplants for unloaded greenhouse
return;
}
@ -212,11 +217,13 @@ public class EcoSystemManager {
* @return List of blocks
*/
protected List<GrowthBlock> getAvailableBlocks(Greenhouse gh, boolean ignoreLiquid) {
final BoundingBox bb = gh.getBoundingBox();
final BoundingBox ibb = gh.getInternalBoundingBox();
List<GrowthBlock> result = new ArrayList<>();
if (gh.getWorld() == null) return result;
for (double x = gh.getInternalBoundingBox().getMinX(); x < gh.getInternalBoundingBox().getMaxX(); x++) {
for (double z = gh.getInternalBoundingBox().getMinZ(); z < gh.getInternalBoundingBox().getMaxZ(); z++) {
for (double y = gh.getInternalBoundingBox().getMaxY() - 1; y >= gh.getBoundingBox().getMinY(); y--) {
for (double x = ibb.getMinX(); x < ibb.getMaxX(); x++) {
for (double z = ibb.getMinZ(); z < ibb.getMaxZ(); z++) {
for (double y = ibb.getMaxY() - 1; y >= bb.getMinY(); y--) {
Block b = gh.getWorld().getBlockAt(NumberConversions.floor(x), NumberConversions.floor(y), NumberConversions.floor(z));
// Check ceiling blocks
if (b.isEmpty() && !b.getRelative(BlockFace.UP).isEmpty()) {

View File

@ -12,6 +12,7 @@ import org.bukkit.Location;
import org.bukkit.block.Biome;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.util.BoundingBox;
import world.bentobox.bentobox.api.events.BentoBoxReadyEvent;
import world.bentobox.bentobox.database.Database;
@ -125,35 +126,28 @@ public class GreenhouseManager implements Listener {
toBeRemoved.forEach(handler::deleteObject);
}
/**
* Saves all the greenhouses to database
*/
public void saveGreenhouses() {
addon.log("Saving greenhouses...");
map.getGreenhouses().forEach(handler::saveObjectAsync);
}
/**
* Removes the greenhouse from the world and resets biomes
* @param g - greenhouse
* @param gh - greenhouse
*/
public void removeGreenhouse(Greenhouse g) {
handler.deleteObject(g);
map.removeGreenhouse(g);
if (g.getOriginalBiome() == null) {
addon.logError("Greenhouse had no original biome: " + g.getLocation());
public void removeGreenhouse(Greenhouse gh) {
handler.deleteObject(gh);
map.removeGreenhouse(gh);
if (gh.getOriginalBiome() == null) {
addon.logError("Greenhouse had no original biome: " + gh.getLocation());
return;
}
if (g.getLocation() == null || g.getLocation().getWorld() == null) {
if (gh.getLocation() == null || gh.getLocation().getWorld() == null) {
// Greenhouse is messed up. It's being deleted anyway.
return;
}
addon.log("Returning biome to original state: " + g.getOriginalBiome().toString());
for (int x = (int)g.getBoundingBox().getMinX(); x<= (int)g.getBoundingBox().getMaxX(); x+=4) {
for (int z = (int)g.getBoundingBox().getMinZ(); z<= (int)g.getBoundingBox().getMaxZ(); z+=4) {
for (int y = (int)g.getBoundingBox().getMinY(); y<= (int)g.getBoundingBox().getMaxY(); y+=4) {
addon.log("Returning biome to original state: " + gh.getOriginalBiome().toString());
final BoundingBox bb = gh.getBoundingBox();
for (int x = (int)bb.getMinX(); x<= (int)bb.getMaxX(); x+=4) {
for (int z = (int)bb.getMinZ(); z<= (int)bb.getMaxZ(); z+=4) {
for (int y = (int)bb.getMinY(); y<= (int)bb.getMaxY(); y+=4) {
// Set back to the original biome
g.getLocation().getWorld().setBiome(x, y, z, g.getOriginalBiome());
gh.getLocation().getWorld().setBiome(x, y, z, gh.getOriginalBiome());
}
}
}
@ -250,9 +244,10 @@ public class GreenhouseManager implements Listener {
addon.logError("Biome recipe error - no such biome for " + gh.getBiomeRecipe().getName());
return;
}
for (int x = (int)gh.getBoundingBox().getMinX(); x < gh.getBoundingBox().getMaxX(); x+=4) {
for (int z = (int)gh.getBoundingBox().getMinZ(); z < gh.getBoundingBox().getMaxZ(); z+=4) {
for (int y = (int)gh.getBoundingBox().getMinY(); y < gh.getBoundingBox().getMaxY(); y+=4) {
final BoundingBox bb = gh.getBoundingBox();
for (int x = (int)bb.getMinX(); x < bb.getMaxX(); x+=4) {
for (int z = (int)bb.getMinZ(); z < bb.getMaxZ(); z+=4) {
for (int y = (int)bb.getMinY(); y < bb.getMaxY(); y+=4) {
Objects.requireNonNull(gh.getWorld()).setBiome(x, y, z, ghBiome);
}
}

View File

@ -67,7 +67,7 @@ biomes:
moblimit: 9
Cold_Rabbit:
friendlyname: "Cold Taiga Forest"
biome: TAIGA_HILLS
biome: OLD_GROWTH_SPRUCE_TAIGA
icon: SPRUCE_SAPLING
priority: 20
contents:
@ -280,6 +280,7 @@ biomes:
plants:
RED_MUSHROOM: 20:GRASS_BLOCK
BROWN_MUSHROOM: 20:GRASS_BLOCK
BLUE_ORCHID: 10:GRASS_BLOCK
LILY_PAD: 5:WATER
mobs:
SLIME: 5:WATER

View File

@ -0,0 +1,163 @@
---
protection:
flags:
GREENHOUSE:
name: Gewächshäuser
description: |-
&bUmschalten, wer
&bdie Gewächshäuser kontrollieren kann
greenhouses:
general:
greenhouses: Gewächshäuser
errors:
move: Gehe zuerst in ein Gewächshaus, das dir gehört.
no-rank: "& cDu hast keinen Rang, um das zu tun."
notyours: Das ist nicht dein Gewächshaus!
not-inside: "& cDu bist nicht in einem Gewächshaus!"
tooexpensive: Du kannst dir das nicht leisten [price]
alreadyexists: Gewächshaus existiert bereits!
norecipe: Kann kein Gewächshaus bauen!
event:
broke: Du hast das Gewächshaus kaputt gemacht! Biome auf [biome] umstellen!
entering: Betreten des Gewächshauses [biome]
leaving: Das Gewächshaus verlassen [biome]
recipe:
blockscolor: "&f"
title: "[[biome] recipe]"
watermustbe: Wasser > [coverage]% der Bodenfläche.
icemustbe: Eisblöcke > [coverage]% der Bodenfläche.
lavamustbe: Lava > [coverage]% der Bodenfläche.
minimumblockstitle: "[Minimum blocks required]"
nootherblocks: Keine weiteren Blöcke erforderlich.
missing: Gewächshaus fehlt
commands:
user:
remove:
description: Entfernt ein Gewächshaus, in dem Sie stehen, wenn Sie der Eigentümer
sind
make:
description: Versuche ein Gewächshaus zu bauen
parameters: "<recipe>"
error:
already: "&cEs gibt hier schon ein Gewächshaus!"
FAIL_BAD_ROOF_BLOCKS: "&cDach enthält unzulässige Blöcke!"
FAIL_BAD_WALL_BLOCKS: "&cWand enthält unzulässige Blöcke!"
FAIL_BELOW: "&cDu musst im Gewächshaus sein, um es zu versuchen."
FAIL_BLOCKS_ABOVE: "&cEs dürfen keine Blöcke über dem Gewächshaus sein!
Rote Glasblöcke sollten die Problemblöcke anzeigen."
FAIL_HOLE_IN_ROOF: "&cIn dem Dach ist ein Loch oder es ist nicht flach!
Rote Glasblöcke sollten das Problem anzeigen."
FAIL_HOLE_IN_WALL: "&cIn der Wand ist ein Loch!"
FAIL_NO_ROOF: "&cEs scheint kein Dach zu geben!"
FAIL_TOO_MANY_DOORS: "&cEs dürfen nicht mehr als 4 Türen im Gewächshaus
sein!"
FAIL_TOO_MANY_HOPPERS: "&cIn den Wänden oder im Dach ist nur ein Trichter
zulässig."
FAIL_UNEVEN_WALLS: "&cDie Wände sind uneben. Rote Glasblöcke sollten die
Problemblöcke anzeigen."
FAIL_INSUFFICIENT_ICE: "&cZu wenig Eis für dieses Rezept"
FAIL_INSUFFICIENT_LAVA: "&cZu wenig Lava für dieses Rezept"
FAIL_INSUFFICIENT_WATER: "&cZu wenig Wasser für dieses Rezept"
FAIL_NO_ICE: "&cFür dieses Rezept wird Eis benötigt"
FAIL_NO_LAVA: "&cFür dieses Rezept wird Lava benötigt"
FAIL_NO_WATER: "&cFür dieses Rezept wird Wasser benötigt"
FAIL_NO_RECIPE_FOUND: "&c Zu diesem Gewächshaus konnte kein passendes Rezept
gefunden werden"
FAIL_INSUFFICIENT_BLOCKS: "&cWeitere Blöcke sind erforderlich, um dieses
Rezept zu erstellen!"
FAIL_OVERLAPPING: "&cGewächshäuser können sich keine Wände teilen, sorry."
success: "&2Du hast erfolgreich ein [biome] Biom Gewächshaus gebaut! Beim
nächsten Teleport oder Login wird Biom synchronisiert."
missing-blocks: "[material] x [number] &cFehlt"
unknown-recipe: "&Unbekanntes Rezept"
try-these: "&cVersuche einen von diesen:"
recipe-format: "&3[name]"
info:
title: "&A[Wie man ein Gewächshaus baut]"
instructions: "&EStelle einen Kasten aus Glas mit 4 Wänden und einem flachen
&EGlasdach her und füge bis zu &F4 Türen &Ein den Wänden hinzu. &EPlatziere
&F1 Trichter &Ein eine Wand oder ein Dach und füge Wassereimer hinzu. &EUm
Schnee und/oder Knochenmehl herzustellen, um Pflanzen automatisch wachsen
zu lassen. &EPrüfe die Biom-Rezepte, welche Blöcke in einem Gewächshaus
sein müssen, um ein &EGewächshaus erfolgreich zu machen."
help:
help: Hilfe
make: Versucht ein Gewächshaus zu bauen
remove: Entfernt ein Gewächshaus, in dem du stehst, wenn du der Besitzer bist
info: Wie man ein Gewächshaus baut
list: Listet alle Gewächshausbiome auf, die hergestellt werden können
recipe: Erklärt dir, wie man das Gewächshaus biome macht
opengui: Öffnet die Gewächshaus-GUI
list:
title: "[Gewächshaus-Biom-Rezepte]"
info: Benutze /greenhouse recipe <number> um Details über die Herstellung jedes
Gewächshauses zu sehen
error:
greenhouseProtected: Gewächshaus geschützt
move: Gehe zuerst in ein Gewächshaus, das dir gehört.
notowner: Du musst der Besitzer dieses Gewächshauses sein, um das zu tun.
removing: Gewächshaus entfernen!
notyours: Das ist nicht dein Gewächshaus!
notinside: Du bist nicht in einem Gewächshaus!
tooexpensive: du kannst dir das nicht leisten [price]
alreadyexists: Gewächshaus existiert bereits!
norecipe: Kann kein Gewächshaus bauen!
messages:
enter: Betreten des [biome] Gewächshauses von [owner]!
leave: Verlässt jetzt das Gewächshaus von [owner].
youarein: Du bist jetzt in [owner]'s [biome] Gewächshaus!
removed: Dieses Gewächshaus ist nicht mehr ...
removedmessage: Ein [biome] Gewächshaus von dir ist nicht mehr!
ecolost: Dein Gewächshaus in [location] hat sein Ökosystem verloren und wurde entfernt.
info:
title: "&A [Gewächshaus bauen]"
instructions: "&EStelle einen Kasten aus Glas mit 4 Wänden und einem flachen &EGlasdach
her und füge bis zu &F4 Türen &Ein den Wänden hinzu. &EPlatziere &F1 Trichter
&Ein eine Wand oder ein Dach und füge Wassereimer hinzu. &EUm Schnee und/oder
Knochenmehl herzustellen, um Pflanzen automatisch wachsen zu lassen. &EPrüfe die
\ Biom-Rezepte, welche Blöcke in einem Gewächshaus sein müssen, um ein &EGewächshaus
erfolgreich zu machen."
info: "[Gewächshaus Info]"
none: Keiner
nomore: "&4Du kannst keine Gewächshäuser mehr bauen!"
onemore: "&6Du kannst noch ein weiteres Gewächshaus bauen."
youcanbuild: "&ADu kannst bis zu [number] mehr Gewächshäuser bauen!"
unlimited: "&ADu kannst eine unbegrenzte Anzahl von Gewächshäusern bauen!"
welcome: "&BHerzlich willkommen! Klicken Sie hier für Anweisungen"
recipe:
blockscolor: "&f"
hint: benutze /greenhouse list, um eine Liste von Rezeptnummern zu sehen!
wrongnumber: Die Rezeptnummer muss zwischen 1 und [size] liegen
title: "[[biome] recipe]"
nowater: Kein Wasser erlaubt.
noice: Kein Eis erlaubt.
nolava: Keine Lava erlaubt.
watermustbe: Wasser > [coverage]% der Bodenfläche.
icemustbe: Eisblöcke > [coverage]% der Bodenfläche.
lavamustbe: Lava > [coverage]% der Bodenfläche.
minimumblockstitle: "[Minimum blocks required]"
nootherblocks: Keine weiteren Blöcke erforderlich.
missing: Gewächshaus fehlt
event:
broke: Du hast das Gewächshaus kaputt gemacht! Biome auf [biome] umstellen!
fix: repariere das Gewächshaus und baue es dann wieder auf
cannotplace: Blöcke können nicht über einem Gewächshaus platziert werden!
pistonerror: Kolben können keine Blöcke über ein Gewächshaus schieben!
limits:
noneallowed: Die Berechtigungen erlauben dir keine Gewächshäuser, deshalb wurden
[nummer] entfernt.
limitedto: Die Berechtigungen beschränken dich auf [limit] Gewächshäuser, so dass
[number] entfernt wurden.
adminHelp:
reload: Konfiguration aus Datei neu laden.
info: Liefert Informationen über das Gewächshaus, in dem du dich befindest
reload:
configReloaded: Konfiguration aus Datei neu geladen.
admininfo:
error: Gewächshaus-Info nur im Spiel verfügbar
error2: Versetzt dich in ein Gewächshaus, um Infos zu sehen.
flags: "[Greenhouse Flags]"
news:
headline: "[Greenhouse News]"
controlpanel:
title: "&AGewächshäuser"

View File

@ -1,189 +1,153 @@
###########################################################################################
# This is a YML file. Be careful when editing. Check your edits in a YAML checker like #
# the one at http://yaml-online-parser.appspot.com #
# If this file is deleted, then it will be recreate at the next reload. #
###########################################################################################
---
protection:
flags:
GREENHOUSE:
name: Greenhouses
description: |
&bÁllítsd be, hogy ki
&bkezelheti az üvegházat
description: "&bÁllítsd be, hogy ki\n&bkezelheti az üvegházat \n"
greenhouses:
general:
greenhouses: "Üvegházak"
greenhouses: Üvegházak
errors:
move: "Menj a saját üvegházadhoz."
move: Menj a saját üvegházadhoz.
no-rank: "&cNincs rangod ehhez."
notyours: "Ez nem a te üvegházad!"
notyours: Ez nem a te üvegházad!
not-inside: "&cNem vagy üvegházban!"
tooexpensive: "Ehhez nincs elég pénzed, ennyi szükséges: [price]"
alreadyexists: "Az üvegház már létezik!"
norecipe: "Nem tudsz üvegházat csinálni!"
tooexpensive: 'Ehhez nincs elég pénzed, ennyi szükséges: [price]'
alreadyexists: Az üvegház már létezik!
norecipe: Nem tudsz üvegházat csinálni!
event:
broke: "Összetörted az üvegházad! Visszaállítjuk a biome-ot [biome]-ra/re!"
entering: "Belépés a(z) [biome] üvegházba."
leaving: "Kilépés a(z) [biome] üvegházból."
broke: Összetörted az üvegházad! Visszaállítjuk a biome-ot [biome]-ra/re!
entering: Belépés a(z) [biome] üvegházba.
leaving: Kilépés a(z) [biome] üvegházból.
recipe:
blockscolor: "&f"
title: "[[biome] recept]"
watermustbe: "Víz > [coverage]% kell, hogy legyen az alapterületen."
icemustbe: "Jég blokk > [coverage]% kell, hogy legyen az alapterületen."
lavamustbe: "Láva > [coverage]% kell, hogy legyen az alapterületen."
minimumblockstitle: "[Minimum blokkmennyiség]"
nootherblocks: "Nem szükséges több blokk."
missing: "Hiányzó üvegház."
blockscolor: "&f"
title: "[[biome] recept]"
watermustbe: Víz > [coverage]% kell, hogy legyen az alapterületen.
icemustbe: Jég blokk > [coverage]% kell, hogy legyen az alapterületen.
lavamustbe: Láva > [coverage]% kell, hogy legyen az alapterületen.
minimumblockstitle: "[Minimum blokkmennyiség]"
nootherblocks: Nem szükséges több blokk.
missing: Hiányzó üvegház.
commands:
user:
remove:
description: "Ha az üvegházadban állsz és te vagy a tulaja, akkor törli azt."
description: Ha az üvegházadban állsz és te vagy a tulaja, akkor törli azt.
make:
description: "Megpróbál készíteni egy üvegházat."
description: Megpróbál készíteni egy üvegházat.
parameters: "<recipe>"
error:
already: "Az üvegház már létezik!"
already: Az üvegház már létezik!
FAIL_BAD_ROOF_BLOCKS: "&cA tető nem engedélyezett blokkokat tartalmaz!"
FAIL_BAD_WALL_BLOCKS: "&cA fal nem engedélyezett blokkokat tartalmaz!"
FAIL_BELOW: "&cAz üvegházban kell lenned, hogy megpróbáld elkészíteni"
FAIL_BLOCKS_ABOVE: "&cAz üvegház felett nem lehetnek blokkok! A piros üvegblokkoknak meg kell mutatniuk a problémás blokkokat."
FAIL_HOLE_IN_ROOF: "&cVan egy lyuk a tetőn, vagy nem sík! A piros üvegblokkoknak meg kell mutatniuk a problémát."
FAIL_BLOCKS_ABOVE: "&cAz üvegház felett nem lehetnek blokkok! A piros üvegblokkoknak
meg kell mutatniuk a problémás blokkokat."
FAIL_HOLE_IN_ROOF: "&cVan egy lyuk a tetőn, vagy nem sík! A piros üvegblokkoknak
meg kell mutatniuk a problémát."
FAIL_HOLE_IN_WALL: "&cVan egy lyuk a falban!"
FAIL_NO_ROOF: "&cÚgy tűnik, nincs tető!"
FAIL_TOO_MANY_DOORS: "&cAz üvegházban nem lehet négynél több ajtó!"
FAIL_TOO_MANY_HOPPERS: "&cCsak egy tölcsér megengedett a falakban vagy a tetőben."
FAIL_UNEVEN_WALLS: "&cA falak egyenetlenek. A piros üvegblokkoknak meg kell mutatniuk a problémás blokkokat."
FAIL_TOO_MANY_HOPPERS: "&cCsak egy tölcsér megengedett a falakban vagy a
tetőben."
FAIL_UNEVEN_WALLS: "&cA falak egyenetlenek. A piros üvegblokkoknak meg kell
mutatniuk a problémás blokkokat."
FAIL_INSUFFICIENT_ICE: "&cNem elegendő a jég ehhez a recept elkészítéséhez."
FAIL_INSUFFICIENT_LAVA: "&cNem elegendő a láva ehhez a recept elkészítéséhez."
FAIL_INSUFFICIENT_WATER: "&cNem elegendő a víz ehhez a recept elkészítéséhez."
FAIL_NO_ICE: "&cA jég szükséges ehhez a recepthez."
FAIL_NO_LAVA: "&cA láva szükséges ehhez a recepthez."
FAIL_NO_WATER: "&cA víz szükséges ehhez a recepthez."
FAIL_NO_RECIPE_FOUND: "&c Nem található ilyen recept ebben a melegházban."
FAIL_INSUFFICIENT_BLOCKS: "&cTovábbi blokkokra van szükség a recept elkészítéséhez!"
FAIL_OVERLAPPING: "&cAz üvegházak nem oszthatják meg a falakat, bocs."
success: "Sikeresen elkészítettél egy [biome] üvegházat! Az éghajlat szinkronizálódik a következő teleportálásnál, vagy belépésnél."
success: Sikeresen elkészítettél egy [biome] üvegházat! Az éghajlat szinkronizálódik
a következő teleportálásnál, vagy belépésnél.
missing-blocks: "&cHiányzik [material] x [number]"
unknown-recipe: "&cIsmeretlen recept"
try-these: "&cPróbálj meg egyet az alábbiak közül:"
recipe-format: "&3[name]"
info:
title: "&A[Hogyan Készíts Üvegházat]"
instructions: |
&EKészíts egy üvegdobozt 4 fallal, egy üvegtetővel,
&Eés akár 4 ajtót is tehetsz a falba.
&ERakj a falba vagy a tetőbe &F1 tölcsért, &Eés helyezz bele vizes vödröket,
&Ehogy havat és/vagy csontlisztet készíts, mellyel automatikusan tudod növeszteni a növényeidet.
&ENézd meg az éghajlatokhoz tartozó recepteket, hogy megtudd milyen blokkok legyenek feltétlenül
&Eaz üvegházban ahhoz, hogy sikeresen elkészítsd.
######### Old locale for reference
instructions: "&EKészíts egy üvegdobozt 4 fallal, egy üvegtetővel,\n&Eés akár
4 ajtót is tehetsz a falba.\n&ERakj a falba vagy a tetőbe &F1 tölcsért,
&Eés helyezz bele vizes vödröket,\n&Ehogy havat és/vagy csontlisztet készíts,
mellyel automatikusan tudod növeszteni a növényeidet.\n&ENézd meg az éghajlatokhoz
tartozó recepteket, hogy megtudd milyen blokkok legyenek feltétlenül\n&Eaz
üvegházban ahhoz, hogy sikeresen elkészítsd. \n"
help:
help: "help"
make: "Tries to make a greenhouse"
remove: "Removes a greenhouse that you are standing in if you are the owner"
info: "How to make a greenhouse"
list: "Lists all the greenhouse biomes that can be made"
recipe: "Tells you how to make greenhouse biome"
opengui: "Opens the Greenhouse GUI"
help: help
make: Tries to make a greenhouse
remove: Removes a greenhouse that you are standing in if you are the owner
info: How to make a greenhouse
list: Lists all the greenhouse biomes that can be made
recipe: Tells you how to make greenhouse biome
opengui: Opens the Greenhouse GUI
list:
title: "[Greenhouse Biome Recipes]"
info: "Use /greenhouse recipe <number> to see details on how to make each greenhouse"
################
#General Errors#
################
title: "[Greenhouse Biome Recipes]"
info: Use /greenhouse recipe <number> to see details on how to make each greenhouse
error:
greenhouseProtected: "Greenhouse protected"
move: "Move to a greenhouse you own first."
notowner: "You must be the owner of this greenhouse to do that."
removing: "Removing greenhouse!"
notyours: "This is not your greenhouse!"
notinside: "You are not in a greenhouse!"
tooexpensive: "You cannot afford [price]"
alreadyexists: "Greenhouse already exists!"
norecipe: "Cannot make a greenhouse!"
greenhouseProtected: Greenhouse protected
move: Move to a greenhouse you own first.
notowner: You must be the owner of this greenhouse to do that.
removing: Removing greenhouse!
notyours: This is not your greenhouse!
notinside: You are not in a greenhouse!
tooexpensive: You cannot afford [price]
alreadyexists: Greenhouse already exists!
norecipe: Cannot make a greenhouse!
messages:
enter: "Entering [owner]'s [biome] greenhouse!"
leave: "Now leaving [owner]'s greenhouse."
youarein: "You are now in [owner]'s [biome] greenhouse!"
removed: "This greenhouse is no more..."
removedmessage: "A [biome] greenhouse of yours is no more!"
ecolost: "Your greenhouse at [location] lost its eco system and was removed."
enter: Entering [owner]'s [biome] greenhouse!
leave: Now leaving [owner]'s greenhouse.
youarein: You are now in [owner]'s [biome] greenhouse!
removed: This greenhouse is no more...
removedmessage: A [biome] greenhouse of yours is no more!
ecolost: Your greenhouse at [location] lost its eco system and was removed.
info:
title: "&A[How To Build A Greenhouse]"
instructions: |
&EMake a box out of out of glass with 4 walls and a flat glass
&Eroof and add up to &F4 doors &Ein the walls.
&EPlace &F1 hopper &Ein a wall or roof and add water buckets.
&Eto make snow and/or bonemeal to grow plants automatically.
&ECheck the biome recipes for what blocks must be inside a
&Egreenhouse to make one successfully.
info: "[Greenhouse Info]"
none: "None"
nomore: "&4You cannot build any more greenhouses!"
onemore: "&6You can build one more greenhouse."
youcanbuild: "&AYou can build up to [number] more greenhouses!"
unlimited: "&AYou can build an unlimited number of greenhouses!"
welcome: "&BWelcome! Click here for instructions"
title: "&A[How To Build A Greenhouse]"
instructions: "&EMake a box out of out of glass with 4 walls and a flat glass\n&Eroof
and add up to &F4 doors &Ein the walls.\n&EPlace &F1 hopper &Ein a wall or roof
and add water buckets.\n&Eto make snow and/or bonemeal to grow plants automatically.\n&ECheck
the biome recipes for what blocks must be inside a\n&Egreenhouse to make one successfully.
\n"
info: "[Greenhouse Info]"
none: None
nomore: "&4You cannot build any more greenhouses!"
onemore: "&6You can build one more greenhouse."
youcanbuild: "&AYou can build up to [number] more greenhouses!"
unlimited: "&AYou can build an unlimited number of greenhouses!"
welcome: "&BWelcome! Click here for instructions"
recipe:
blockscolor: "&f"
hint: "Use /greenhouse list to see a list of recipe numbers!"
wrongnumber: "Recipe number must be between 1 and [size]"
title: "[[biome] recipe]"
nowater: "No water allowed."
noice: "No ice allowed."
nolava: "No lava allowed."
watermustbe: "Water > [coverage]% of floor area."
icemustbe: "Ice blocks > [coverage]% of floor area."
lavamustbe: "Lava > [coverage]% of floor area."
minimumblockstitle: "[Minimum blocks required]"
nootherblocks: "No other blocks required."
missing: "Greenhouse is missing"
blockscolor: "&f"
hint: Use /greenhouse list to see a list of recipe numbers!
wrongnumber: Recipe number must be between 1 and [size]
title: "[[biome] recipe]"
nowater: No water allowed.
noice: No ice allowed.
nolava: No lava allowed.
watermustbe: Water > [coverage]% of floor area.
icemustbe: Ice blocks > [coverage]% of floor area.
lavamustbe: Lava > [coverage]% of floor area.
minimumblockstitle: "[Minimum blocks required]"
nootherblocks: No other blocks required.
missing: Greenhouse is missing
event:
broke: "You broke this greenhouse! Reverting biome to [biome]!"
fix: "Fix the greenhouse and then make it again."
cannotplace: "Blocks cannot be placed above a greenhouse!"
pistonerror: "Pistons cannot push blocks over a greenhouse!"
broke: You broke this greenhouse! Reverting biome to [biome]!
fix: Fix the greenhouse and then make it again.
cannotplace: Blocks cannot be placed above a greenhouse!
pistonerror: Pistons cannot push blocks over a greenhouse!
limits:
noneallowed: "Permissions do not allow you any greenhouses so [number] were removed."
limitedto: "Permissions limit you to [limit] greenhouses so [number] were removed."
##################################
#Admin commands that use /gadmin #
##################################
#Help
noneallowed: Permissions do not allow you any greenhouses so [number] were removed.
limitedto: Permissions limit you to [limit] greenhouses so [number] were removed.
adminHelp:
reload: "reload configuration from file."
info: "provides info on the greenhouse you are in"
#reload
reload: reload configuration from file.
info: provides info on the greenhouse you are in
reload:
configReloaded: "Configuration reloaded from file."
configReloaded: Configuration reloaded from file.
admininfo:
error: "Greenhouse info only available in-game"
error2: "Put yourself in a greenhouse to see info."
flags: "[Greenhouse Flags]"
error: Greenhouse info only available in-game
error2: Put yourself in a greenhouse to see info.
flags: "[Greenhouse Flags]"
news:
headline: "[Greenhouse News]"
headline: "[Greenhouse News]"
controlpanel:
title: "&AGreenhouses"
title: "&AGreenhouses"

View File

@ -1,37 +1,42 @@
---
adminHelp:
info: あなたがいる温室に関する情報を提供します
reload: ファイルから設定をリロードします。
admininfo:
error: ゲーム内でのみ利用可能な温室情報
error2: 温室で情報を確認してください。
flags: "[温室旗]"
controlpanel:
title: "A温室"
error:
alreadyexists: 温室はすでに存在します!
greenhouseProtected: 温室保護
move: 最初に所有する温室に移動します。
norecipe: 温室を作ることができません!
notinside: あなたは温室の中にいません!
notowner: それを行うには、この温室の所有者でなければなりません。
notyours: これはあなたの温室ではありません!
removing: 温室を撤去!
tooexpensive: あなたは余裕がない[price]
event:
broke: あなたはこの温室を壊しました!バイオームを[biome]に戻しています!
cannotplace: ブロックを温室の上に置くことはできません!
fix: 温室を修理してから、もう一度作ります。
pistonerror: ピストンは温室の上でブロックを押すことができません!
protection:
flags:
GREENHOUSE:
name: 温室
description: |-
&b誰が温室を制御できるかを
&b設定する
greenhouses:
general:
greenhouses: 温室
errors:
move: 最初に所有する温室に移動します。
no-rank: "cあなたにはそれをするランクがありません。"
notyours: これはあなたの温室ではありません!
not-inside: "&cあなたは温室の中にいません"
tooexpensive: あなたは余裕がない[price]
alreadyexists: 温室はすでに存在します!
norecipe: 温室を作ることができません!
event:
broke: "&c温室を壊しましたバイオームを [biome]に戻しています!"
entering: "[biome]の温室に入る"
leaving: "[biome]の温室を離れる"
recipe:
blockscolor: "f"
title: "[[biome]レシピ]"
watermustbe: 水>[coverage]床面積の%。
icemustbe: 氷のブロック>床面積の[coverage]%。
lavamustbe: 溶岩> [coverage]床面積の%。
minimumblockstitle: "[必要な最小ブロック]"
nootherblocks: 他のブロックは必要ありません。
missing: 温室がありません
commands:
user:
info:
title: "A [温室の作り方]"
instructions: 4つの壁と平らなガラス屋根でガラスから箱を作り、壁に最大4つのドアを追加します。 1つのホッパーを壁または屋根に置き、水バケツを追加します。
雪や骨粉を作り、植物を自動的に育てます。 バイオームレシピを確認して、温室内で正常にブロックするために必要なブロックを確認してください。
remove:
description: あなたが所有者である場合、あなたが立っている温室を取り除きます
make:
description: 温室を作ってみる
parameters: "<レシピ>"
error:
already: "cここには温室がすでにあります"
FAIL_BAD_ROOF_BLOCKS: "c屋根には許可されていないブロックが含まれています"
@ -40,97 +45,99 @@ greenhouses:
FAIL_BLOCKS_ABOVE: "c温室の上にブロックを置くことはできません赤いガラスブロックに問題のあるブロックが表示されます。"
FAIL_HOLE_IN_ROOF: "c屋根に穴があるか、平らではありません赤いガラスブロックが問題を示しているはずです。"
FAIL_HOLE_IN_WALL: "c壁に穴が開いています"
FAIL_INSUFFICIENT_ICE: "cこのレシピを作成するには氷が足りません"
FAIL_INSUFFICIENT_LAVA: "cこのレシピを作るには溶岩が足りません"
FAIL_INSUFFICIENT_WATER: "cこのレシピを作るのに水が足りません"
FAIL_NO_ROOF: "c屋根がないようです"
FAIL_TOO_MANY_DOORS: "c温室には4つ以上のドアを置くことはできません"
FAIL_TOO_MANY_HOPPERS: "c壁または屋根に使用できるホッパーは1つだけです。"
FAIL_UNEVEN_WALLS: "c壁が不均一です。赤いガラスブロックに問題のあるブロックが表示されます。"
FAIL_INSUFFICIENT_ICE: "cこのレシピを作成するには氷が足りません"
FAIL_INSUFFICIENT_LAVA: "cこのレシピを作るには溶岩が足りません"
FAIL_INSUFFICIENT_WATER: "cこのレシピを作るのに水が足りません"
FAIL_NO_ICE: このレシピを作成するにはc氷が必要です
FAIL_NO_LAVA: このレシピを作成するにはc溶岩が必要です
FAIL_NO_WATER: このレシピを作成するにはc水が必要です
parameters: "<レシピ>"
FAIL_NO_RECIPE_FOUND: "cこの温室に一致するレシピが見つかりませんでした"
FAIL_INSUFFICIENT_BLOCKS: "&cこのレシピを作成するには、さらに多くのブロックが必要です。"
FAIL_OVERLAPPING: "c温室は壁を共有できません。申し訳ありません。"
success: "2あなたは[biome]バイオーム温室を無事に作成しました!バイオームは次のテレポートまたはログインで同期します。"
remove:
description: あなたが所有者である場合、あなたが立っている温室を取り除きます
errors:
alreadyexists: 温室はすでに存在します!
move: 最初に所有する温室に移動します。
no-rank: "cあなたにはそれをするランクがありません。"
norecipe: 温室を作ることができません!
not-inside: "cあなたは温室の中にいません"
notyours: これはあなたの温室ではありません!
tooexpensive: あなたは余裕がない[price]
general:
greenhouses: 温室
recipe:
blockscolor: "f"
minimumblockstitle: "[必要な最小ブロック]"
missing: 温室がありません
nootherblocks: 他のブロックは必要ありません。
title: "[[biome]レシピ]"
watermustbe: 水>[coverage]床面積の%。
icemustbe: 氷のブロック>床面積の[coverage]%。
lavamustbe: 溶岩> [coverage]床面積の%。
event:
broke: "&c温室を壊しましたバイオームを [biome]に戻しています!"
entering: "[biome]の温室に入る"
leaving: "[biome]の温室を離れる"
missing-blocks: "&c欠落[material] x [number]"
unknown-recipe: "c不明なレシピ"
try-these: "c次のいずれかを試してください。"
recipe-format: "&3[name]"
info:
title: "A [温室の作り方]"
instructions: 4つの壁と平らなガラス屋根でガラスから箱を作り、壁に最大4つのドアを追加します。 1つのホッパーを壁または屋根に置き、水バケツを追加します。
雪や骨粉を作り、植物を自動的に育てます。 バイオームレシピを確認して、温室内で正常にブロックするために必要なブロックを確認してください。
help:
help: 手助け
make: 温室を作ろうとする
remove: あなたが所有者である場合、あなたが立っている温室を取り除きます
info: 温室の作り方
list: 作成可能なすべての温室バイオームをリストします
make: 温室を作ろうとする
recipe: 温室バイオームの作り方を説明します
remove: あなたが所有者である場合、あなたが立っている温室を取り除きます
opengui: 温室のGUI
info:
info: "[温室情報]"
instructions: "E 4つの壁と平らなガラスのE屋根でガラスから箱を作り、壁にF 4のドアEを追加します。 E壁と屋根にF 1ホッパーEを配置し、ウォーターバケツEを追加して雪や骨粉を作り、植物を自動的に成長させます。
Eバイオームレシピを確認して、E温室内で正常にブロックを作成するために必要なブロックを確認します。"
nomore: "4これ以上温室を建設することはできません"
none: 無し
onemore: "6温室をもう1つ構築できます。"
title: "A [温室の作り方]"
unlimited: "A温室を無制限に構築できます"
welcome: "B ようこそ!手順についてはここをクリックしてください"
youcanbuild: "A温室を最大[number]個まで構築できます!"
limits:
limitedto: 許可により温室が[limit]に制限されるため、[number]が削除されました。
noneallowed: 許可により温室が許可されないため、[number]は削除されました。
list:
title: "[温室効果バイオームのレシピ]"
info: "/greenhouse recipe <番号>を使用する各温室の作り方の詳細を見る"
error:
greenhouseProtected: 温室保護
move: 最初に所有する温室に移動します。
notowner: それを行うには、この温室の所有者でなければなりません。
removing: 温室を撤去!
notyours: これはあなたの温室ではありません!
notinside: あなたは温室の中にいません!
tooexpensive: あなたは余裕がない[price]
alreadyexists: 温室はすでに存在します!
norecipe: 温室を作ることができません!
messages:
ecolost: "[location]の温室はエコシステムを失い、撤去されました。"
leave: "[owner]の温室を離れます。"
removed: この温室はもうありません...
enter: "[owner]の[biome]の温室に入る!"
leave: "[owner]の温室を離れます。"
youarein: あなたは今[owner]の[biome]の温室にいます!
removed: この温室はもうありません...
removedmessage: あなたの[biome]の温室はもうありません!
news:
headline: "[温室ニュース]"
protection:
flags:
GREENHOUSE:
name: 温室
description: |-
b誰が温室を制御できるかを
b設定する
ecolost: "[location]の温室はエコシステムを失い、撤去されました。"
info:
title: "A [温室の作り方]"
instructions: "E 4つの壁と平らなガラスのE屋根でガラスから箱を作り、壁にF 4のドアEを追加します。 E壁と屋根にF 1ホッパーEを配置し、ウォーターバケツEを追加して雪や骨粉を作り、植物を自動的に成長させます。
Eバイオームレシピを確認して、E温室内で正常にブロックを作成するために必要なブロックを確認します。"
info: "[温室情報]"
none: 無し
nomore: "4これ以上温室を建設することはできません"
onemore: "6温室をもう1つ構築できます。"
youcanbuild: "A温室を最大[number]個まで構築できます!"
unlimited: "A温室を無制限に構築できます"
welcome: "B ようこそ!手順についてはここをクリックしてください"
recipe:
blockscolor: "f"
hint: "/ greenhouse listを使用して、レシピ番号のリストを表示します"
wrongnumber: レシピ番号は1から[size]の間でなければなりません
title: "[[biome]レシピ]"
nowater: 水は許可されません。
noice: 氷は許可されていません。
nolava: 溶岩は許可されていません。
watermustbe: 水> [coverage]床面積の%。
icemustbe: 氷のブロック&gt;床面積の[coverage]%。
lavamustbe: 溶岩> [coverage]床面積の%。
minimumblockstitle: "[必要な最小ブロック]"
missing: 温室がありません
noice: 氷は許可されていません。
nolava: 溶岩は許可されていません。
nootherblocks: 他のブロックは必要ありません。
nowater: 水は許可されません。
title: "[[biome]レシピ]"
watermustbe: 水> [coverage]床面積の%。
wrongnumber: レシピ番号は1から[size]の間でなければなりません
missing: 温室がありません
event:
broke: あなたはこの温室を壊しました!バイオームを[biome]に戻しています!
fix: 温室を修理してから、もう一度作ります。
cannotplace: ブロックを温室の上に置くことはできません!
pistonerror: ピストンは温室の上でブロックを押すことができません!
limits:
noneallowed: 許可により温室が許可されないため、[number]は削除されました。
limitedto: 許可により温室が[limit]に制限されるため、[number]が削除されました。
adminHelp:
reload: ファイルから設定をリロードします。
info: あなたがいる温室に関する情報を提供します
reload:
configReloaded: ファイルから構成が再ロードされました。
admininfo:
error: ゲーム内でのみ利用可能な温室情報
error2: 温室で情報を確認してください。
flags: "[温室旗]"
news:
headline: "[温室ニュース]"
controlpanel:
title: "A温室"

View File

@ -1,7 +1,4 @@
#
# This is a YML file. Be careful when editing. Check your edits in a YAML checker like #
# the one at http://yaml-online-parser.appspot.com #
# If this file is deleted, then it will be recreate at the next reload. #
---
protection:
flags:
GREENHOUSE:
@ -12,9 +9,9 @@ greenhouses:
greenhouses: 温室
errors:
move: 移动到你拥有的第一个温室.
no-rank: '&c你没有足够的阶级去做这个.'
no-rank: "&c你没有足够的阶级去做这个."
notyours: 这不是你的温室!
not-inside: '&c你并不处于一个温室之中!'
not-inside: "&c你并不处于一个温室之中!"
tooexpensive: 你的钱不足以支付 [price]
alreadyexists: 温室已经存在!
norecipe: 无法创建一个温室!
@ -23,12 +20,12 @@ greenhouses:
entering: 你进入一个 [biome] 温室
leaving: 你离开了 [biome] 温室
recipe:
blockscolor: '&f'
title: '[[biome] 配方]'
blockscolor: "&f"
title: "[[biome] 配方]"
watermustbe: 水在地面上的占比需要大于[coverage]%.
icemustbe: 冰在地面上的占比需要大于[coverage]%.
lavamustbe: 岩浆在地面上的占比需要大于[coverage]%.
minimumblockstitle: '[最少所需的方块数目]'
minimumblockstitle: "[最少所需的方块数目]"
nootherblocks: 没有其它需要的方块了.
missing: 温室缺失了
commands:
@ -37,39 +34,37 @@ greenhouses:
description: 如果你是你现在所处的温室的主人则移除这个温室
make:
description: 尝试建造一个温室
parameters: <recipe>
parameters: "<recipe>"
error:
already: '&c这已经有一个温室了!'
FAIL_BAD_ROOF_BLOCKS: '&c屋顶包含了不被允许的方块!'
FAIL_BAD_WALL_BLOCKS: '&c墙壁包含了不被允许的方块!'
FAIL_BELOW: '&c你必须处于温室结构内才能尝试建造它'
FAIL_BLOCKS_ABOVE: '&c温室的上方不能有方块违规方块已被标红.'
FAIL_HOLE_IN_ROOF: '&c屋顶上有一个洞或者屋顶并不平整违规方块已被标红.'
FAIL_HOLE_IN_WALL: '&c墙上有一个洞!'
FAIL_NO_ROOF: '&c这儿看起来没有屋顶!'
FAIL_TOO_MANY_DOORS: '&c你的温室最多只能有四个门!'
FAIL_TOO_MANY_HOPPERS: '&c墙或屋顶上至多有一个漏斗.'
FAIL_UNEVEN_WALLS: '&c墙壁不平坦违规方块已被标红.'
FAIL_INSUFFICIENT_ICE: '&c冰的数目不足以建造这个温室'
FAIL_INSUFFICIENT_LAVA: '&c岩浆的数目不足以建造这个温室'
FAIL_INSUFFICIENT_WATER: '&c水的数目不足以建造这个温室'
FAIL_NO_ICE: '&c对于这个温室来说冰是必须的'
FAIL_NO_LAVA: '&c对于这个温室来说岩浆是必须的'
FAIL_NO_WATER: '&c对于这个温室来说水是必须的'
FAIL_INSUFFICIENT_BLOCKS: '&c你所用的方块数目不足!'
FAIL_OVERLAPPING: '&c温室间不能共享墙壁.'
success: '&2你成功的建造了一个 [biome] 群系温室! 在你下次登陆时生物群系将会刷新.'
missing-blocks: '&c缺少了 [material] x [number]'
unknown-recipe: '&c未知的温室配方'
try-these: '&c尝试以下操作:'
recipe-format: '&3[name]'
already: "&c这已经有一个温室了!"
FAIL_BAD_ROOF_BLOCKS: "&c屋顶包含了不被允许的方块!"
FAIL_BAD_WALL_BLOCKS: "&c墙壁包含了不被允许的方块!"
FAIL_BELOW: "&c你必须处于温室结构内才能尝试建造它"
FAIL_BLOCKS_ABOVE: "&c温室的上方不能有方块违规方块已被标红."
FAIL_HOLE_IN_ROOF: "&c屋顶上有一个洞或者屋顶并不平整违规方块已被标红."
FAIL_HOLE_IN_WALL: "&c墙上有一个洞!"
FAIL_NO_ROOF: "&c这儿看起来没有屋顶!"
FAIL_TOO_MANY_DOORS: "&c你的温室最多只能有四个门!"
FAIL_TOO_MANY_HOPPERS: "&c墙或屋顶上至多有一个漏斗."
FAIL_UNEVEN_WALLS: "&c墙壁不平坦违规方块已被标红."
FAIL_INSUFFICIENT_ICE: "&c冰的数目不足以建造这个温室"
FAIL_INSUFFICIENT_LAVA: "&c岩浆的数目不足以建造这个温室"
FAIL_INSUFFICIENT_WATER: "&c水的数目不足以建造这个温室"
FAIL_NO_ICE: "&c对于这个温室来说冰是必须的"
FAIL_NO_LAVA: "&c对于这个温室来说岩浆是必须的"
FAIL_NO_WATER: "&c对于这个温室来说水是必须的"
FAIL_NO_RECIPE_FOUND: "&c 找不到与此温室相匹配的配方"
FAIL_INSUFFICIENT_BLOCKS: "&c你所用的方块数目不足!"
FAIL_OVERLAPPING: "&c温室间不能共享墙壁."
success: "&2你成功的建造了一个 [biome] 群系温室! 在你下次登陆时生物群系将会刷新."
missing-blocks: "&c缺少了 [material] x [number]"
unknown-recipe: "&c未知的温室配方"
try-these: "&c尝试以下操作:"
recipe-format: "&3[name]"
info:
title: '&A[温室建造指南]'
instructions: "&E用玻璃建造一个有四面墙和屋顶的平整的立方体\n\
&E最多只能有 &F4 扇门. &E\n在墙壁或屋顶内&E放置 &F一个漏斗\
\ \n&E来放置骨粉或雪\
\ 来让作物自动生长.\n&E检查温室配方确保\
\ 你的温室包含足够的必要方块\n&E温室就顺利建造了. \n"
title: "&A[温室建造指南]"
instructions: "&E用玻璃建造一个有四面墙和屋顶的平整的立方体\n&E最多只能有 &F4 扇门. &E\n在墙壁或屋顶内&E放置 &F一个漏斗
\n&E来放置骨粉或雪 来让作物自动生长.\n&E检查温室配方确保 你的温室包含足够的必要方块\n&E温室就顺利建造了. \n"
help:
help: 帮助
make: 尝试建造一个温室
@ -79,7 +74,7 @@ help:
recipe: 告知你如何制造一个温室
opengui: 打开温室GUI
list:
title: '[温室建造指南]'
title: "[温室建造指南]"
info: 使用指令 /greenhouse recipe <number> 来查看建造每一个温室的细节
error:
greenhouseProtected: 温室已被保护
@ -99,31 +94,28 @@ messages:
removedmessage: 你的 [biome] 温室已经被移除!
ecolost: 你位于 [location] 的温室生态环境遭到破坏,它已经不再是温室了.
info:
title: '&A[如何建造一个温室]'
instructions: "&E用玻璃建造一个有四面墙和屋顶的平整的立方体\n\
&E最多只能有 &F4 扇门. &E\n在墙壁或屋顶内&E放置 &F一个漏斗\
\ \n&E来放置骨粉或雪\
\ 来让作物自动生长.\n&E检查温室配方确保\
\ 你的温室包含足够的必要方块\n&E温室就顺利建造了. \n"
info: '[温室信息]'
title: "&A[如何建造一个温室]"
instructions: "&E用玻璃建造一个有四面墙和屋顶的平整的立方体\n&E最多只能有 &F4 扇门. &E\n在墙壁或屋顶内&E放置 &F一个漏斗 \n&E来放置骨粉或雪
来让作物自动生长.\n&E检查温室配方确保 你的温室包含足够的必要方块\n&E温室就顺利建造了. \n"
info: "[温室信息]"
none:
nomore: '&4你无法建造更多的温室了!'
onemore: '&6你可以再建造一个温室.'
youcanbuild: '&A你最多能建造 [number] 个温室!'
unlimited: '&A你能建造无限多个温室!'
welcome: '&B你好! 点击这里获得更多提示'
nomore: "&4你无法建造更多的温室了!"
onemore: "&6你可以再建造一个温室."
youcanbuild: "&A你最多能建造 [number] 个温室!"
unlimited: "&A你能建造无限多个温室!"
welcome: "&B你好! 点击这里获得更多提示"
recipe:
blockscolor: '&f'
blockscolor: "&f"
hint: 使用 /greenhouse list 来看见所有温室配方的编号!
wrongnumber: 温室配方编号必须位于 1 与 [size] 之间
title: '[[biome] 配方]'
title: "[[biome] 配方]"
nowater: 不允许有水.
noice: 不允许有冰.
nolava: 不允许有岩浆.
watermustbe: 水在地面上的占比需要大于 [coverage]%.
icemustbe: 冰在地面上的占比需要大于 [coverage]%.
lavamustbe: 岩浆在地面上的占比需要大于 [coverage]%.
minimumblockstitle: '[最少所需的方块]'
minimumblockstitle: "[最少所需的方块]"
nootherblocks: 没有其它必要的方块了.
missing: 温室缺失了
event:
@ -142,8 +134,8 @@ reload:
admininfo:
error: 查看温室信息功能仅能在游戏中使用
error2: 进入一个温室才能查看其信息.
flags: '[Greenhouse Flags]'
flags: "[Greenhouse Flags]"
news:
headline: '[温室新闻]'
headline: "[温室新闻]"
controlpanel:
title: '&A温室'
title: "&A温室"

View File

@ -96,6 +96,8 @@ public class BiomeRecipeTest {
when(gh.getCeilingHeight()).thenReturn(120);
bb = new BoundingBox(10, 100, 10, 20, 120, 20);
when(gh.getBoundingBox()).thenReturn(bb);
BoundingBox ibb = bb.clone().expand(-1);
when(gh.getInternalBoundingBox()).thenReturn(ibb);
when(gh.getWorld()).thenReturn(world);
when(gh.contains(any())).thenReturn(true);
when(world.getBlockAt(anyInt(), anyInt(), anyInt())).thenReturn(block);
@ -765,8 +767,8 @@ public class BiomeRecipeTest {
*/
@Test
public void testSetType() {
br.setType(Biome.BADLANDS_PLATEAU);
assertEquals(Biome.BADLANDS_PLATEAU, br.getBiome());
br.setType(Biome.BADLANDS);
assertEquals(Biome.BADLANDS, br.getBiome());
}
/**

View File

@ -296,7 +296,7 @@ public class GreenhouseEventsTest {
ghe.onIceBreak(e);
verify(block).setType(Material.AIR);
assertTrue(e.isCancelled());
verify(world).playSound(any(), eq(Sound.BLOCK_GLASS_BREAK), eq(1F), eq(1F));
verify(world).playSound(any(Location.class), eq(Sound.BLOCK_GLASS_BREAK), eq(1F), eq(1F));
}