diff --git a/pom.xml b/pom.xml
index d5345a6..772fa0b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,31 +41,27 @@
-
- codemc-snapshots
- https://repo.codemc.org/repository/maven-snapshots
-
- codemc-releases
- https://repo.codemc.org/repository/maven-releases
+ bentoboxworld
+ https://repo.codemc.org/repository/bentoboxworld/
UTF-8
UTF-8
- 17
+ 21
2.0.9
- 1.21.1-R0.1-SNAPSHOT
- 2.5.1-SNAPSHOT
+ 1.21.3-R0.1-SNAPSHOT
+ 2.7.1-SNAPSHOT
${build.version}-SNAPSHOT
-LOCAL
- 2.7.2
+ 2.8.0
BentoBoxWorld_Boxed
bentobox-world
@@ -119,6 +115,10 @@
spigot-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots
+
+ bentoboxworld
+ https://repo.codemc.org/repository/bentoboxworld/
+
codemc
https://repo.codemc.org/repository/maven-snapshots/
@@ -185,12 +185,6 @@
${spigot.version}
provided
-
- org.spigotmc.....
- spigot
- 1.21-R0.1-SNAPSHOT
- provided
-
org.spigotmc......
spigot
diff --git a/src/main/java/world/bentobox/boxed/Boxed.java b/src/main/java/world/bentobox/boxed/Boxed.java
index 8255fb5..49e7690 100644
--- a/src/main/java/world/bentobox/boxed/Boxed.java
+++ b/src/main/java/world/bentobox/boxed/Boxed.java
@@ -131,6 +131,11 @@ public class Boxed extends GameModeAddon {
if (this.getPlugin().getAddonsManager().getAddonByName("InvSwitcher").isEmpty()) {
this.logWarning("Boxed normally requires the InvSwitcher addon for per-world Advancements.");
}
+ if (Bukkit.getPluginManager().isPluginEnabled("MultiverseCore")) {
+ this.logError("Boxed is not compatible with Multiverse! Disabling!");
+ this.setState(State.DISABLED);
+ return;
+ }
// Advancements manager
advManager = new AdvancementsManager(this);
// Make flags only applicable to this game mode
diff --git a/src/main/java/world/bentobox/boxed/generators/biomes/AbstractCopyBiomeProvider.java b/src/main/java/world/bentobox/boxed/generators/biomes/AbstractCopyBiomeProvider.java
index e7a0167..2742599 100644
--- a/src/main/java/world/bentobox/boxed/generators/biomes/AbstractCopyBiomeProvider.java
+++ b/src/main/java/world/bentobox/boxed/generators/biomes/AbstractCopyBiomeProvider.java
@@ -1,8 +1,8 @@
package world.bentobox.boxed.generators.biomes;
-import java.util.Arrays;
import java.util.List;
+import org.bukkit.Registry;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import org.bukkit.generator.BiomeProvider;
@@ -10,8 +10,6 @@ import org.bukkit.generator.WorldInfo;
import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.Nullable;
-import com.google.common.base.Enums;
-
import world.bentobox.bentobox.BentoBox;
import world.bentobox.boxed.Boxed;
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator;
@@ -56,7 +54,7 @@ public abstract class AbstractCopyBiomeProvider extends BiomeProvider {
@Override
public List getBiomes(WorldInfo worldInfo) {
// Return all of them for now!
- return Arrays.stream(Biome.values()).filter(b -> !b.equals(Biome.CUSTOM)).filter(b -> !b.equals(Enums.getIfPresent(Biome.class, "CHERRY_GROVE").orNull())).toList();
+ return Registry.BIOME.stream().filter(b -> !b.equals(Biome.CUSTOM)).toList();
}
}
diff --git a/src/main/java/world/bentobox/boxed/generators/biomes/AbstractSeedBiomeProvider.java b/src/main/java/world/bentobox/boxed/generators/biomes/AbstractSeedBiomeProvider.java
index ac10713..5ed1f8f 100644
--- a/src/main/java/world/bentobox/boxed/generators/biomes/AbstractSeedBiomeProvider.java
+++ b/src/main/java/world/bentobox/boxed/generators/biomes/AbstractSeedBiomeProvider.java
@@ -1,7 +1,6 @@
package world.bentobox.boxed.generators.biomes;
import java.io.File;
-import java.util.Arrays;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
@@ -11,6 +10,7 @@ import java.util.Map.Entry;
import java.util.SortedMap;
import java.util.TreeMap;
+import org.bukkit.Registry;
import org.bukkit.World.Environment;
import org.bukkit.block.Biome;
import org.bukkit.block.BlockFace;
@@ -21,8 +21,6 @@ import org.bukkit.generator.WorldInfo;
import org.bukkit.util.Vector;
import org.eclipse.jdt.annotation.NonNull;
-import com.google.common.base.Enums;
-
import world.bentobox.boxed.Boxed;
/**
@@ -1129,7 +1127,7 @@ public abstract class AbstractSeedBiomeProvider extends BiomeProvider {
}
public static double convertToY(double x) {
- x = Math.max(-1, Math.min(1, x)); // Clamp value
+ x = Math.clamp(x, -1, 1);
if (x >= -1 && x < -0.5) {
return 2 * x + 1;
} else if (x >= -0.5 && x < 0) {
@@ -1196,7 +1194,7 @@ public abstract class AbstractSeedBiomeProvider extends BiomeProvider {
@Override
public List getBiomes(WorldInfo worldInfo) {
// Return all of them for now!
- return Arrays.stream(Biome.values()).filter(b -> !b.equals(Biome.CUSTOM)).toList();
+ return Registry.BIOME.stream().filter(b -> !b.equals(Biome.CUSTOM)).toList();
}
/**
@@ -1215,7 +1213,7 @@ public abstract class AbstractSeedBiomeProvider extends BiomeProvider {
if (split.length == 2) {
try {
double d = Double.parseDouble(split[0]);
- Biome biome = Enums.getIfPresent(Biome.class, split[1].toUpperCase(Locale.ENGLISH)).orNull();
+ Biome biome = Biome.valueOf(split[1].toUpperCase(Locale.ENGLISH));
if (biome == null) {
addon.logError(split[1].toUpperCase(Locale.ENGLISH) + " is an unknown biome on this server.");
result.put(d, Biome.CUSTOM);
diff --git a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java
index bffcfe8..9a99a49 100644
--- a/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java
+++ b/src/main/java/world/bentobox/boxed/listeners/NewAreaListener.java
@@ -358,6 +358,9 @@ public class NewAreaListener implements Listener {
}
private void place(ConfigurationSection section, Location center, Environment env) {
+ if (section == null) {
+ return;
+ }
World world = env.equals(Environment.NORMAL) ? addon.getOverWorld() : addon.getNetherWorld();
if (world == null) {
return;
diff --git a/src/main/java/world/bentobox/boxed/nms/v1_21_3_R0_1_SNAPSHOT/GetMetaData.java b/src/main/java/world/bentobox/boxed/nms/v1_21_3_R0_1_SNAPSHOT/GetMetaData.java
new file mode 100644
index 0000000..0cf1131
--- /dev/null
+++ b/src/main/java/world/bentobox/boxed/nms/v1_21_3_R0_1_SNAPSHOT/GetMetaData.java
@@ -0,0 +1,5 @@
+package world.bentobox.boxed.nms.v1_21_3_R0_1_SNAPSHOT;
+
+public class GetMetaData extends world.bentobox.boxed.nms.v1_21_R0_1_SNAPSHOT.GetMetaData {
+ // Identical to 1.21
+}
\ No newline at end of file
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index 3b7a42a..d048714 100755
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -1,7 +1,7 @@
name: Boxed
main: world.bentobox.boxed.Boxed
version: ${version}${build.number}
-api-version: 2.5.1
+api-version: 2.7.1
metrics: true
icon: "COMPOSTER"
repository: "BentoBoxWorld/Boxed"
diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml
new file mode 100644
index 0000000..91db6c4
--- /dev/null
+++ b/src/main/resources/locales/tr.yml
@@ -0,0 +1,1307 @@
+#
+# 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 #
+boxed:
+ completed: '&a [name] tamamlandı!'
+ size-changed: '&a Ada boyutu [number] artırıldı!'
+ size-decreased: '&c Ada boyutu [number] azaltıldı!'
+ user-completed: '&a [name], [description] gelişimini tamamladı!'
+ adv-disallowed: '&c Gelişimleri yalnızda kendi adanızda tamamlayabilirsiniz. [description]
+ iptal edildi.'
+ general:
+ errors:
+ no-island: '&c Adan yok!'
+ player-has-island: '&c Oyuncunun zaten bir adası var!'
+ player-has-no-island: '&c Oyuncunun bir adası yok!'
+ already-have-island: '&c Zaten bir adan var!'
+ no-safe-location: '&c Adana güvenli bir yer bulunamadı!'
+ not-owner: '&c Takım lideri değilsin!'
+ no-teleport-outside: '&c Adanın dışına ışınlanamazsın'
+ commands:
+ boxed:
+ help:
+ description: Bir Captive oyunu başlat ya da adana ışınlan
+ go:
+ parameters: '[home number]'
+ sethome:
+ parameters: '[home number]'
+ boxadmin:
+ place:
+ description: Bir alan yapısı yerleştirin
+ parameters:
+ use-integers: '&c Koordinatlar tam sayı olmalıdır'
+ wrong-world: '&c Bu komut yalnızca adalar dünyasında kullanılabilir'
+ unknown-structure: '&c Yerleştirilemiyor: Bilinmeyen yapı'
+ unknown-rotation: '&c Yerleştirilemiyor: Bilinmeyen yön tipi'
+ unknown-mirror: '&c Yerleştirilemiyor: Bilinmeyen yansıma türü'
+ saved: '&a structures.yml dosyasına yerleştirildi ve kaydedildi'
+ failed: '&c structures.yml dosyasına kaydedilemedi. Hata için konsolu kontrol edin'
+ unknown: '&c Bilinmeyen parametre: [label]'
+ island:
+ go:
+ parameters: '[home number]'
+ description: adana ışınlan
+ teleport: '&a Adana ışınlanıyorsun.'
+ teleported: '&e #[number] &a numaralı eve ışınlandın.'
+ help:
+ description: ana ada komutu
+ create:
+ description: isteğe bağlı şablon kullanarak bir ada oluşturun (izin gerektirir)
+ parameters:
+ too-many-islands: '&c Bu dünyada çok fazla ada var: Oluşturulabilmesi
+ için yeterli alan yok.'
+ cannot-create-island: '&c Zamanında bir yer bulunamadı, lütfen tekrar deneyin...'
+ unable-create-island: '&c Adanız oluşturulamadı, lütfen bir
+ yönetici ile iletişime geçin.'
+ creating-island: '&a Adanız için bir yer bulunuyor..'
+ pasting:
+ estimated-time: '&a Tahmini süre: &b [number] &a saniye.'
+ blocks: '&a Blok blok inşa ediliyor: Toplam &b [number] &a blok ..'
+ entities: '&a Varlıklar dolduruluyor: Toplam &b [number] &a varlık...'
+ done: '&a Bitti! Adanız hazır ve sizi bekliyor'
+ pick: '&2 Bir ada seç'
+ unknown-blueprint: '&c Şablon henüz yüklenmedi.'
+ on-first-login: '&a Hoş geldin! Adanı birkaç saniye içinde hazırlamaya başlayacağız.'
+ you-can-teleport-to-your-island: '&a istediğin zaman adana
+ ışınlanabilirsin.'
+ info:
+ description: adan ya da başka bir oyuncunun adası hakkında bilgileri görüntüle
+ parameters:
+ near:
+ description: çevrendeki komşu adaların isimlerini görüntüle
+ parameters: ''
+ the-following-islands: '&a Çevrendeki adalar:'
+ syntax: '&6 [direction]: &a [name]'
+ north: Kuzey
+ south: Güney
+ east: Doğu
+ west: Batı
+ no-neighbors: '&c Çevrende herhangi bir komşu ada görünmüyor!'
+ reset:
+ description: adanı yeniden başlat ve eskisini kaldır
+ parameters:
+ none-left: '&c Sıfırlama hakkın kalmadı!'
+ resets-left: '&b [number] &c adet sıfırlama hakkın kaldı'
+ confirmation: |-
+ &c Bunu yapmak istediğine emin misin?
+ &c Tüm ada üyeleri adadan atılacak, daha sonra onları yeniden davet etmen gerekecek.
+ &c Bunun geri dönüşü yok. Adanı sildikten sonra, adanı geri almanın bir yolu &l olmayacak.
+ kicked-from-island: '&c adadan atıldın. Ada sahibi
+ adayı sıfırlıyor.'
+ sethome:
+ description: ev ışınlanma noktanı ayarla
+ must-be-on-your-island: '&c Ada noktası belirleyebilmek için adanda olmalısın!'
+ num-homes: '&c Evler 1 ile [number] arasında olmalıdır.'
+ home-set: '&6 Ada eviniz mevcut konumunuza ayarlandı.'
+ nether:
+ not-allowed: '&c Nether içinde ışınlanma noktası belirlemenize izin verilmiyor.'
+ confirmation: '&c Nether içinde ışınlanma noktası belirlemek istediğinden emin misin?'
+ the-end:
+ not-allowed: '&c End içinde ışınlanma noktası belirlemenize izin verilmiyor.'
+ confirmation: '&c End içinde ışınlanma noktası belirlemek istediğinden emin misin?'
+ parameters: '[home number]'
+ setname:
+ description: adan için bir isim belirle
+ name-too-short: '&c Çok kısa. En az [number] karakter olmalıdır.'
+ name-too-long: '&c Çok uzun. En fazla [number] karakter olmalıdır.'
+ name-already-exists: '&c Bu isimde zaten bir ada mevcut!'
+ parameters:
+ success: '&a &a Ada ismin &b [name] &a olarak değiştirildi.'
+ resetname:
+ description: ada ismini sıfırla
+ success: '&a Adanın ismi sıfırlandı.'
+ team:
+ description: ekibini yönet
+ coop:
+ description: adandaki bir oyuncuyu işçi yap
+ parameters:
+ cannot-coop-yourself: '&c Kendini işçi yapamazsın!'
+ already-has-rank: '&c Oyuncu zaten bir rütbeye sahip!'
+ you-are-a-coop-member: '&b [name] &a seni işçi olarak belirledi.'
+ success: '&b [name] &a işçi olarak belirlendi.'
+ name-has-invited-you: '&a [name] seni adasına işçi olarak
+ davet etti.'
+ uncoop:
+ description: bir oyuncunun işçi yetkisini iptal et
+ parameters:
+ cannot-uncoop-yourself: '&c Kendini işçilikten alamazsın!'
+ cannot-uncoop-member: '&c Bir ekip üyesini işçilikten çıkaramazsın!'
+ player-not-cooped: '&c Oyuncunun işçi değil!'
+ you-are-no-longer-a-coop-member: '&c Artık [name] oyuncusunun adasında
+ işçi değilsin.'
+ all-members-logged-off: '&c Tüm ada üyeleri oyundan çıktı. Bu nedenle artık
+ [name] oyuncusunun adasında işçi değilsin.'
+ success: '&b [name] &a artık adanda işçi değil.'
+ is-full: '&c Başka bir işçi daha ekleyemezsin.'
+ trust:
+ description: adanızda bir oyuncuya trust yetkisi verin
+ parameters:
+ trust-in-yourself: '&c Kendine güven!'
+ name-has-invited-you: '&a [name] seni adasına trust vererek
+ davet etti.'
+ player-already-trusted: '&c Oyuncuya zaten trust yetkisi verildi!'
+ you-are-trusted: '&b [name] &a sana trust yetkisi verdi!'
+ success: '&b [name] &a isimli oyuncuya trust yetkisi verildi.'
+ is-full: '&c Başka bir trust yetkisi daha veremezsin.'
+ invite:
+ description: bir oyuncuyu adana katılması için davet et
+ invitation-sent: '&a Davet talebi &b[name]&a isimli oyuncuya gönderildi.'
+ removing-invite: '&c Davet talebi iptal edildi.'
+ name-has-invited-you: '&a [name] seni adasına davet etti.'
+ to-accept-or-reject: '&a /[label] yazarak kabul edebilir, /[label]
+ yazarak daveti reddedebilirsin'
+ you-will-lose-your-island: '&c UYARI! Daveti kabul ederseniz adanız silinir!'
+ errors:
+ cannot-invite-self: '&c Kendini davet edemezsin!'
+ cooldown: '&c Oyuncuyu [number] saniye boyunca davet edemezsin.'
+ island-is-full: '&c Adan dolu, başak bir oyunu daha davet edemezsin.'
+ none-invited-you: '&c Gelen herhangi bir ada daveti bulunamadı :c.'
+ you-already-are-in-team: '&c Zaten bir takımdasın!'
+ already-on-team: '&c Oyuncu zaten bir takımda!'
+ invalid-invite: '&c Davet artık geçerli değil.'
+ you-have-already-invited: '&c Oyuncuyu zaten davet ettin!'
+ parameters:
+ you-can-invite: '&a [number] oyuncu daha davet edebilirsin.'
+ accept:
+ description: daveti kabul et
+ you-joined-island: '&a Bir adaya katıldın! &b/[label] team &a yazarak
+ diğer üyeleri görebilirsin.'
+ name-joined-your-island: '&a [name] adana katıldı!'
+ confirmation: |-
+ &c Daveti kabul etmek istediğinden emin misin?
+ &c&l Kabul edersen adan &n SİLİNECEK &r &c&l !
+ reject:
+ description: daveti reddet
+ you-rejected-invite: '&a Daveti reddettin.'
+ name-rejected-your-invite: '&c [name] ada davetini reddetti!'
+ cancel:
+ description: bekleyen ada davetlerini reddet
+ leave:
+ cannot-leave: '&c Sahipler ayrılamaz! Önce üye olun ya da diğer üyeleri
+ üyelikten çıkarın.'
+ description: adadan ayrıl
+ left-your-island: '&c [name] &c adandan ayrıldı'
+ success: '&a Adadan ayrıldın'
+ kick:
+ description: adadan bir üyeyi çıkar
+ parameters:
+ owner-kicked: '&c Ada sahibi seni adasından çıkardı!'
+ cannot-kick: '&c Kendini adadan atamazsın!'
+ success: '&b [name] &a adandan atıldı.'
+ demote:
+ description: adandaki bir oyuncunun yetkisini düşür
+ parameters:
+ errors:
+ cant-demote-yourself: '&c Kendi yetkini düşüremezsin!'
+ failure: '&c Oyuncunun yetkisi daha fazla düşürülemez!'
+ success: '&a [name] isimli oyuncu [rank] yetkisine düşürüldü'
+ promote:
+ description: adandaki bir oyuncunun yetkisini yükselt
+ parameters:
+ failure: '&c Oyuncunun yetkisi daha fazla artırılamaz!'
+ success: '&a [name] isimli oyuncu [rank] yetkisine yükseltildi'
+ setowner:
+ description: ada sahipliğini bir üyeye devret
+ errors:
+ cant-transfer-to-yourself: '&c Adayı kendine devredemezsin!
+ &7 (&o Aslında bu yapılabilir... Ama biz bunu istemiyoruz. Çünkü
+ faydası yok.&r &7 )'
+ target-is-not-member: '&c Oyuncu adanın bir üyesi değil!'
+ name-is-the-owner: '&a [name] artık adanın sahibi!'
+ parameters:
+ you-are-the-owner: '&a Artık adanın sahibi sensin!'
+ ban:
+ description: adadan bir oyuncuyu yasakla
+ parameters:
+ cannot-ban-yourself: '&c Kendini yasaklayamazsın!'
+ cannot-ban: '&c Oyuncu yasaklanamaz.'
+ cannot-ban-member: '&c Önce oyuncunun üyeliğini almalısın, ardından yasaklayabilirsin.'
+ cannot-ban-more-players: '&c Yasaklama sınırına ulaştın. Artık daha fazla
+ oyuncu yasaklayamazsın.'
+ player-already-banned: '&c Oyuncu zaten yasaklandı.'
+ player-banned: '&b [name]&c adadan yasaklandı.'
+ owner-banned-you: '&b [name]&c seni adasından yasakladı!'
+ you-are-banned: '&b Bu adadan yasaklandın!'
+ unban:
+ description: adadan bir oyuncunun yasağını kaldır
+ parameters:
+ cannot-unban-yourself: '&c Kendi yasaklamanı kaldıramazsın!'
+ player-not-banned: '&c Oyuncu yasaklı değil.'
+ player-unbanned: '&b [name]&a isimli oyuncunun yasaklaması kaldırıldı.'
+ you-are-unbanned: '&b [name]&a adasındaki yasaklamanı kaldırdı!'
+ banlist:
+ description: yasaklı oyuncuları görüntüle
+ noone: '&a Adada yasaklı oyuncu yok.'
+ the-following: '&b Yasaklı oyuncular:'
+ names: '&c [line]'
+ you-can-ban: '&En fazla &e [number] &b oyuncu daha yasaklayabilirsin.'
+ settings:
+ description: ada ayarlarını görüntüle
+ language:
+ description: dil seç
+ parameters: '[language]'
+ not-available: '&c Bu dil kullanılamıyor.'
+ already-selected: '&c Zaten bu dili kullanıyorsun.'
+ expel:
+ description: adandan bir misafiri at
+ parameters:
+ cannot-expel-yourself: '&c Kendini adadan atamazsın!'
+ cannot-expel: '&c Oyuncu adadan atılamaz.'
+ cannot-expel-member: '&c Takım üyeleri adadan atılamaz!'
+ not-on-island: '&c Oyuncu adanda değil!'
+ player-expelled-you: '&b [name]&c sizi adasından attı!'
+ success: '&b [name] &a adlı oyuncu adadan atıldı.'
+ admin:
+ team:
+ add:
+ name-has-island: '&c [name] adlı oyuncunun bir adası var. Önce kayıtları kaldırın ya da silin!'
+ setowner:
+ description: ada sahipliğini oyuncuya devret
+ already-owner: '&c Oyuncu zaten adanın sahibi!'
+ range:
+ description: Yönetici ada limiti menzili komutu
+ display:
+ description: Ada limiti menzili göstergelerini göster/gizle
+ hint: |-
+ &c Kırmızı bariyerler &f geçerli koruma menzil sınırını gösterir.
+ &7 Gri parçacıklar &f maksimum limiti gösterir.
+ &a Yeşil parçacıklar &f koruma menzili bundan farklıysa varsayılan koruma menzilini gösterir.
+ set:
+ description: Ada koruma menzilini ayarla
+ reset:
+ description: Adanın varsayılan koruma menzilini sıfırla
+ register:
+ parameters:
+ description: Oyuncuyu içinde bulunduğun sahipsiz adaya kaydettir
+ registered-island: '&a Oyuncu [xyz] konumundaki adaya kaydedildi.'
+ already-owned: '&c Alan zaten başka bir oyuncuya ait!'
+ no-island-here: '&c Burada bir oyuncu adası yok. Yeni bir tane yapmak için onayla.'
+ in-deletion: '&c Bu alan şu anda yeniden oluşturuluyor. Daha sonra tekrar dene.'
+ unregister:
+ description: oyuncunun ada sahipliğini kaldır ama adayı silmeden olduğu gibi bırak
+ unregistered-island: '&a Oyuncunun [xyz] konumundaki adadan kaydı silindi.'
+ info:
+ description: bulunduğunuz yer veya oyuncu hakkında bilgi al
+ no-island: '&c Şu anda bir adada kayıtlı değilsin...'
+ island-location: 'Alan konumu: [xyz]'
+ island-coords: 'Alan koordinatları: [xz1] - [xz2]'
+ is-spawn: Alan bir spawn adasıdır
+ setrange:
+ description: oyuncunun ada sınırı menzilini ayarla
+ range-updated: Ada sınırı menzili [number] olarak güncellendi
+ tp:
+ description: bir oyuncunun adasına ışınlan
+ getrank:
+ description: bir oyuncunun bulunduğu adadaki yetkisini al
+ rank-is: '&a Oyuncunun adadaki yetkisi: [rank]'
+ setrank:
+ description: bir oyuncunun bulunduğu adadaki yetkisini ayarla
+ setspawn:
+ description: bu dünya için adanın spawn noktasını ayarla
+ already-spawn: '&c Adanın zaten bir spawn noktası var!'
+ no-island-here: '&c Burada kayıtlı bir ada yok.'
+ confirmation: '&c Bu adayı bu dünyanın spawn noktası olarak belirlemek istediğinden
+ emin misin?'
+ delete:
+ description: oyuncuyu sil ve adasını yeniden oluştur
+ deleted-island: '&e [xyz] &a konumundaki alan başarıyla yeniden oluşturuldu.'
+ protection:
+ flags:
+ ALLOW_MOVE_BOX:
+ name: Adayı taşıma
+ description: |-
+ &a Oyuncuların ender incisi
+ &a atarak adalarını
+ &a taşımalarına izin verir
+ ELYTRA:
+ description: Kullanımı değiştir
+ ENDERMAN_GRIEFING:
+ description: |-
+ &a Endermen herhangi bir
+ &a bloğu alabilir
+ ENTER_EXIT_MESSAGES:
+ description: Giriş ve çıkış mesajlarını görüntüleme
+ island: '[name] adlı oyuncunun adası korumalı'
+ name: Giriş/Çıkış mesajları
+ now-entering: '&b [name] &a adlı oyuncunun adasına gidiliyor.'
+ now-entering-your-island: '&a Adana gidiyorsun.'
+ now-leaving: '&b [name] &a adlı oyuncunun adasından çıkıyorsun.'
+ now-leaving-your-island: '&a Adandan çıkıyorsun.'
+ GEO_LIMIT_MOBS:
+ description: |-
+ &a Korunan oyuncu
+ &a alanının dışına çıkan
+ &a mobları kaldır
+ name: '&e Mobları oyuncu ada sınırı ile sınırla'
+ ISLAND_RESPAWN:
+ description: |-
+ &a Oyuncular adalarında
+ &a yeniden doğabilir
+ name: Adada yeniden doğma
+ LOCK:
+ name: Adayı kilitle
+ OFFLINE_REDSTONE:
+ description: "&a Devre dışı bırakıldığında, kızıltaş ürünleri \n&a ada üyeleri oyundan çıkınca\n&a\
+ \ çalışmayacak.\n&a Lag'ı azaltmaya yardımcı olabilir. "
+ PISTON_PUSH:
+ description: |-
+ &a Pistonların oyuncuları ada dışına
+ &a çıkarmasına izin verir
+ PVP_OVERWORLD:
+ description: |-
+ &c Korumalı adalarda PvP'yi
+ &c açma/kapatma
+ REMOVE_MOBS:
+ description: |-
+ &a Bir adaya ışınlanırken
+ &a mobları kaldır
+ PREVENT_TELEPORT_WHEN_FALLING:
+ description: |-
+ &a Oyuncuların düşerken
+ &a ışınlanmasını önle
+ hint: '&c Düşerken ışınlanamazsın!'
+ locked: '&c Bu ada kilitli!'
+ protected: '&c Alan korumalı: [description]'
+ panel:
+ PROTECTION:
+ title: '&6 Koruma'
+ description: |-
+ &a Bu adanın
+ &a koruma ayarları
+ SETTING:
+ description: |-
+ &a Bu adanın
+ &a genel ayarları
+ advancements:
+ minecraft:adventure/adventuring_time: Macera Zamanı
+ minecraft:adventure/arbalistic: ''
+ minecraft:adventure/bullseye: Tam İsabet
+ minecraft:adventure/hero_of_the_village: Köyün Kahramanı
+ minecraft:adventure/honey_block_slide: Yapışkan Durum
+ minecraft:adventure/kill_a_mob: Canavar Avcısı
+ minecraft:adventure/kill_all_mobs: Canavarlar Avlandı
+ minecraft:adventure/ol_betsy: Yaşlı Betsy
+ minecraft:adventure/root: Macera, keşif ve savaş
+ minecraft:adventure/shoot_arrow: Nişan Al
+ minecraft:adventure/sleep_in_bed: Tatlı Rüyalar
+ minecraft:adventure/sniper_duel: Keskin Nişancı Düellosu
+ minecraft:adventure/summon_iron_golem: Kiralık Yardımcı
+ minecraft:adventure/throw_trident: Kullan-At Bir Şaka
+ minecraft:adventure/totem_of_undying: Öleyazmak
+ minecraft:adventure/trade: Anlaştık!
+ minecraft:adventure/two_birds_one_arrow: Bir Okla İki Kuş
+ minecraft:adventure/very_very_frightening: Çok ama Çok korkutucu
+ minecraft:adventure/voluntary_exile: Gönüllü Sürgün
+ minecraft:adventure/whos_the_pillager_now: Kimmiş asıl yağmacı?
+ minecraft:end/dragon_breath: Naneye İhtiyacın Var
+ minecraft:end/dragon_egg: Yeni Nesil
+ minecraft:end/elytra: İstikbal Göklerdedir
+ minecraft:end/enter_end_gateway: Uzak Kaçış
+ minecraft:end/find_end_city: Oyunun Sonundaki Şehir
+ minecraft:end/kill_dragon: End'i Özgür Bırak
+ minecraft:end/levitate: Buradan Manzara Harika
+ minecraft:end/respawn_dragon: Son... Yine...
+ minecraft:end/root: Ya da başlangıç mı?
+ minecraft:husbandry/balanced_diet: Dengeli Beslenme
+ minecraft:husbandry/bred_all_animals: İkişer İkişer
+ minecraft:husbandry/breed_an_animal: Nüfus Artışı
+ minecraft:husbandry/complete_catalogue: Tamamlanmış Bir Katalog
+ minecraft:husbandry/fishy_business: Haydi Rastgele
+ minecraft:husbandry/obtain_netherite_hoe: Ciddi Düşkünlük
+ minecraft:husbandry/plant_seed: Tohumlu Bir Yer
+ minecraft:husbandry/root: Dünya arkadaşlarla ve yiyeceklerle dolu
+ minecraft:husbandry/safely_harvest_honey: Arımıza Hoş Geldin
+ minecraft:husbandry/silk_touch_nest: Kovanamaca
+ minecraft:husbandry/tactical_fishing: Usta Balıkçı
+ minecraft:husbandry/tame_an_animal: En İyi Arkadaş
+ minecraft:nether/all_effects: Nereye Geldik Bir Anda
+ minecraft:nether/all_potions: Öfkeli Bir Kokteyl
+ minecraft:nether/brew_potion: Yerel Birahane
+ minecraft:nether/charge_respawn_anchor: Pek De "Dokuz" Can Değil
+ minecraft:nether/create_beacon: Feneri Eve Getir
+ minecraft:nether/create_full_beacon: Feneratör
+ minecraft:nether/distract_piglin: Işıl Işıl Her Yer
+ minecraft:nether/explore_nether: Sıcak Turistik Yerler
+ minecraft:nether/fast_travel: Altuzay Kabarcığı
+ minecraft:nether/find_bastion: Hey Gidi Günler
+ minecraft:nether/find_fortress: Berbat Bir Kale
+ minecraft:nether/get_wither_skull: Korkunç ve Ürkütücü İskelet
+ minecraft:nether/loot_bastion: Savaş Domuzları
+ minecraft:nether/netherite_armor: Kalıntılarla Sar Beni
+ minecraft:nether/obtain_ancient_debris: Derinlerde Saklı
+ minecraft:nether/obtain_blaze_rod: Alevlerin İçine
+ minecraft:nether/obtain_crying_obsidian: Kim Soğan Kesiyor?
+ minecraft:nether/return_to_sender: Gönderene İade
+ minecraft:nether/ride_strider: Bu Teknenin Ayakları Var
+ minecraft:nether/root: Yazlık kıyafet getirin
+ minecraft:nether/summon_wither: Witherlı Tepeler
+ minecraft:nether/uneasy_alliance: Huzursuz İttifak
+ minecraft:nether/use_lodestone: Beni Evime İt, Ey Manyetit
+ minecraft:recipes/brewing/blaze_powder: ''
+ minecraft:recipes/brewing/brewing_stand: ''
+ minecraft:recipes/brewing/cauldron: ''
+ minecraft:recipes/brewing/fermented_spider_eye: ''
+ minecraft:recipes/brewing/glass_bottle: ''
+ minecraft:recipes/brewing/glistering_melon_slice: ''
+ minecraft:recipes/brewing/golden_carrot: ''
+ minecraft:recipes/brewing/magma_cream: ''
+ minecraft:recipes/building_blocks/acacia_planks: ''
+ minecraft:recipes/building_blocks/acacia_slab: ''
+ minecraft:recipes/building_blocks/acacia_stairs: ''
+ minecraft:recipes/building_blocks/acacia_wood: ''
+ minecraft:recipes/building_blocks/andesite: ''
+ minecraft:recipes/building_blocks/andesite_slab: ''
+ minecraft:recipes/building_blocks/andesite_slab_from_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/andesite_stairs: ''
+ minecraft:recipes/building_blocks/andesite_stairs_from_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/birch_planks: ''
+ minecraft:recipes/building_blocks/birch_slab: ''
+ minecraft:recipes/building_blocks/birch_stairs: ''
+ minecraft:recipes/building_blocks/birch_wood: ''
+ minecraft:recipes/building_blocks/black_concrete_powder: ''
+ minecraft:recipes/building_blocks/black_stained_glass: ''
+ minecraft:recipes/building_blocks/black_terracotta: ''
+ minecraft:recipes/building_blocks/black_wool: ''
+ minecraft:recipes/building_blocks/blackstone_slab: ''
+ minecraft:recipes/building_blocks/blackstone_slab_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/blackstone_stairs: ''
+ minecraft:recipes/building_blocks/blackstone_stairs_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/blue_concrete_powder: ''
+ minecraft:recipes/building_blocks/blue_ice: ''
+ minecraft:recipes/building_blocks/blue_stained_glass: ''
+ minecraft:recipes/building_blocks/blue_terracotta: ''
+ minecraft:recipes/building_blocks/blue_wool: ''
+ minecraft:recipes/building_blocks/bone_block: ''
+ minecraft:recipes/building_blocks/bookshelf: ''
+ minecraft:recipes/building_blocks/brick_slab: ''
+ minecraft:recipes/building_blocks/brick_slab_from_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/brick_stairs: ''
+ minecraft:recipes/building_blocks/brick_stairs_from_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/bricks: ''
+ minecraft:recipes/building_blocks/brown_concrete_powder: ''
+ minecraft:recipes/building_blocks/brown_stained_glass: ''
+ minecraft:recipes/building_blocks/brown_terracotta: ''
+ minecraft:recipes/building_blocks/brown_wool: ''
+ minecraft:recipes/building_blocks/chiseled_nether_bricks: ''
+ minecraft:recipes/building_blocks/chiseled_nether_bricks_from_nether_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_polished_blackstone: ''
+ minecraft:recipes/building_blocks/chiseled_polished_blackstone_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_polished_blackstone_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_quartz_block: ''
+ minecraft:recipes/building_blocks/chiseled_quartz_block_from_quartz_block_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_red_sandstone: ''
+ minecraft:recipes/building_blocks/chiseled_red_sandstone_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_sandstone: ''
+ minecraft:recipes/building_blocks/chiseled_sandstone_from_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_stone_bricks: ''
+ minecraft:recipes/building_blocks/chiseled_stone_bricks_from_stone_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/chiseled_stone_bricks_stone_from_stonecutting: ''
+ minecraft:recipes/building_blocks/clay: ''
+ minecraft:recipes/building_blocks/coal_block: ''
+ minecraft:recipes/building_blocks/coarse_dirt: ''
+ minecraft:recipes/building_blocks/cobblestone_slab: ''
+ minecraft:recipes/building_blocks/cobblestone_slab_from_cobblestone_stonecutting: ''
+ minecraft:recipes/building_blocks/cobblestone_stairs: ''
+ minecraft:recipes/building_blocks/cobblestone_stairs_from_cobblestone_stonecutting: ''
+ minecraft:recipes/building_blocks/cracked_nether_bricks: ''
+ minecraft:recipes/building_blocks/cracked_polished_blackstone_bricks: ''
+ minecraft:recipes/building_blocks/cracked_stone_bricks: ''
+ minecraft:recipes/building_blocks/crimson_hyphae: ''
+ minecraft:recipes/building_blocks/crimson_planks: ''
+ minecraft:recipes/building_blocks/crimson_slab: ''
+ minecraft:recipes/building_blocks/crimson_stairs: ''
+ minecraft:recipes/building_blocks/cut_red_sandstone: ''
+ minecraft:recipes/building_blocks/cut_red_sandstone_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cut_red_sandstone_slab: ''
+ minecraft:recipes/building_blocks/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cut_red_sandstone_slab_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cut_sandstone: ''
+ minecraft:recipes/building_blocks/cut_sandstone_from_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cut_sandstone_slab: ''
+ minecraft:recipes/building_blocks/cut_sandstone_slab_from_cut_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cut_sandstone_slab_from_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/cyan_concrete_powder: ''
+ minecraft:recipes/building_blocks/cyan_stained_glass: ''
+ minecraft:recipes/building_blocks/cyan_terracotta: ''
+ minecraft:recipes/building_blocks/cyan_wool: ''
+ minecraft:recipes/building_blocks/dark_oak_planks: ''
+ minecraft:recipes/building_blocks/dark_oak_slab: ''
+ minecraft:recipes/building_blocks/dark_oak_stairs: ''
+ minecraft:recipes/building_blocks/dark_oak_wood: ''
+ minecraft:recipes/building_blocks/dark_prismarine: ''
+ minecraft:recipes/building_blocks/dark_prismarine_slab: ''
+ minecraft:recipes/building_blocks/dark_prismarine_slab_from_dark_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/dark_prismarine_stairs: ''
+ minecraft:recipes/building_blocks/dark_prismarine_stairs_from_dark_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/diamond_block: ''
+ minecraft:recipes/building_blocks/diorite: ''
+ minecraft:recipes/building_blocks/diorite_slab: ''
+ minecraft:recipes/building_blocks/diorite_slab_from_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/diorite_stairs: ''
+ minecraft:recipes/building_blocks/diorite_stairs_from_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/dried_kelp_block: ''
+ minecraft:recipes/building_blocks/emerald_block: ''
+ minecraft:recipes/building_blocks/end_stone_brick_slab: ''
+ minecraft:recipes/building_blocks/end_stone_brick_slab_from_end_stone_brick_stonecutting: ''
+ minecraft:recipes/building_blocks/end_stone_brick_slab_from_end_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/end_stone_brick_stairs: ''
+ minecraft:recipes/building_blocks/end_stone_brick_stairs_from_end_stone_brick_stonecutting: ''
+ minecraft:recipes/building_blocks/end_stone_brick_stairs_from_end_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/end_stone_bricks: ''
+ minecraft:recipes/building_blocks/end_stone_bricks_from_end_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/glass: ''
+ minecraft:recipes/building_blocks/glowstone: ''
+ minecraft:recipes/building_blocks/gold_block: ''
+ minecraft:recipes/building_blocks/granite: ''
+ minecraft:recipes/building_blocks/granite_slab: ''
+ minecraft:recipes/building_blocks/granite_slab_from_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/granite_stairs: ''
+ minecraft:recipes/building_blocks/granite_stairs_from_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/gray_concrete_powder: ''
+ minecraft:recipes/building_blocks/gray_stained_glass: ''
+ minecraft:recipes/building_blocks/gray_terracotta: ''
+ minecraft:recipes/building_blocks/gray_wool: ''
+ minecraft:recipes/building_blocks/green_concrete_powder: ''
+ minecraft:recipes/building_blocks/green_stained_glass: ''
+ minecraft:recipes/building_blocks/green_terracotta: ''
+ minecraft:recipes/building_blocks/green_wool: ''
+ minecraft:recipes/building_blocks/hay_block: ''
+ minecraft:recipes/building_blocks/iron_block: ''
+ minecraft:recipes/building_blocks/jack_o_lantern: ''
+ minecraft:recipes/building_blocks/jungle_planks: ''
+ minecraft:recipes/building_blocks/jungle_slab: ''
+ minecraft:recipes/building_blocks/jungle_stairs: ''
+ minecraft:recipes/building_blocks/jungle_wood: ''
+ minecraft:recipes/building_blocks/lapis_block: ''
+ minecraft:recipes/building_blocks/light_blue_concrete_powder: ''
+ minecraft:recipes/building_blocks/light_blue_stained_glass: ''
+ minecraft:recipes/building_blocks/light_blue_terracotta: ''
+ minecraft:recipes/building_blocks/light_blue_wool: ''
+ minecraft:recipes/building_blocks/light_gray_concrete_powder: ''
+ minecraft:recipes/building_blocks/light_gray_stained_glass: ''
+ minecraft:recipes/building_blocks/light_gray_terracotta: ''
+ minecraft:recipes/building_blocks/light_gray_wool: ''
+ minecraft:recipes/building_blocks/lime_concrete_powder: ''
+ minecraft:recipes/building_blocks/lime_stained_glass: ''
+ minecraft:recipes/building_blocks/lime_terracotta: ''
+ minecraft:recipes/building_blocks/lime_wool: ''
+ minecraft:recipes/building_blocks/magenta_concrete_powder: ''
+ minecraft:recipes/building_blocks/magenta_stained_glass: ''
+ minecraft:recipes/building_blocks/magenta_terracotta: ''
+ minecraft:recipes/building_blocks/magenta_wool: ''
+ minecraft:recipes/building_blocks/magma_block: ''
+ minecraft:recipes/building_blocks/melon: ''
+ minecraft:recipes/building_blocks/mossy_cobblestone: ''
+ minecraft:recipes/building_blocks/mossy_cobblestone_slab: ''
+ minecraft:recipes/building_blocks/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting: ''
+ minecraft:recipes/building_blocks/mossy_cobblestone_stairs: ''
+ minecraft:recipes/building_blocks/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting: ''
+ minecraft:recipes/building_blocks/mossy_stone_brick_slab: ''
+ minecraft:recipes/building_blocks/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting: ''
+ minecraft:recipes/building_blocks/mossy_stone_brick_stairs: ''
+ minecraft:recipes/building_blocks/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting: ''
+ minecraft:recipes/building_blocks/mossy_stone_bricks: ''
+ minecraft:recipes/building_blocks/nether_brick_slab: ''
+ minecraft:recipes/building_blocks/nether_brick_slab_from_nether_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/nether_brick_stairs: ''
+ minecraft:recipes/building_blocks/nether_brick_stairs_from_nether_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/nether_bricks: ''
+ minecraft:recipes/building_blocks/nether_wart_block: ''
+ minecraft:recipes/building_blocks/netherite_block: ''
+ minecraft:recipes/building_blocks/oak_planks: ''
+ minecraft:recipes/building_blocks/oak_slab: ''
+ minecraft:recipes/building_blocks/oak_stairs: ''
+ minecraft:recipes/building_blocks/oak_wood: ''
+ minecraft:recipes/building_blocks/orange_concrete_powder: ''
+ minecraft:recipes/building_blocks/orange_stained_glass: ''
+ minecraft:recipes/building_blocks/orange_terracotta: ''
+ minecraft:recipes/building_blocks/orange_wool: ''
+ minecraft:recipes/building_blocks/packed_ice: ''
+ minecraft:recipes/building_blocks/pink_concrete_powder: ''
+ minecraft:recipes/building_blocks/pink_stained_glass: ''
+ minecraft:recipes/building_blocks/pink_terracotta: ''
+ minecraft:recipes/building_blocks/pink_wool: ''
+ minecraft:recipes/building_blocks/polished_andesite: ''
+ minecraft:recipes/building_blocks/polished_andesite_from_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_andesite_slab: ''
+ minecraft:recipes/building_blocks/polished_andesite_slab_from_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_andesite_slab_from_polished_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_andesite_stairs: ''
+ minecraft:recipes/building_blocks/polished_andesite_stairs_from_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_andesite_stairs_from_polished_andesite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_basalt: ''
+ minecraft:recipes/building_blocks/polished_basalt_from_basalt_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_slab: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_stairs: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_bricks: ''
+ minecraft:recipes/building_blocks/polished_blackstone_bricks_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_bricks_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_slab: ''
+ minecraft:recipes/building_blocks/polished_blackstone_slab_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_slab_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_stairs: ''
+ minecraft:recipes/building_blocks/polished_blackstone_stairs_from_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_blackstone_stairs_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_diorite: ''
+ minecraft:recipes/building_blocks/polished_diorite_from_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_diorite_slab: ''
+ minecraft:recipes/building_blocks/polished_diorite_slab_from_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_diorite_slab_from_polished_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_diorite_stairs: ''
+ minecraft:recipes/building_blocks/polished_diorite_stairs_from_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_diorite_stairs_from_polished_diorite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_granite: ''
+ minecraft:recipes/building_blocks/polished_granite_from_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_granite_slab: ''
+ minecraft:recipes/building_blocks/polished_granite_slab_from_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_granite_slab_from_polished_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_granite_stairs: ''
+ minecraft:recipes/building_blocks/polished_granite_stairs_from_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/polished_granite_stairs_from_polished_granite_stonecutting: ''
+ minecraft:recipes/building_blocks/prismarine: ''
+ minecraft:recipes/building_blocks/prismarine_brick_slab: ''
+ minecraft:recipes/building_blocks/prismarine_brick_slab_from_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/prismarine_brick_stairs: ''
+ minecraft:recipes/building_blocks/prismarine_brick_stairs_from_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/prismarine_bricks: ''
+ minecraft:recipes/building_blocks/prismarine_slab: ''
+ minecraft:recipes/building_blocks/prismarine_slab_from_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/prismarine_stairs: ''
+ minecraft:recipes/building_blocks/prismarine_stairs_from_prismarine_stonecutting: ''
+ minecraft:recipes/building_blocks/purple_concrete_powder: ''
+ minecraft:recipes/building_blocks/purple_stained_glass: ''
+ minecraft:recipes/building_blocks/purple_terracotta: ''
+ minecraft:recipes/building_blocks/purple_wool: ''
+ minecraft:recipes/building_blocks/purpur_block: ''
+ minecraft:recipes/building_blocks/purpur_pillar: ''
+ minecraft:recipes/building_blocks/purpur_pillar_from_purpur_block_stonecutting: ''
+ minecraft:recipes/building_blocks/purpur_slab: ''
+ minecraft:recipes/building_blocks/purpur_slab_from_purpur_block_stonecutting: ''
+ minecraft:recipes/building_blocks/purpur_stairs: ''
+ minecraft:recipes/building_blocks/purpur_stairs_from_purpur_block_stonecutting: ''
+ minecraft:recipes/building_blocks/quartz_block: ''
+ minecraft:recipes/building_blocks/quartz_bricks: ''
+ minecraft:recipes/building_blocks/quartz_bricks_from_quartz_block_stonecutting: ''
+ minecraft:recipes/building_blocks/quartz_pillar: ''
+ minecraft:recipes/building_blocks/quartz_pillar_from_quartz_block_stonecutting: ''
+ minecraft:recipes/building_blocks/quartz_slab: ''
+ minecraft:recipes/building_blocks/quartz_slab_from_stonecutting: ''
+ minecraft:recipes/building_blocks/quartz_stairs: ''
+ minecraft:recipes/building_blocks/quartz_stairs_from_quartz_block_stonecutting: ''
+ minecraft:recipes/building_blocks/red_concrete_powder: ''
+ minecraft:recipes/building_blocks/red_nether_brick_slab: ''
+ minecraft:recipes/building_blocks/red_nether_brick_slab_from_red_nether_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/red_nether_brick_stairs: ''
+ minecraft:recipes/building_blocks/red_nether_brick_stairs_from_red_nether_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/red_nether_bricks: ''
+ minecraft:recipes/building_blocks/red_sandstone: ''
+ minecraft:recipes/building_blocks/red_sandstone_slab: ''
+ minecraft:recipes/building_blocks/red_sandstone_slab_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/red_sandstone_stairs: ''
+ minecraft:recipes/building_blocks/red_sandstone_stairs_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/red_stained_glass: ''
+ minecraft:recipes/building_blocks/red_terracotta: ''
+ minecraft:recipes/building_blocks/red_wool: ''
+ minecraft:recipes/building_blocks/sandstone: ''
+ minecraft:recipes/building_blocks/sandstone_slab: ''
+ minecraft:recipes/building_blocks/sandstone_slab_from_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/sandstone_stairs: ''
+ minecraft:recipes/building_blocks/sandstone_stairs_from_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/sea_lantern: ''
+ minecraft:recipes/building_blocks/smooth_quartz: ''
+ minecraft:recipes/building_blocks/smooth_quartz_slab: ''
+ minecraft:recipes/building_blocks/smooth_quartz_slab_from_smooth_quartz_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_quartz_stairs: ''
+ minecraft:recipes/building_blocks/smooth_quartz_stairs_from_smooth_quartz_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_red_sandstone: ''
+ minecraft:recipes/building_blocks/smooth_red_sandstone_slab: ''
+ minecraft:recipes/building_blocks/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_red_sandstone_stairs: ''
+ minecraft:recipes/building_blocks/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_sandstone: ''
+ minecraft:recipes/building_blocks/smooth_sandstone_slab: ''
+ minecraft:recipes/building_blocks/smooth_sandstone_slab_from_smooth_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_sandstone_stairs: ''
+ minecraft:recipes/building_blocks/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting: ''
+ minecraft:recipes/building_blocks/smooth_stone: ''
+ minecraft:recipes/building_blocks/smooth_stone_slab: ''
+ minecraft:recipes/building_blocks/smooth_stone_slab_from_smooth_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/snow_block: ''
+ minecraft:recipes/building_blocks/sponge: ''
+ minecraft:recipes/building_blocks/spruce_planks: ''
+ minecraft:recipes/building_blocks/spruce_slab: ''
+ minecraft:recipes/building_blocks/spruce_stairs: ''
+ minecraft:recipes/building_blocks/spruce_wood: ''
+ minecraft:recipes/building_blocks/stone: ''
+ minecraft:recipes/building_blocks/stone_brick_slab: ''
+ minecraft:recipes/building_blocks/stone_brick_slab_from_stone_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_brick_slab_from_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_brick_stairs: ''
+ minecraft:recipes/building_blocks/stone_brick_stairs_from_stone_bricks_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_brick_stairs_from_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_bricks: ''
+ minecraft:recipes/building_blocks/stone_bricks_from_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_slab: ''
+ minecraft:recipes/building_blocks/stone_slab_from_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/stone_stairs: ''
+ minecraft:recipes/building_blocks/stone_stairs_from_stone_stonecutting: ''
+ minecraft:recipes/building_blocks/stripped_acacia_wood: ''
+ minecraft:recipes/building_blocks/stripped_birch_wood: ''
+ minecraft:recipes/building_blocks/stripped_crimson_hyphae: ''
+ minecraft:recipes/building_blocks/stripped_dark_oak_wood: ''
+ minecraft:recipes/building_blocks/stripped_jungle_wood: ''
+ minecraft:recipes/building_blocks/stripped_oak_wood: ''
+ minecraft:recipes/building_blocks/stripped_spruce_wood: ''
+ minecraft:recipes/building_blocks/stripped_warped_hyphae: ''
+ minecraft:recipes/building_blocks/terracotta: ''
+ minecraft:recipes/building_blocks/warped_hyphae: ''
+ minecraft:recipes/building_blocks/warped_planks: ''
+ minecraft:recipes/building_blocks/warped_slab: ''
+ minecraft:recipes/building_blocks/warped_stairs: ''
+ minecraft:recipes/building_blocks/white_concrete_powder: ''
+ minecraft:recipes/building_blocks/white_stained_glass: ''
+ minecraft:recipes/building_blocks/white_terracotta: ''
+ minecraft:recipes/building_blocks/white_wool_from_string: ''
+ minecraft:recipes/building_blocks/yellow_concrete_powder: ''
+ minecraft:recipes/building_blocks/yellow_stained_glass: ''
+ minecraft:recipes/building_blocks/yellow_terracotta: ''
+ minecraft:recipes/building_blocks/yellow_wool: ''
+ minecraft:recipes/combat/arrow: ''
+ minecraft:recipes/combat/bow: ''
+ minecraft:recipes/combat/crossbow: ''
+ minecraft:recipes/combat/diamond_boots: ''
+ minecraft:recipes/combat/diamond_chestplate: ''
+ minecraft:recipes/combat/diamond_helmet: ''
+ minecraft:recipes/combat/diamond_leggings: ''
+ minecraft:recipes/combat/diamond_sword: ''
+ minecraft:recipes/combat/golden_boots: ''
+ minecraft:recipes/combat/golden_chestplate: ''
+ minecraft:recipes/combat/golden_helmet: ''
+ minecraft:recipes/combat/golden_leggings: ''
+ minecraft:recipes/combat/golden_sword: ''
+ minecraft:recipes/combat/iron_boots: ''
+ minecraft:recipes/combat/iron_chestplate: ''
+ minecraft:recipes/combat/iron_helmet: ''
+ minecraft:recipes/combat/iron_leggings: ''
+ minecraft:recipes/combat/iron_sword: ''
+ minecraft:recipes/combat/leather_boots: ''
+ minecraft:recipes/combat/leather_chestplate: ''
+ minecraft:recipes/combat/leather_helmet: ''
+ minecraft:recipes/combat/leather_leggings: ''
+ minecraft:recipes/combat/netherite_boots_smithing: ''
+ minecraft:recipes/combat/netherite_chestplate_smithing: ''
+ minecraft:recipes/combat/netherite_helmet_smithing: ''
+ minecraft:recipes/combat/netherite_leggings_smithing: ''
+ minecraft:recipes/combat/netherite_sword_smithing: ''
+ minecraft:recipes/combat/shield: ''
+ minecraft:recipes/combat/spectral_arrow: ''
+ minecraft:recipes/combat/stone_sword: ''
+ minecraft:recipes/combat/turtle_helmet: ''
+ minecraft:recipes/combat/wooden_sword: ''
+ minecraft:recipes/decorations/acacia_fence: ''
+ minecraft:recipes/decorations/acacia_sign: ''
+ minecraft:recipes/decorations/andesite_wall: ''
+ minecraft:recipes/decorations/andesite_wall_from_andesite_stonecutting: ''
+ minecraft:recipes/decorations/anvil: ''
+ minecraft:recipes/decorations/armor_stand: ''
+ minecraft:recipes/decorations/barrel: ''
+ minecraft:recipes/decorations/beehive: ''
+ minecraft:recipes/decorations/birch_fence: ''
+ minecraft:recipes/decorations/birch_sign: ''
+ minecraft:recipes/decorations/black_banner: ''
+ minecraft:recipes/decorations/black_bed: ''
+ minecraft:recipes/decorations/black_bed_from_white_bed: ''
+ minecraft:recipes/decorations/black_carpet: ''
+ minecraft:recipes/decorations/black_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/black_glazed_terracotta: ''
+ minecraft:recipes/decorations/black_stained_glass_pane: ''
+ minecraft:recipes/decorations/black_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/blackstone_wall: ''
+ minecraft:recipes/decorations/blackstone_wall_from_blackstone_stonecutting: ''
+ minecraft:recipes/decorations/blast_furnace: ''
+ minecraft:recipes/decorations/blue_banner: ''
+ minecraft:recipes/decorations/blue_bed: ''
+ minecraft:recipes/decorations/blue_bed_from_white_bed: ''
+ minecraft:recipes/decorations/blue_carpet: ''
+ minecraft:recipes/decorations/blue_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/blue_glazed_terracotta: ''
+ minecraft:recipes/decorations/blue_stained_glass_pane: ''
+ minecraft:recipes/decorations/blue_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/brick_wall: ''
+ minecraft:recipes/decorations/brick_wall_from_bricks_stonecutting: ''
+ minecraft:recipes/decorations/brown_banner: ''
+ minecraft:recipes/decorations/brown_bed: ''
+ minecraft:recipes/decorations/brown_bed_from_white_bed: ''
+ minecraft:recipes/decorations/brown_carpet: ''
+ minecraft:recipes/decorations/brown_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/brown_glazed_terracotta: ''
+ minecraft:recipes/decorations/brown_stained_glass_pane: ''
+ minecraft:recipes/decorations/brown_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/campfire: ''
+ minecraft:recipes/decorations/cartography_table: ''
+ minecraft:recipes/decorations/chain: ''
+ minecraft:recipes/decorations/chest: ''
+ minecraft:recipes/decorations/cobblestone_wall: ''
+ minecraft:recipes/decorations/cobblestone_wall_from_cobblestone_stonecutting: ''
+ minecraft:recipes/decorations/composter: ''
+ minecraft:recipes/decorations/crafting_table: ''
+ minecraft:recipes/decorations/crimson_fence: ''
+ minecraft:recipes/decorations/crimson_sign: ''
+ minecraft:recipes/decorations/cyan_banner: ''
+ minecraft:recipes/decorations/cyan_bed: ''
+ minecraft:recipes/decorations/cyan_bed_from_white_bed: ''
+ minecraft:recipes/decorations/cyan_carpet: ''
+ minecraft:recipes/decorations/cyan_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/cyan_glazed_terracotta: ''
+ minecraft:recipes/decorations/cyan_stained_glass_pane: ''
+ minecraft:recipes/decorations/cyan_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/dark_oak_fence: ''
+ minecraft:recipes/decorations/dark_oak_sign: ''
+ minecraft:recipes/decorations/diorite_wall: ''
+ minecraft:recipes/decorations/diorite_wall_from_diorite_stonecutting: ''
+ minecraft:recipes/decorations/enchanting_table: ''
+ minecraft:recipes/decorations/end_crystal: ''
+ minecraft:recipes/decorations/end_rod: ''
+ minecraft:recipes/decorations/end_stone_brick_wall: ''
+ minecraft:recipes/decorations/end_stone_brick_wall_from_end_stone_brick_stonecutting: ''
+ minecraft:recipes/decorations/end_stone_brick_wall_from_end_stone_stonecutting: ''
+ minecraft:recipes/decorations/ender_chest: ''
+ minecraft:recipes/decorations/fletching_table: ''
+ minecraft:recipes/decorations/flower_pot: ''
+ minecraft:recipes/decorations/furnace: ''
+ minecraft:recipes/decorations/glass_pane: ''
+ minecraft:recipes/decorations/granite_wall: ''
+ minecraft:recipes/decorations/granite_wall_from_granite_stonecutting: ''
+ minecraft:recipes/decorations/gray_banner: ''
+ minecraft:recipes/decorations/gray_bed: ''
+ minecraft:recipes/decorations/gray_bed_from_white_bed: ''
+ minecraft:recipes/decorations/gray_carpet: ''
+ minecraft:recipes/decorations/gray_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/gray_glazed_terracotta: ''
+ minecraft:recipes/decorations/gray_stained_glass_pane: ''
+ minecraft:recipes/decorations/gray_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/green_banner: ''
+ minecraft:recipes/decorations/green_bed: ''
+ minecraft:recipes/decorations/green_bed_from_white_bed: ''
+ minecraft:recipes/decorations/green_carpet: ''
+ minecraft:recipes/decorations/green_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/green_glazed_terracotta: ''
+ minecraft:recipes/decorations/green_stained_glass_pane: ''
+ minecraft:recipes/decorations/green_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/grindstone: ''
+ minecraft:recipes/decorations/honey_block: ''
+ minecraft:recipes/decorations/honeycomb_block: ''
+ minecraft:recipes/decorations/iron_bars: ''
+ minecraft:recipes/decorations/item_frame: ''
+ minecraft:recipes/decorations/jukebox: ''
+ minecraft:recipes/decorations/jungle_fence: ''
+ minecraft:recipes/decorations/jungle_sign: ''
+ minecraft:recipes/decorations/ladder: ''
+ minecraft:recipes/decorations/lantern: ''
+ minecraft:recipes/decorations/light_blue_banner: ''
+ minecraft:recipes/decorations/light_blue_bed: ''
+ minecraft:recipes/decorations/light_blue_bed_from_white_bed: ''
+ minecraft:recipes/decorations/light_blue_carpet: ''
+ minecraft:recipes/decorations/light_blue_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/light_blue_glazed_terracotta: ''
+ minecraft:recipes/decorations/light_blue_stained_glass_pane: ''
+ minecraft:recipes/decorations/light_blue_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/light_gray_banner: ''
+ minecraft:recipes/decorations/light_gray_bed: ''
+ minecraft:recipes/decorations/light_gray_bed_from_white_bed: ''
+ minecraft:recipes/decorations/light_gray_carpet: ''
+ minecraft:recipes/decorations/light_gray_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/light_gray_glazed_terracotta: ''
+ minecraft:recipes/decorations/light_gray_stained_glass_pane: ''
+ minecraft:recipes/decorations/light_gray_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/lime_banner: ''
+ minecraft:recipes/decorations/lime_bed: ''
+ minecraft:recipes/decorations/lime_bed_from_white_bed: ''
+ minecraft:recipes/decorations/lime_carpet: ''
+ minecraft:recipes/decorations/lime_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/lime_glazed_terracotta: ''
+ minecraft:recipes/decorations/lime_stained_glass_pane: ''
+ minecraft:recipes/decorations/lime_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/lodestone: ''
+ minecraft:recipes/decorations/loom: ''
+ minecraft:recipes/decorations/magenta_banner: ''
+ minecraft:recipes/decorations/magenta_bed: ''
+ minecraft:recipes/decorations/magenta_bed_from_white_bed: ''
+ minecraft:recipes/decorations/magenta_carpet: ''
+ minecraft:recipes/decorations/magenta_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/magenta_glazed_terracotta: ''
+ minecraft:recipes/decorations/magenta_stained_glass_pane: ''
+ minecraft:recipes/decorations/magenta_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/mossy_cobblestone_wall: ''
+ minecraft:recipes/decorations/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting: ''
+ minecraft:recipes/decorations/mossy_stone_brick_wall: ''
+ minecraft:recipes/decorations/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting: ''
+ minecraft:recipes/decorations/nether_brick_fence: ''
+ minecraft:recipes/decorations/nether_brick_wall: ''
+ minecraft:recipes/decorations/nether_brick_wall_from_nether_bricks_stonecutting: ''
+ minecraft:recipes/decorations/oak_fence: ''
+ minecraft:recipes/decorations/oak_sign: ''
+ minecraft:recipes/decorations/orange_banner: ''
+ minecraft:recipes/decorations/orange_bed: ''
+ minecraft:recipes/decorations/orange_bed_from_white_bed: ''
+ minecraft:recipes/decorations/orange_carpet: ''
+ minecraft:recipes/decorations/orange_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/orange_glazed_terracotta: ''
+ minecraft:recipes/decorations/orange_stained_glass_pane: ''
+ minecraft:recipes/decorations/orange_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/painting: ''
+ minecraft:recipes/decorations/pink_banner: ''
+ minecraft:recipes/decorations/pink_bed: ''
+ minecraft:recipes/decorations/pink_bed_from_white_bed: ''
+ minecraft:recipes/decorations/pink_carpet: ''
+ minecraft:recipes/decorations/pink_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/pink_glazed_terracotta: ''
+ minecraft:recipes/decorations/pink_stained_glass_pane: ''
+ minecraft:recipes/decorations/pink_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/polished_blackstone_brick_wall: ''
+ minecraft:recipes/decorations/polished_blackstone_brick_wall_from_blackstone_stonecutting: ''
+ minecraft:recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting: ''
+ minecraft:recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/decorations/polished_blackstone_wall: ''
+ minecraft:recipes/decorations/polished_blackstone_wall_from_blackstone_stonecutting: ''
+ minecraft:recipes/decorations/polished_blackstone_wall_from_polished_blackstone_stonecutting: ''
+ minecraft:recipes/decorations/prismarine_wall: ''
+ minecraft:recipes/decorations/prismarine_wall_from_prismarine_stonecutting: ''
+ minecraft:recipes/decorations/purple_banner: ''
+ minecraft:recipes/decorations/purple_bed: ''
+ minecraft:recipes/decorations/purple_bed_from_white_bed: ''
+ minecraft:recipes/decorations/purple_carpet: ''
+ minecraft:recipes/decorations/purple_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/purple_glazed_terracotta: ''
+ minecraft:recipes/decorations/purple_stained_glass_pane: ''
+ minecraft:recipes/decorations/purple_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/red_banner: ''
+ minecraft:recipes/decorations/red_bed: ''
+ minecraft:recipes/decorations/red_bed_from_white_bed: ''
+ minecraft:recipes/decorations/red_carpet: ''
+ minecraft:recipes/decorations/red_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/red_glazed_terracotta: ''
+ minecraft:recipes/decorations/red_nether_brick_wall: ''
+ minecraft:recipes/decorations/red_nether_brick_wall_from_red_nether_bricks_stonecutting: ''
+ minecraft:recipes/decorations/red_sandstone_wall: ''
+ minecraft:recipes/decorations/red_sandstone_wall_from_red_sandstone_stonecutting: ''
+ minecraft:recipes/decorations/red_stained_glass_pane: ''
+ minecraft:recipes/decorations/red_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/respawn_anchor: ''
+ minecraft:recipes/decorations/sandstone_wall: ''
+ minecraft:recipes/decorations/sandstone_wall_from_sandstone_stonecutting: ''
+ minecraft:recipes/decorations/scaffolding: ''
+ minecraft:recipes/decorations/shulker_box: ''
+ minecraft:recipes/decorations/slime_block: ''
+ minecraft:recipes/decorations/smithing_table: ''
+ minecraft:recipes/decorations/smoker: ''
+ minecraft:recipes/decorations/snow: ''
+ minecraft:recipes/decorations/soul_campfire: ''
+ minecraft:recipes/decorations/soul_lantern: ''
+ minecraft:recipes/decorations/soul_torch: ''
+ minecraft:recipes/decorations/spruce_fence: ''
+ minecraft:recipes/decorations/spruce_sign: ''
+ minecraft:recipes/decorations/stone_brick_wall: ''
+ minecraft:recipes/decorations/stone_brick_wall_from_stone_bricks_stonecutting: ''
+ minecraft:recipes/decorations/stone_brick_walls_from_stone_stonecutting: ''
+ minecraft:recipes/decorations/stonecutter: ''
+ minecraft:recipes/decorations/torch: ''
+ minecraft:recipes/decorations/warped_fence: ''
+ minecraft:recipes/decorations/warped_sign: ''
+ minecraft:recipes/decorations/white_banner: ''
+ minecraft:recipes/decorations/white_bed: ''
+ minecraft:recipes/decorations/white_carpet: ''
+ minecraft:recipes/decorations/white_glazed_terracotta: ''
+ minecraft:recipes/decorations/white_stained_glass_pane: ''
+ minecraft:recipes/decorations/white_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/decorations/yellow_banner: ''
+ minecraft:recipes/decorations/yellow_bed: ''
+ minecraft:recipes/decorations/yellow_bed_from_white_bed: ''
+ minecraft:recipes/decorations/yellow_carpet: ''
+ minecraft:recipes/decorations/yellow_carpet_from_white_carpet: ''
+ minecraft:recipes/decorations/yellow_glazed_terracotta: ''
+ minecraft:recipes/decorations/yellow_stained_glass_pane: ''
+ minecraft:recipes/decorations/yellow_stained_glass_pane_from_glass_pane: ''
+ minecraft:recipes/food/baked_potato: ''
+ minecraft:recipes/food/baked_potato_from_campfire_cooking: ''
+ minecraft:recipes/food/baked_potato_from_smoking: ''
+ minecraft:recipes/food/beetroot_soup: ''
+ minecraft:recipes/food/bread: ''
+ minecraft:recipes/food/cake: ''
+ minecraft:recipes/food/cooked_beef: ''
+ minecraft:recipes/food/cooked_beef_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_beef_from_smoking: ''
+ minecraft:recipes/food/cooked_chicken: ''
+ minecraft:recipes/food/cooked_chicken_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_chicken_from_smoking: ''
+ minecraft:recipes/food/cooked_cod: ''
+ minecraft:recipes/food/cooked_cod_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_cod_from_smoking: ''
+ minecraft:recipes/food/cooked_mutton: ''
+ minecraft:recipes/food/cooked_mutton_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_mutton_from_smoking: ''
+ minecraft:recipes/food/cooked_porkchop: ''
+ minecraft:recipes/food/cooked_porkchop_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_porkchop_from_smoking: ''
+ minecraft:recipes/food/cooked_rabbit: ''
+ minecraft:recipes/food/cooked_rabbit_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_rabbit_from_smoking: ''
+ minecraft:recipes/food/cooked_salmon: ''
+ minecraft:recipes/food/cooked_salmon_from_campfire_cooking: ''
+ minecraft:recipes/food/cooked_salmon_from_smoking: ''
+ minecraft:recipes/food/cookie: ''
+ minecraft:recipes/food/dried_kelp: ''
+ minecraft:recipes/food/dried_kelp_from_campfire_cooking: ''
+ minecraft:recipes/food/dried_kelp_from_smelting: ''
+ minecraft:recipes/food/dried_kelp_from_smoking: ''
+ minecraft:recipes/food/golden_apple: ''
+ minecraft:recipes/food/honey_bottle: ''
+ minecraft:recipes/food/mushroom_stew: ''
+ minecraft:recipes/food/pumpkin_pie: ''
+ minecraft:recipes/food/rabbit_stew_from_brown_mushroom: ''
+ minecraft:recipes/food/rabbit_stew_from_red_mushroom: ''
+ minecraft:recipes/misc/beacon: ''
+ minecraft:recipes/misc/black_dye: ''
+ minecraft:recipes/misc/black_dye_from_wither_rose: ''
+ minecraft:recipes/misc/blue_dye: ''
+ minecraft:recipes/misc/blue_dye_from_cornflower: ''
+ minecraft:recipes/misc/bone_meal: ''
+ minecraft:recipes/misc/bone_meal_from_bone_block: ''
+ minecraft:recipes/misc/book: ''
+ minecraft:recipes/misc/bowl: ''
+ minecraft:recipes/misc/brick: ''
+ minecraft:recipes/misc/brown_dye: ''
+ minecraft:recipes/misc/bucket: ''
+ minecraft:recipes/misc/charcoal: ''
+ minecraft:recipes/misc/coal: ''
+ minecraft:recipes/misc/coal_from_blasting: ''
+ minecraft:recipes/misc/coal_from_smelting: ''
+ minecraft:recipes/misc/conduit: ''
+ minecraft:recipes/misc/creeper_banner_pattern: ''
+ minecraft:recipes/misc/cyan_dye: ''
+ minecraft:recipes/misc/diamond: ''
+ minecraft:recipes/misc/diamond_from_blasting: ''
+ minecraft:recipes/misc/diamond_from_smelting: ''
+ minecraft:recipes/misc/emerald: ''
+ minecraft:recipes/misc/emerald_from_blasting: ''
+ minecraft:recipes/misc/emerald_from_smelting: ''
+ minecraft:recipes/misc/ender_eye: ''
+ minecraft:recipes/misc/fire_charge: ''
+ minecraft:recipes/misc/flower_banner_pattern: ''
+ minecraft:recipes/misc/gold_ingot: ''
+ minecraft:recipes/misc/gold_ingot_from_blasting: ''
+ minecraft:recipes/misc/gold_ingot_from_gold_block: ''
+ minecraft:recipes/misc/gold_ingot_from_nuggets: ''
+ minecraft:recipes/misc/gold_nugget: ''
+ minecraft:recipes/misc/gold_nugget_from_blasting: ''
+ minecraft:recipes/misc/gold_nugget_from_smelting: ''
+ minecraft:recipes/misc/gray_dye: ''
+ minecraft:recipes/misc/green_dye: ''
+ minecraft:recipes/misc/iron_ingot: ''
+ minecraft:recipes/misc/iron_ingot_from_blasting: ''
+ minecraft:recipes/misc/iron_ingot_from_iron_block: ''
+ minecraft:recipes/misc/iron_ingot_from_nuggets: ''
+ minecraft:recipes/misc/iron_nugget: ''
+ minecraft:recipes/misc/iron_nugget_from_blasting: ''
+ minecraft:recipes/misc/iron_nugget_from_smelting: ''
+ minecraft:recipes/misc/lapis_from_blasting: ''
+ minecraft:recipes/misc/lapis_from_smelting: ''
+ minecraft:recipes/misc/lapis_lazuli: ''
+ minecraft:recipes/misc/leather: ''
+ minecraft:recipes/misc/leather_horse_armor: ''
+ minecraft:recipes/misc/light_blue_dye_from_blue_orchid: ''
+ minecraft:recipes/misc/light_blue_dye_from_blue_white_dye: ''
+ minecraft:recipes/misc/light_gray_dye_from_azure_bluet: ''
+ minecraft:recipes/misc/light_gray_dye_from_black_white_dye: ''
+ minecraft:recipes/misc/light_gray_dye_from_gray_white_dye: ''
+ minecraft:recipes/misc/light_gray_dye_from_oxeye_daisy: ''
+ minecraft:recipes/misc/light_gray_dye_from_white_tulip: ''
+ minecraft:recipes/misc/lime_dye: ''
+ minecraft:recipes/misc/lime_dye_from_smelting: ''
+ minecraft:recipes/misc/magenta_dye_from_allium: ''
+ minecraft:recipes/misc/magenta_dye_from_blue_red_pink: ''
+ minecraft:recipes/misc/magenta_dye_from_blue_red_white_dye: ''
+ minecraft:recipes/misc/magenta_dye_from_lilac: ''
+ minecraft:recipes/misc/magenta_dye_from_purple_and_pink: ''
+ minecraft:recipes/misc/map: ''
+ minecraft:recipes/misc/melon_seeds: ''
+ minecraft:recipes/misc/mojang_banner_pattern: ''
+ minecraft:recipes/misc/nether_brick: ''
+ minecraft:recipes/misc/netherite_ingot: ''
+ minecraft:recipes/misc/netherite_ingot_from_netherite_block: ''
+ minecraft:recipes/misc/netherite_scrap: ''
+ minecraft:recipes/misc/netherite_scrap_from_blasting: ''
+ minecraft:recipes/misc/orange_dye_from_orange_tulip: ''
+ minecraft:recipes/misc/orange_dye_from_red_yellow: ''
+ minecraft:recipes/misc/paper: ''
+ minecraft:recipes/misc/pink_dye_from_peony: ''
+ minecraft:recipes/misc/pink_dye_from_pink_tulip: ''
+ minecraft:recipes/misc/pink_dye_from_red_white_dye: ''
+ minecraft:recipes/misc/popped_chorus_fruit: ''
+ minecraft:recipes/misc/pumpkin_seeds: ''
+ minecraft:recipes/misc/purple_dye: ''
+ minecraft:recipes/misc/quartz: ''
+ minecraft:recipes/misc/quartz_from_blasting: ''
+ minecraft:recipes/misc/red_dye_from_beetroot: ''
+ minecraft:recipes/misc/red_dye_from_poppy: ''
+ minecraft:recipes/misc/red_dye_from_rose_bush: ''
+ minecraft:recipes/misc/red_dye_from_tulip: ''
+ minecraft:recipes/misc/skull_banner_pattern: ''
+ minecraft:recipes/misc/slime_ball: ''
+ minecraft:recipes/misc/stick: ''
+ minecraft:recipes/misc/stick_from_bamboo_item: ''
+ minecraft:recipes/misc/sugar_from_honey_bottle: ''
+ minecraft:recipes/misc/sugar_from_sugar_cane: ''
+ minecraft:recipes/misc/wheat: ''
+ minecraft:recipes/misc/white_dye: ''
+ minecraft:recipes/misc/white_dye_from_lily_of_the_valley: ''
+ minecraft:recipes/misc/writable_book: ''
+ minecraft:recipes/misc/yellow_dye_from_dandelion: ''
+ minecraft:recipes/misc/yellow_dye_from_sunflower: ''
+ minecraft:recipes/redstone/acacia_button: ''
+ minecraft:recipes/redstone/acacia_door: ''
+ minecraft:recipes/redstone/acacia_fence_gate: ''
+ minecraft:recipes/redstone/acacia_pressure_plate: ''
+ minecraft:recipes/redstone/acacia_trapdoor: ''
+ minecraft:recipes/redstone/birch_button: ''
+ minecraft:recipes/redstone/birch_door: ''
+ minecraft:recipes/redstone/birch_fence_gate: ''
+ minecraft:recipes/redstone/birch_pressure_plate: ''
+ minecraft:recipes/redstone/birch_trapdoor: ''
+ minecraft:recipes/redstone/comparator: ''
+ minecraft:recipes/redstone/crimson_button: ''
+ minecraft:recipes/redstone/crimson_door: ''
+ minecraft:recipes/redstone/crimson_fence_gate: ''
+ minecraft:recipes/redstone/crimson_pressure_plate: ''
+ minecraft:recipes/redstone/crimson_trapdoor: ''
+ minecraft:recipes/redstone/dark_oak_button: ''
+ minecraft:recipes/redstone/dark_oak_door: ''
+ minecraft:recipes/redstone/dark_oak_fence_gate: ''
+ minecraft:recipes/redstone/dark_oak_pressure_plate: ''
+ minecraft:recipes/redstone/dark_oak_trapdoor: ''
+ minecraft:recipes/redstone/daylight_detector: ''
+ minecraft:recipes/redstone/dispenser: ''
+ minecraft:recipes/redstone/dropper: ''
+ minecraft:recipes/redstone/heavy_weighted_pressure_plate: ''
+ minecraft:recipes/redstone/hopper: ''
+ minecraft:recipes/redstone/iron_door: ''
+ minecraft:recipes/redstone/iron_trapdoor: ''
+ minecraft:recipes/redstone/jungle_button: ''
+ minecraft:recipes/redstone/jungle_door: ''
+ minecraft:recipes/redstone/jungle_fence_gate: ''
+ minecraft:recipes/redstone/jungle_pressure_plate: ''
+ minecraft:recipes/redstone/jungle_trapdoor: ''
+ minecraft:recipes/redstone/lectern: ''
+ minecraft:recipes/redstone/lever: ''
+ minecraft:recipes/redstone/light_weighted_pressure_plate: ''
+ minecraft:recipes/redstone/note_block: ''
+ minecraft:recipes/redstone/oak_button: ''
+ minecraft:recipes/redstone/oak_door: ''
+ minecraft:recipes/redstone/oak_fence_gate: ''
+ minecraft:recipes/redstone/oak_pressure_plate: ''
+ minecraft:recipes/redstone/oak_trapdoor: ''
+ minecraft:recipes/redstone/observer: ''
+ minecraft:recipes/redstone/piston: ''
+ minecraft:recipes/redstone/polished_blackstone_button: ''
+ minecraft:recipes/redstone/polished_blackstone_pressure_plate: ''
+ minecraft:recipes/redstone/redstone: ''
+ minecraft:recipes/redstone/redstone_block: ''
+ minecraft:recipes/redstone/redstone_from_blasting: ''
+ minecraft:recipes/redstone/redstone_from_smelting: ''
+ minecraft:recipes/redstone/redstone_lamp: ''
+ minecraft:recipes/redstone/redstone_torch: ''
+ minecraft:recipes/redstone/repeater: ''
+ minecraft:recipes/redstone/spruce_button: ''
+ minecraft:recipes/redstone/spruce_door: ''
+ minecraft:recipes/redstone/spruce_fence_gate: ''
+ minecraft:recipes/redstone/spruce_pressure_plate: ''
+ minecraft:recipes/redstone/spruce_trapdoor: ''
+ minecraft:recipes/redstone/sticky_piston: ''
+ minecraft:recipes/redstone/stone_button: ''
+ minecraft:recipes/redstone/stone_pressure_plate: ''
+ minecraft:recipes/redstone/target: ''
+ minecraft:recipes/redstone/tnt: ''
+ minecraft:recipes/redstone/trapped_chest: ''
+ minecraft:recipes/redstone/tripwire_hook: ''
+ minecraft:recipes/redstone/warped_button: ''
+ minecraft:recipes/redstone/warped_door: ''
+ minecraft:recipes/redstone/warped_fence_gate: ''
+ minecraft:recipes/redstone/warped_pressure_plate: ''
+ minecraft:recipes/redstone/warped_trapdoor: ''
+ minecraft:recipes/root: Recipes
+ minecraft:recipes/tools/clock: ''
+ minecraft:recipes/tools/compass: ''
+ minecraft:recipes/tools/diamond_axe: ''
+ minecraft:recipes/tools/diamond_hoe: ''
+ minecraft:recipes/tools/diamond_pickaxe: ''
+ minecraft:recipes/tools/diamond_shovel: ''
+ minecraft:recipes/tools/fishing_rod: ''
+ minecraft:recipes/tools/flint_and_steel: ''
+ minecraft:recipes/tools/golden_axe: ''
+ minecraft:recipes/tools/golden_hoe: ''
+ minecraft:recipes/tools/golden_pickaxe: ''
+ minecraft:recipes/tools/golden_shovel: ''
+ minecraft:recipes/tools/iron_axe: ''
+ minecraft:recipes/tools/iron_hoe: ''
+ minecraft:recipes/tools/iron_pickaxe: ''
+ minecraft:recipes/tools/iron_shovel: ''
+ minecraft:recipes/tools/lead: ''
+ minecraft:recipes/tools/netherite_axe_smithing: ''
+ minecraft:recipes/tools/netherite_hoe_smithing: ''
+ minecraft:recipes/tools/netherite_pickaxe_smithing: ''
+ minecraft:recipes/tools/netherite_shovel_smithing: ''
+ minecraft:recipes/tools/shears: ''
+ minecraft:recipes/tools/stone_axe: ''
+ minecraft:recipes/tools/stone_hoe: ''
+ minecraft:recipes/tools/stone_pickaxe: ''
+ minecraft:recipes/tools/stone_shovel: ''
+ minecraft:recipes/tools/wooden_axe: ''
+ minecraft:recipes/tools/wooden_hoe: ''
+ minecraft:recipes/tools/wooden_pickaxe: ''
+ minecraft:recipes/tools/wooden_shovel: ''
+ minecraft:recipes/transportation/acacia_boat: ''
+ minecraft:recipes/transportation/activator_rail: ''
+ minecraft:recipes/transportation/birch_boat: ''
+ minecraft:recipes/transportation/carrot_on_a_stick: ''
+ minecraft:recipes/transportation/chest_minecart: ''
+ minecraft:recipes/transportation/dark_oak_boat: ''
+ minecraft:recipes/transportation/detector_rail: ''
+ minecraft:recipes/transportation/furnace_minecart: ''
+ minecraft:recipes/transportation/hopper_minecart: ''
+ minecraft:recipes/transportation/jungle_boat: ''
+ minecraft:recipes/transportation/minecart: ''
+ minecraft:recipes/transportation/oak_boat: ''
+ minecraft:recipes/transportation/powered_rail: ''
+ minecraft:recipes/transportation/rail: ''
+ minecraft:recipes/transportation/spruce_boat: ''
+ minecraft:recipes/transportation/tnt_minecart: ''
+ minecraft:recipes/transportation/warped_fungus_on_a_stick: ''
+ minecraft:story/cure_zombie_villager: Zombi Doktoru
+ minecraft:story/deflect_arrow: Sağ ol, Bugün Değil
+ minecraft:story/enchant_item: Büyücü
+ minecraft:story/enter_the_end: Son?
+ minecraft:story/enter_the_nether: Daha Derine İnmemiz Gerek
+ minecraft:story/follow_ender_eye: Göz Ajanı
+ minecraft:story/form_obsidian: Buzlu Kova Meydan Okuması
+ minecraft:story/iron_tools: Demir Kazma Değil Mi
+ minecraft:story/lava_bucket: Sıcak Şey
+ minecraft:story/mine_diamond: Elmaslar!
+ minecraft:story/mine_stone: Taş Devri
+ minecraft:story/obtain_armor: Takımı Çek
+ minecraft:story/root: Oyunun kalbi ve hikayesi
+ minecraft:story/shiny_gear: Elmaslarla Sar Beni
+ minecraft:story/smelt_iron: Donanım Edin
+ minecraft:story/upgrade_tools: Geliştirme
+protection:
+ flags:
+ MOVE_BOX:
+ name: Adayı Taşı
+ description: "&b Ender incisi ile kimlerin adayı taşıyabileceğini değiştir \n"
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index b93c28a..e609dc8 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,7 +1,7 @@
name: BentoBox-Boxed
main: world.bentobox.boxed.BoxedPladdon
version: ${project.version}${build.number}
-api-version: "1.19"
+api-version: "1.21"
authors: [tastybento]
contributors: ["The BentoBoxWorld Community"]
diff --git a/src/test/java/world/bentobox/boxed/listeners/EnderPearlListenerTest.java b/src/test/java/world/bentobox/boxed/listeners/EnderPearlListenerTest.java
index 0522a4f..228def6 100644
--- a/src/test/java/world/bentobox/boxed/listeners/EnderPearlListenerTest.java
+++ b/src/test/java/world/bentobox/boxed/listeners/EnderPearlListenerTest.java
@@ -35,6 +35,7 @@ import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.Vector;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,6 +56,7 @@ import world.bentobox.bentobox.managers.IslandsManager;
import world.bentobox.bentobox.util.Util;
import world.bentobox.boxed.Boxed;
import world.bentobox.boxed.Settings;
+import world.bentobox.boxed.mocks.ServerMocks;
/**
* @author tastybento
@@ -102,7 +104,7 @@ public class EnderPearlListenerTest {
*/
@Before
public void setUp() throws Exception {
-
+ ServerMocks.newServer();
// Set up plugin
plugin = mock(BentoBox.class);
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
@@ -170,6 +172,13 @@ public class EnderPearlListenerTest {
epl = new EnderPearlListener(addon);
}
+ @After
+ public void tearDown() {
+ ServerMocks.unsetBukkitServer();
+ User.clearUsers();
+ Mockito.framework().clearInlineMocks();
+ }
+
/**
* Test method for {@link world.bentobox.boxed.listeners.EnderPearlListener#EnderPearlListener(world.bentobox.boxed.Boxed)}.
*/
diff --git a/src/test/java/world/bentobox/boxed/mocks/ServerMocks.java b/src/test/java/world/bentobox/boxed/mocks/ServerMocks.java
new file mode 100644
index 0000000..a4f2f40
--- /dev/null
+++ b/src/test/java/world/bentobox/boxed/mocks/ServerMocks.java
@@ -0,0 +1,118 @@
+package world.bentobox.boxed.mocks;
+
+import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Keyed;
+import org.bukkit.NamespacedKey;
+import org.bukkit.Registry;
+import org.bukkit.Server;
+import org.bukkit.Tag;
+import org.bukkit.UnsafeValues;
+import org.eclipse.jdt.annotation.NonNull;
+
+public final class ServerMocks {
+
+ public static @NonNull Server newServer() {
+ Server mock = mock(Server.class);
+
+ Logger noOp = mock(Logger.class);
+ when(mock.getLogger()).thenReturn(noOp);
+ when(mock.isPrimaryThread()).thenReturn(true);
+
+ // Unsafe
+ UnsafeValues unsafe = mock(UnsafeValues.class);
+ when(mock.getUnsafe()).thenReturn(unsafe);
+
+ // Server must be available before tags can be mocked.
+ Bukkit.setServer(mock);
+
+ // Bukkit has a lot of static constants referencing registry values. To initialize those, the
+ // registries must be able to be fetched before the classes are touched.
+ Map, Object> registers = new HashMap<>();
+
+ doAnswer(invocationGetRegistry -> registers.computeIfAbsent(invocationGetRegistry.getArgument(0), clazz -> {
+ Registry> registry = mock(Registry.class);
+ Map cache = new HashMap<>();
+ doAnswer(invocationGetEntry -> {
+ NamespacedKey key = invocationGetEntry.getArgument(0);
+ // Some classes (like BlockType and ItemType) have extra generics that will be
+ // erased during runtime calls. To ensure accurate typing, grab the constant's field.
+ // This approach also allows us to return null for unsupported keys.
+ Class extends Keyed> constantClazz;
+ try {
+ //noinspection unchecked
+ constantClazz = (Class extends Keyed>) clazz
+ .getField(key.getKey().toUpperCase(Locale.ROOT).replace('.', '_')).getType();
+ } catch (ClassCastException e) {
+ throw new RuntimeException(e);
+ } catch (NoSuchFieldException e) {
+ return null;
+ }
+
+ return cache.computeIfAbsent(key, key1 -> {
+ Keyed keyed = mock(constantClazz);
+ doReturn(key).when(keyed).getKey();
+ return keyed;
+ });
+ }).when(registry).get(notNull());
+ return registry;
+ })).when(mock).getRegistry(notNull());
+
+ // Tags are dependent on registries, but use a different method.
+ // This will set up blank tags for each constant; all that needs to be done to render them
+ // functional is to re-mock Tag#getValues.
+ doAnswer(invocationGetTag -> {
+ Tag> tag = mock(Tag.class);
+ doReturn(invocationGetTag.getArgument(1)).when(tag).getKey();
+ doReturn(Set.of()).when(tag).getValues();
+ doAnswer(invocationIsTagged -> {
+ Keyed keyed = invocationIsTagged.getArgument(0);
+ Class> type = invocationGetTag.getArgument(2);
+ if (!type.isAssignableFrom(keyed.getClass())) {
+ return null;
+ }
+ // Since these are mocks, the exact instance might not be equal. Consider equal keys equal.
+ return tag.getValues().contains(keyed)
+ || tag.getValues().stream().anyMatch(value -> value.getKey().equals(keyed.getKey()));
+ }).when(tag).isTagged(notNull());
+ return tag;
+ }).when(mock).getTag(notNull(), notNull(), notNull());
+
+ // Once the server is all set up, touch BlockType and ItemType to initialize.
+ // This prevents issues when trying to access dependent methods from a Material constant.
+ try {
+ Class.forName("org.bukkit.inventory.ItemType");
+ Class.forName("org.bukkit.block.BlockType");
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ return mock;
+ }
+
+ public static void unsetBukkitServer() {
+ try {
+ Field server = Bukkit.class.getDeclaredField("server");
+ server.setAccessible(true);
+ server.set(null, null);
+ } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private ServerMocks() {
+ }
+
+}
\ No newline at end of file