mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2026-01-06 15:52:03 +00:00
Merge branch 'Xiao-MoMi:dev' into dev
This commit is contained in:
@@ -2,8 +2,10 @@ package net.momirealms.craftengine.bukkit.compatibility.legacy.slimeworld;
|
|||||||
|
|
||||||
import com.infernalsuite.aswm.api.events.LoadSlimeWorldEvent;
|
import com.infernalsuite.aswm.api.events.LoadSlimeWorldEvent;
|
||||||
import com.infernalsuite.aswm.api.world.SlimeWorld;
|
import com.infernalsuite.aswm.api.world.SlimeWorld;
|
||||||
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.world.World;
|
import net.momirealms.craftengine.core.world.World;
|
||||||
import net.momirealms.craftengine.core.world.WorldManager;
|
import net.momirealms.craftengine.core.world.WorldManager;
|
||||||
|
import net.momirealms.craftengine.core.world.chunk.storage.CachedStorage;
|
||||||
import net.momirealms.craftengine.core.world.chunk.storage.DefaultStorageAdaptor;
|
import net.momirealms.craftengine.core.world.chunk.storage.DefaultStorageAdaptor;
|
||||||
import net.momirealms.craftengine.core.world.chunk.storage.WorldDataStorage;
|
import net.momirealms.craftengine.core.world.chunk.storage.WorldDataStorage;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -22,7 +24,8 @@ public class LegacySlimeFormatStorageAdaptor extends DefaultStorageAdaptor imple
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWorldLoad(LoadSlimeWorldEvent event) {
|
public void onWorldLoad(LoadSlimeWorldEvent event) {
|
||||||
org.bukkit.World world = Bukkit.getWorld(event.getSlimeWorld().getName());
|
org.bukkit.World world = Bukkit.getWorld(event.getSlimeWorld().getName());
|
||||||
this.worldManager.loadWorld(this.worldManager.createWorld(this.worldManager.wrap(world), new LegacySlimeWorldDataStorage(event.getSlimeWorld())));
|
this.worldManager.loadWorld(this.worldManager.createWorld(this.worldManager.wrap(world),
|
||||||
|
Config.enableChunkCache() ? new CachedStorage<>(new LegacySlimeWorldDataStorage(event.getSlimeWorld())) : new LegacySlimeWorldDataStorage(event.getSlimeWorld())));
|
||||||
}
|
}
|
||||||
|
|
||||||
public LegacySlimeFormatStorageAdaptor(WorldManager worldManager, int version) {
|
public LegacySlimeFormatStorageAdaptor(WorldManager worldManager, int version) {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class LegacySlimeWorldDataStorage implements WorldDataStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk, boolean immediately) {
|
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk) {
|
||||||
SlimeChunk slimeChunk = getWorld().getChunk(pos.x, pos.z);
|
SlimeChunk slimeChunk = getWorld().getChunk(pos.x, pos.z);
|
||||||
if (slimeChunk == null) return;
|
if (slimeChunk == null) return;
|
||||||
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ package net.momirealms.craftengine.bukkit.compatibility.slimeworld;
|
|||||||
import com.infernalsuite.asp.api.AdvancedSlimePaperAPI;
|
import com.infernalsuite.asp.api.AdvancedSlimePaperAPI;
|
||||||
import com.infernalsuite.asp.api.events.LoadSlimeWorldEvent;
|
import com.infernalsuite.asp.api.events.LoadSlimeWorldEvent;
|
||||||
import com.infernalsuite.asp.api.world.SlimeWorld;
|
import com.infernalsuite.asp.api.world.SlimeWorld;
|
||||||
|
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||||
import net.momirealms.craftengine.core.util.ReflectionUtils;
|
import net.momirealms.craftengine.core.util.ReflectionUtils;
|
||||||
import net.momirealms.craftengine.core.world.World;
|
import net.momirealms.craftengine.core.world.World;
|
||||||
import net.momirealms.craftengine.core.world.WorldManager;
|
import net.momirealms.craftengine.core.world.WorldManager;
|
||||||
|
import net.momirealms.craftengine.core.world.chunk.storage.CachedStorage;
|
||||||
import net.momirealms.craftengine.core.world.chunk.storage.DefaultStorageAdaptor;
|
import net.momirealms.craftengine.core.world.chunk.storage.DefaultStorageAdaptor;
|
||||||
import net.momirealms.craftengine.core.world.chunk.storage.WorldDataStorage;
|
import net.momirealms.craftengine.core.world.chunk.storage.WorldDataStorage;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -24,7 +26,8 @@ public class SlimeFormatStorageAdaptor extends DefaultStorageAdaptor implements
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onWorldLoad(LoadSlimeWorldEvent event) {
|
public void onWorldLoad(LoadSlimeWorldEvent event) {
|
||||||
org.bukkit.World world = Bukkit.getWorld(event.getSlimeWorld().getName());
|
org.bukkit.World world = Bukkit.getWorld(event.getSlimeWorld().getName());
|
||||||
this.worldManager.loadWorld(this.worldManager.createWorld(this.worldManager.wrap(world), new SlimeWorldDataStorage(event.getSlimeWorld(), this)));
|
this.worldManager.loadWorld(this.worldManager.createWorld(this.worldManager.wrap(world),
|
||||||
|
Config.enableChunkCache() ? new CachedStorage<>(new SlimeWorldDataStorage(event.getSlimeWorld(), this)) : new SlimeWorldDataStorage(event.getSlimeWorld(), this)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SlimeFormatStorageAdaptor(WorldManager worldManager) {
|
public SlimeFormatStorageAdaptor(WorldManager worldManager) {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class SlimeWorldDataStorage implements WorldDataStorage {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk, boolean immediately) {
|
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk) {
|
||||||
SlimeChunk slimeChunk = getWorld().getChunk(pos.x, pos.z);
|
SlimeChunk slimeChunk = getWorld().getChunk(pos.x, pos.z);
|
||||||
if (slimeChunk == null) return;
|
if (slimeChunk == null) return;
|
||||||
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import net.momirealms.craftengine.core.world.SectionPos;
|
|||||||
import net.momirealms.craftengine.core.world.chunk.CEChunk;
|
import net.momirealms.craftengine.core.world.chunk.CEChunk;
|
||||||
import net.momirealms.craftengine.core.world.chunk.CESection;
|
import net.momirealms.craftengine.core.world.chunk.CESection;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -143,7 +144,8 @@ public class FastAsyncWorldEditDelegate extends AbstractDelegateExtent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Operation commitBefore() {
|
public @Nullable Operation commit() {
|
||||||
|
Operation operation = super.commit();
|
||||||
saveAllChunks();
|
saveAllChunks();
|
||||||
List<ChunkPos> chunks = new ArrayList<>(this.brokenChunks);
|
List<ChunkPos> chunks = new ArrayList<>(this.brokenChunks);
|
||||||
this.brokenChunks.clear();
|
this.brokenChunks.clear();
|
||||||
@@ -155,7 +157,7 @@ public class FastAsyncWorldEditDelegate extends AbstractDelegateExtent {
|
|||||||
if (loaded == null) continue;
|
if (loaded == null) continue;
|
||||||
injectLevelChunk(chunkSource, loaded);
|
injectLevelChunk(chunkSource, loaded);
|
||||||
}
|
}
|
||||||
return super.commitBefore();
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processBlocks(Iterable<BlockVector3> region, Pattern pattern) {
|
private void processBlocks(Iterable<BlockVector3> region, Pattern pattern) {
|
||||||
@@ -196,7 +198,7 @@ public class FastAsyncWorldEditDelegate extends AbstractDelegateExtent {
|
|||||||
try {
|
try {
|
||||||
for (CEChunk ceChunk : this.chunksToSave) {
|
for (CEChunk ceChunk : this.chunksToSave) {
|
||||||
CraftEngine.instance().debug(() -> "Saving chunk " + ceChunk.chunkPos());
|
CraftEngine.instance().debug(() -> "Saving chunk " + ceChunk.chunkPos());
|
||||||
this.ceWorld.worldDataStorage().writeChunkAt(ceChunk.chunkPos(), ceChunk, true);
|
this.ceWorld.worldDataStorage().writeChunkAt(ceChunk.chunkPos(), ceChunk);
|
||||||
}
|
}
|
||||||
this.chunksToSave.clear();
|
this.chunksToSave.clear();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -345,8 +345,9 @@ light-system:
|
|||||||
force-update-light: false
|
force-update-light: false
|
||||||
|
|
||||||
chunk-system:
|
chunk-system:
|
||||||
# Unloaded chunks may be loaded soon. Delaying serialization can improve performance, especially for those double-dimension mob farms.
|
# With cache system, those frequently load/unload chunks would consume fewer resources on serialization
|
||||||
delay-serialization: 20 # seconds -1 = disable
|
# Enabling this option will increase memory consumption to a certain extent
|
||||||
|
cache-system: true
|
||||||
# 1 = NONE | Compression Speed | Decompress Speed | Compression Ratio | Memory Usage |
|
# 1 = NONE | Compression Speed | Decompress Speed | Compression Ratio | Memory Usage |
|
||||||
# 2 = DEFLATE | Medium-Slow Medium Moderate Low |
|
# 2 = DEFLATE | Medium-Slow Medium Moderate Low |
|
||||||
# 3 = GZIP | Medium-Slow Medium Moderate Low |
|
# 3 = GZIP | Medium-Slow Medium Moderate Low |
|
||||||
@@ -356,11 +357,11 @@ chunk-system:
|
|||||||
# Settings for injection
|
# Settings for injection
|
||||||
injection:
|
injection:
|
||||||
# Requires a restart to apply
|
# Requires a restart to apply
|
||||||
# SECTION: Inject the LevelChunkSection (Faster, but may conflict with some plugins)
|
# SECTION: Inject the LevelChunkSection (Faster & Experimental) since 0.0.53
|
||||||
# PALETTE: Inject the PalettedContainer
|
# PALETTE: Inject the PalettedContainer
|
||||||
target: PALETTE
|
target: PALETTE
|
||||||
# Enables faster injection method
|
# Enables faster injection method
|
||||||
# Note: May not work with certain server forks that alter chunk saving behavior
|
# Note: May not work with certain server forks that alter chunk class structure (In most cases it won't conflict)
|
||||||
use-fast-method: false
|
use-fast-method: false
|
||||||
# Auto-convert custom blocks -> vanilla blocks when unloading chunks
|
# Auto-convert custom blocks -> vanilla blocks when unloading chunks
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# Don't change this
|
# Don't change this
|
||||||
lang-version: "${lang_version}"
|
lang-version: "${lang_version}"
|
||||||
|
|
||||||
# Commands
|
|
||||||
exception.invalid_syntax: "<red>Invalid syntax. Correct syntax: <white><arg:0></white></red>"
|
exception.invalid_syntax: "<red>Invalid syntax. Correct syntax: <white><arg:0></white></red>"
|
||||||
exception.invalid_argument: "<red>Invalid argument. Reason: <white><arg:0></white></red>"
|
exception.invalid_argument: "<red>Invalid argument. Reason: <white><arg:0></white></red>"
|
||||||
exception.invalid_sender: "<red><arg:0> is not allowed to execute that command. Must be of type <arg:1></red>"
|
exception.invalid_sender: "<red><arg:0> is not allowed to execute that command. Must be of type <arg:1></red>"
|
||||||
@@ -70,6 +69,8 @@ warning.config.type.float: "<yellow>Issue found in file <arg:0> - Failed to load
|
|||||||
warning.config.type.double: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to double type for option '<arg:3>'.</yellow>"
|
warning.config.type.double: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to double type for option '<arg:3>'.</yellow>"
|
||||||
warning.config.type.quaternionf: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to Quaternionf type for option '<arg:3>'.</yellow>"
|
warning.config.type.quaternionf: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to Quaternionf type for option '<arg:3>'.</yellow>"
|
||||||
warning.config.type.vector3f: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to Vector3f type for option '<arg:3>'.</yellow>"
|
warning.config.type.vector3f: "<yellow>Issue found in file <arg:0> - Failed to load '<arg:1>': Cannot cast '<arg:2>' to Vector3f type for option '<arg:3>'.</yellow>"
|
||||||
|
warning.config.number.missing_type: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the required 'type' argument for number argument.</yellow>"
|
||||||
|
warning.config.number.invalid_type: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is using an invalid number argument type '<arg:2>'.</yellow>"
|
||||||
warning.config.number.missing_argument: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the argument for 'number'.</yellow>"
|
warning.config.number.missing_argument: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the argument for 'number'.</yellow>"
|
||||||
warning.config.number.invalid_format: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is using an invalid number format '<arg:2>'.</yellow>"
|
warning.config.number.invalid_format: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is using an invalid number format '<arg:2>'.</yellow>"
|
||||||
warning.config.number.fixed.missing_value: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the required 'value' argument for 'constant' number.</yellow>"
|
warning.config.number.fixed.missing_value: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the required 'value' argument for 'constant' number.</yellow>"
|
||||||
@@ -223,7 +224,7 @@ warning.config.block.behavior.sapling.missing_stage: "<yellow>Issue found in fil
|
|||||||
warning.config.block.behavior.sapling.missing_feature: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'feature' argument for 'sapling_block' behavior.</yellow>"
|
warning.config.block.behavior.sapling.missing_feature: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'feature' argument for 'sapling_block' behavior.</yellow>"
|
||||||
warning.config.block.behavior.strippable.missing_stripped: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'stripped' argument for 'strippable_block' behavior.</yellow>"
|
warning.config.block.behavior.strippable.missing_stripped: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'stripped' argument for 'strippable_block' behavior.</yellow>"
|
||||||
warning.config.block.event.condition.missing_type: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'type' argument for event condition.</yellow>"
|
warning.config.block.event.condition.missing_type: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is missing the required 'type' argument for event condition.</yellow>"
|
||||||
warning.config.block.event.condition.invalid_type: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is using an invalid 'type' argument for event condition.</yellow>"
|
warning.config.block.event.condition.invalid_type: "<yellow>Issue found in file <arg:0> - The block '<arg:1>' is using an invalid 'type' argument '<arg:2>' for event condition.</yellow>"
|
||||||
warning.config.model.generation.missing_parent: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the required 'parent' argument in 'generation' section.</yellow>"
|
warning.config.model.generation.missing_parent: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' is missing the required 'parent' argument in 'generation' section.</yellow>"
|
||||||
warning.config.model.generation.conflict: "<yellow>Issue found in file <arg:0> - Failed to generate model for '<arg:1>' as two or more configurations attempt to generate different json models with the same path: '<arg:2>'.</yellow>"
|
warning.config.model.generation.conflict: "<yellow>Issue found in file <arg:0> - Failed to generate model for '<arg:1>' as two or more configurations attempt to generate different json models with the same path: '<arg:2>'.</yellow>"
|
||||||
warning.config.model.generation.texture.invalid: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' has a texture '<arg:2>' with path '<arg:3>' that contains illegal characters. Please read https://minecraft.wiki/w/Resource_location#Legal_characters.</yellow>"
|
warning.config.model.generation.texture.invalid: "<yellow>Issue found in file <arg:0> - The config '<arg:1>' has a texture '<arg:2>' with path '<arg:3>' that contains illegal characters. Please read https://minecraft.wiki/w/Resource_location#Legal_characters.</yellow>"
|
||||||
@@ -249,8 +250,6 @@ warning.config.loot_table.entry.exp.missing_count: "<yellow>Issue found in file
|
|||||||
warning.config.loot_table.entry.item.missing_item: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, entry 'item' is missing the required 'item' argument.</yellow>"
|
warning.config.loot_table.entry.item.missing_item: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, entry 'item' is missing the required 'item' argument.</yellow>"
|
||||||
warning.config.loot_table.condition.missing_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the conditions is missing the required 'type' argument.</yellow>"
|
warning.config.loot_table.condition.missing_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the conditions is missing the required 'type' argument.</yellow>"
|
||||||
warning.config.loot_table.condition.invalid_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the conditions is using an invalid condition type '<arg:2>'.</yellow>"
|
warning.config.loot_table.condition.invalid_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the conditions is using an invalid condition type '<arg:2>'.</yellow>"
|
||||||
warning.config.loot_table.number.missing_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the numbers is missing the required 'type' argument.</yellow>"
|
|
||||||
warning.config.loot_table.number.invalid_type: "<yellow>Issue found in file <arg:0> - '<arg:1>' has a misconfigured loot table, one of the numbers is using an invalid number type '<arg:2>'.</yellow>"
|
|
||||||
warning.config.host.missing_type: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'type' argument for host.</yellow>"
|
warning.config.host.missing_type: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'type' argument for host.</yellow>"
|
||||||
warning.config.host.invalid_type: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Host type '<arg:0>' is invalid. Please read https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host.</yellow>"
|
warning.config.host.invalid_type: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Host type '<arg:0>' is invalid. Please read https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host.</yellow>"
|
||||||
warning.config.host.external.missing_url: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'url' argument for external host.</yellow>"
|
warning.config.host.external.missing_url: "<yellow>Issue found in config.yml at 'resource-pack.delivery.hosting' - Missing required 'url' argument for external host.</yellow>"
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
# Don't change this
|
# Don't change this
|
||||||
lang-version: "${lang_version}"
|
lang-version: "${lang_version}"
|
||||||
|
|
||||||
exception.invalid_syntax: "<red>Geçersiz sözdizimi. Doğru sözdizimi: <white><arg:0></white></red>"
|
exception.invalid_syntax: "<red>Geçersiz sözdizimi. Doğru kullanım: <white><arg:0></white></red>"
|
||||||
exception.invalid_argument: "<red>Geçersiz argüman. Sebep: <white><arg:0></white></red>"
|
exception.invalid_argument: "<red>Geçersiz argüman. Neden: <white><arg:0></white></red>"
|
||||||
exception.invalid_sender: "<red><arg:0> bu komutu çalıştırma izni yok. <arg:1> türünde olmalı</red>"
|
exception.invalid_sender: "<red><arg:0> bu komutu çalıştırmaya yetkili değil. <arg:1> türünde olmalı</red>"
|
||||||
exception.unexpected: "<red>Bu komutu gerçekleştirmeye çalışırken dahili bir hata oluştu</red>"
|
exception.unexpected: "<red>Bu komutu gerçekleştirirken dahili bir hata oluştu</red>"
|
||||||
exception.no_permission: "<red>Üzgünüm, bu komutu kullanma izniniz yok</red>"
|
exception.no_permission: "<red>Üzgünüm, ancak bu komutu kullanma izniniz yok</red>"
|
||||||
exception.no_such_command: "Bilinmeyen komut."
|
exception.no_such_command: "Bilinmeyen komut."
|
||||||
argument.entity.notfound.player: "<red><lang:argument.entity.notfound.player></red>"
|
argument.entity.notfound.player: "<red><lang:argument.entity.notfound.player></red>"
|
||||||
argument.entity.notfound.entity: "<red><lang:argument.entity.notfound.entity></red>"
|
argument.entity.notfound.entity: "<red><lang:argument.entity.notfound.entity></red>"
|
||||||
argument.parse.failure.time: "<red>'<arg:0>' geçerli bir zaman formatı değil</red>"
|
argument.parse.failure.time: "<red>'<arg:0>' geçerli bir zaman biçimi değil</red>"
|
||||||
argument.parse.failure.material: "<red>'<arg:0>' geçerli bir materyal adı değil</red>"
|
argument.parse.failure.material: "<red>'<arg:0>' geçerli bir malzeme adı değil</red>"
|
||||||
argument.parse.failure.enchantment: "<red>'<arg:0>' geçerli bir büyü değil</red>"
|
argument.parse.failure.enchantment: "<red>'<arg:0>' geçerli bir büyü değil</red>"
|
||||||
argument.parse.failure.offlineplayer: "<red>'<arg:0>' için oyuncu bulunamadı</red>"
|
argument.parse.failure.offlineplayer: "<red>'<arg:0>' girişi için oyuncu bulunamadı</red>"
|
||||||
argument.parse.failure.player: "<red>'<arg:0>' için oyuncu bulunamadı</red>"
|
argument.parse.failure.player: "<red>'<arg:0>' girişi için oyuncu bulunamadı</red>"
|
||||||
argument.parse.failure.world: "<red>'<arg:0>' geçerli bir Minecraft dünyası değil</red>"
|
argument.parse.failure.world: "<red>'<arg:0>' geçerli bir Minecraft dünyası değil</red>"
|
||||||
argument.parse.failure.location.invalid_format: "<red>'<arg:0>' geçerli bir konum değil. Gerekli format: '<arg:1> <arg:2> <arg:3></red>"
|
argument.parse.failure.location.invalid_format: "<red>'<arg:0>' geçerli bir konum değil. Gerekli format: '<arg:1> <arg:2> <arg:3></red>"
|
||||||
argument.parse.failure.location.mixed_local_absolute: "<red>Yerel ve mutlak koordinatlar karıştırılamaz. (ya tüm koordinatlar '^' kullanmalı ya da hiçbiri kullanmamalı)</red>"
|
argument.parse.failure.location.mixed_local_absolute: "<red>Yerel ve mutlak koordinatlar karıştırılamaz. (ya tüm koordinatlar '^' kullanır ya da hiçbiri kullanmaz)</red>"
|
||||||
argument.parse.failure.namespacedkey.namespace: "<red>Geçersiz ad alanı '<arg:0>'. [a-z0-9._-] olmalı</red>"
|
argument.parse.failure.namespacedkey.namespace: "<red>Geçersiz isim alanı '<arg:0>'. [a-z0-9._-] olmalı</red>"
|
||||||
argument.parse.failure.namespacedkey.key: "<red>Geçersiz anahtar '<arg:0>'. [a-z0-9/._-] olmalı</red>"
|
argument.parse.failure.namespacedkey.key: "<red>Geçersiz anahtar '<arg:0>'. [a-z0-9/._-] olmalı</red>"
|
||||||
argument.parse.failure.namespacedkey.need_namespace: "<red>Geçersiz girdi '<arg:0>', açık bir ad alanı gerektirir</red>"
|
argument.parse.failure.namespacedkey.need_namespace: "<red>Geçersiz giriş '<arg:0>', açık bir isim alanı gerektirir</red>"
|
||||||
argument.parse.failure.boolean: "<red>'<arg:0>' değerinden boolean değeri ayrıştırılamadı</red>"
|
argument.parse.failure.boolean: "<red>'<arg:0>' ifadesinden boolean değeri ayrıştırılamadı</red>"
|
||||||
argument.parse.failure.number: "<red>'<arg:0>' <arg:1> ile <arg:2> aralığında geçerli bir sayı değil</red>"
|
argument.parse.failure.number: "<red>'<arg:0>', <arg:1> ile <arg:2> aralığında geçerli bir sayı değil</red>"
|
||||||
argument.parse.failure.char: "<red>'<arg:0>' geçerli bir karakter değil</red>"
|
argument.parse.failure.char: "<red>'<arg:0>' geçerli bir karakter değil</red>"
|
||||||
argument.parse.failure.string: "<red>'<arg:0>' <arg:1> türünde geçerli bir dize değil</red>"
|
argument.parse.failure.string: "<red>'<arg:0>', <arg:1> türünde geçerli bir metin değil</red>"
|
||||||
argument.parse.failure.uuid: "<red>'<arg:0>' geçerli bir UUID değil</red>"
|
argument.parse.failure.uuid: "<red>'<arg:0>' geçerli bir UUID değil</red>"
|
||||||
argument.parse.failure.enum: "<red>'<arg:0>' şunlardan biri değil: <arg:1></red>"
|
argument.parse.failure.enum: "<red>'<arg:0>' şunlardan biri değil: <arg:1></red>"
|
||||||
argument.parse.failure.regex: "<red>'<arg:0>' şununla eşleşmiyor: '<arg:1>'</red>"
|
argument.parse.failure.regex: "<red>'<arg:0>', '<arg:1>' ile eşleşmiyor</red>"
|
||||||
argument.parse.failure.flag.unknown: "<red>Bilinmeyen bayrak '<arg:0>'</red>"
|
argument.parse.failure.flag.unknown: "<red>Bilinmeyen bayrak '<arg:0>'</red>"
|
||||||
argument.parse.failure.flag.duplicate_flag: "<red>Yinelenen bayrak '<arg:0>'</red>"
|
argument.parse.failure.flag.duplicate_flag: "<red>Tekrarlanan bayrak '<arg:0>'</red>"
|
||||||
argument.parse.failure.flag.no_flag_started: "<red>Hiçbir bayrak başlatılmadı. '<arg:0>' ile ne yapılacağı bilinmiyor</red>"
|
argument.parse.failure.flag.no_flag_started: "<red>Hiçbir bayrak başlatılmadı. '<arg:0>' ile ne yapılacağı bilinmiyor</red>"
|
||||||
argument.parse.failure.flag.missing_argument: "<red>'<arg:0>' için eksik argüman</red>"
|
argument.parse.failure.flag.missing_argument: "<red>'<arg:0>' için eksik argüman</red>"
|
||||||
argument.parse.failure.flag.no_permission: "<red>'<arg:0>' kullanma izniniz yok</red>"
|
argument.parse.failure.flag.no_permission: "<red>'<arg:0>' kullanma izniniz yok</red>"
|
||||||
argument.parse.failure.color: "<red>'<arg:0>' geçerli bir renk değil</red>"
|
argument.parse.failure.color: "<red>'<arg:0>' geçerli bir renk değil</red>"
|
||||||
argument.parse.failure.duration: "<red>'<arg:0>' bir süre formatı değil</red>"
|
argument.parse.failure.duration: "<red>'<arg:0>' bir süre biçimi değil</red>"
|
||||||
argument.parse.failure.aggregate.missing: "<red>Eksik bileşen '<arg:0>'</red>"
|
argument.parse.failure.aggregate.missing: "<red>Eksik bileşen '<arg:0>'</red>"
|
||||||
argument.parse.failure.aggregate.failure: "<red>Geçersiz bileşen '<arg:0>': <arg:1></red>"
|
argument.parse.failure.aggregate.failure: "<red>Geçersiz bileşen '<arg:0>': <arg:1></red>"
|
||||||
argument.parse.failure.either: "<red>'<arg:0>' için <arg:1> veya <arg:2> çözümlenemedi</red>"
|
argument.parse.failure.either: "<red>'<arg:0>' ifadesinden <arg:1> veya <arg:2> çözümlenemedi</red>"
|
||||||
argument.parse.failure.namedtextcolor: "<red>'<arg:0>' geçerli bir metin rengi adı değil</red>"
|
argument.parse.failure.namedtextcolor: "<red>'<arg:0>' adlandırılmış bir metin rengi değil</red>"
|
||||||
command.reload.config.success: "<white>Yapılandırmalar <green><arg:0></green> ms içinde yeniden yüklendi.</white> <gray>(Asenkron: <arg:1>ms | Senkron: <arg:2>ms)</gray>"
|
command.reload.config.success: "<white>Yapılandırmalar <green><arg:0></green> ms içinde yeniden yüklendi.</white> <gray>(Eşzamansız: <arg:1>ms | Eşzamanlı: <arg:2>ms)</gray>"
|
||||||
command.reload.config.failure: "<red>Yapılandırma yeniden yükleme başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
command.reload.config.failure: "<red>Yapılandırma yeniden yüklemesi başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
||||||
command.reload.pack.success: "<white>Kaynak paketi <green><arg:0></green> ms içinde yeniden yüklendi.</white>"
|
command.reload.pack.success: "<white>Kaynak paketi <green><arg:0></green> ms içinde yeniden yüklendi.</white>"
|
||||||
command.reload.pack.failure: "<red>Kaynak paketi yeniden yükleme başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
command.reload.pack.failure: "<red>Kaynak paketi yeniden yüklemesi başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
||||||
command.reload.all.success: "<white>Yeniden yükleme <green><arg:0></green> ms içinde tamamlandı.</white> <gray>(Asenkron: <arg:1>ms | Senkron: <arg:2>ms | Paket: <arg:3>ms)</gray>"
|
command.reload.all.success: "<white>Yeniden yükleme <green><arg:0></green> ms içinde tamamlandı.</white> <gray>(Eşzamansız: <arg:1>ms | Eşzamanlı: <arg:2>ms | Paket: <arg:3>ms)</gray>"
|
||||||
command.reload.all.failure: "<red>Yeniden yükleme başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
command.reload.all.failure: "<red>Yeniden yükleme başarısız oldu. Konsol günlüklerini kontrol edin.</red>"
|
||||||
command.item.get.success: "<white><arg:0> <arg:1> alındı</white>"
|
command.item.get.success: "<white><arg:0> adet <arg:1> alındı</white>"
|
||||||
command.item.get.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
|
command.item.get.failure.not_exist: "<red><lang:argument.item.id.invalid:'<arg:0>'></red>"
|
||||||
command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>"
|
command.item.give.success.single: "<lang:commands.give.success.single:'<arg:0>':'<arg:1>':'<arg:2>'>"
|
||||||
command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>"
|
command.item.give.success.multiple: "<lang:commands.give.success.multiple:'<arg:0>':'<arg:1>':'<arg:2>'>"
|
||||||
@@ -53,91 +53,219 @@ command.search_recipe.not_found: "<red>Bu eşya için tarif bulunamadı</red>"
|
|||||||
command.search_usage.not_found: "<red>Bu eşya için kullanım bulunamadı</red>"
|
command.search_usage.not_found: "<red>Bu eşya için kullanım bulunamadı</red>"
|
||||||
command.search_recipe.no_item: "<red>Bu komutu çalıştırmadan önce lütfen bir eşya tutun</red>"
|
command.search_recipe.no_item: "<red>Bu komutu çalıştırmadan önce lütfen bir eşya tutun</red>"
|
||||||
command.search_usage.no_item: "<red>Bu komutu çalıştırmadan önce lütfen bir eşya tutun</red>"
|
command.search_usage.no_item: "<red>Bu komutu çalıştırmadan önce lütfen bir eşya tutun</red>"
|
||||||
command.totem_animation.failure.not_totem: "<red>Eşya '<arg:0>' minecraft:totem_of_undying değil</red>"
|
command.totem_animation.failure.not_totem: "<red>'<arg:0>' eşyası minecraft:totem_of_undying değil</red>"
|
||||||
command.resource.enable.success: "<white><arg:0> kaynağı etkinleştirildi. Değişiklikleri uygulamak için <click:run_command:/ce reload all><u>/ce reload all</u></click> çalıştırın</white>"
|
command.resource.enable.success: "<white><arg:0> kaynağı etkinleştirildi. Değişiklikleri uygulamak için <click:run_command:/ce reload all><u>/ce reload all</u></click> komutunu çalıştırın</white>"
|
||||||
command.resource.enable.failure.unknown: "<red>Bilinmeyen kaynak <arg:0></red>"
|
command.resource.enable.failure.unknown: "<red>Bilinmeyen kaynak <arg:0></red>"
|
||||||
command.resource.disable.success: "<white><arg:0> kaynağı devre dışı bırakıldı. Değişiklikleri uygulamak için <click:run_command:/ce reload all><u>/ce reload all</u></click> çalıştırın</white>"
|
command.resource.disable.success: "<white><arg:0> kaynağı devre dışı bırakıldı. Değişiklikleri uygulamak için <click:run_command:/ce reload all><u>/ce reload all</u></click> komutunu çalıştırın</white>"
|
||||||
command.resource.disable.failure.unknown: "<red>Bilinmeyen kaynak <arg:0></red>"
|
command.resource.disable.failure.unknown: "<red>Bilinmeyen kaynak <arg:0></red>"
|
||||||
command.resource.list: "<white>Etkin kaynaklar(<arg:0>): <green><arg:1></green><newline>Devre dışı kaynaklar(<arg:2>): <red><arg:3></red></white>"
|
command.resource.list: "<white>Etkin kaynaklar(<arg:0>): <green><arg:1></green><newline>Devre dışı kaynaklar(<arg:2>): <red><arg:3></red></white>"
|
||||||
command.upload.failure.not_supported: "<red>Mevcut barındırma yöntemi '<arg:0>' kaynak paketlerinin yüklenmesini desteklemiyor.</red>"
|
command.upload.failure.not_supported: "<red>Mevcut barındırma yöntemi '<arg:0>' kaynak paketlerinin yüklenmesini desteklemiyor.</red>"
|
||||||
command.upload.on_progress: "<white>Yükleme süreci başlatıldı. Daha fazla bilgi için konsolu kontrol edin.</white>"
|
command.upload.on_progress: "<white>Yükleme işlemi başlatıldı. Daha fazla bilgi için konsola bakın.</white>"
|
||||||
command.send_resource_pack.success.single: "<white>Kaynak paketi <arg:0> kişisine gönderildi.</white>"
|
command.send_resource_pack.success.single: "<white>Kaynak paketi <arg:0> kişisine gönderildi.</white>"
|
||||||
command.send_resource_pack.success.multiple: "<white>Kaynak paketleri <arg:0> oyuncuya gönderildi.</white>"
|
command.send_resource_pack.success.multiple: "<white>Kaynak paketleri <arg:0> oyuncuya gönderildi.</white>"
|
||||||
|
warning.config.pack.duplicated_files: "</red>Yinelenen dosyalar bulundu. Lütfen config.yml 'resource-pack.duplicated-files-handler' bölümünden bunları çözün.</red>"
|
||||||
# Outdated, needs update
|
warning.config.type.int: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yüklenemedi: '<arg:2>' değeri '<arg:3>' seçeneği için tamsayı türüne dönüştürülemiyor.</yellow>"
|
||||||
#warning.config.image.duplicated: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli yineleniyor.</yellow>"
|
warning.config.type.float: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yüklenemedi: '<arg:2>' değeri '<arg:3>' seçeneği için ondalık türüne dönüştürülemiyor.</yellow>"
|
||||||
#warning.config.image.lack_height: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli gerekli 'height' argümanı eksik.</yellow>"
|
warning.config.type.double: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yüklenemedi: '<arg:2>' değeri '<arg:3>' seçeneği için double türüne dönüştürülemiyor.</yellow>"
|
||||||
#warning.config.image.height_smaller_than_ascent: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli bitmap görsel kuralını ihlal ediyor: 'height' 'ascent'ten düşük olmamalı.</yellow>"
|
warning.config.type.quaternionf: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yüklenemedi: '<arg:2>' değeri '<arg:3>' seçeneği için Quaternionf türüne dönüştürülemiyor.</yellow>"
|
||||||
#warning.config.image.no_file: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli gerekli 'file' argümanı eksik.</yellow>"
|
warning.config.type.vector3f: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yüklenemedi: '<arg:2>' değeri '<arg:3>' seçeneği için Vector3f türüne dönüştürülemiyor.</yellow>"
|
||||||
#warning.config.image.invalid_resource_location: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görselinin 'file' argümanı [<arg:2>] yasal karakterler içeriyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters adresini okuyun</yellow>"
|
warning.config.structure.not_section: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yapılandırması bir yapılandırma bölümü olması beklenirken aslında bir '<arg:2>' türündedir.</yellow>"
|
||||||
#warning.config.image.invalid_font_name: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görselinin 'font' argümanı [<arg:2>] yasal karakterler içeriyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters adresini okuyun</yellow>"
|
warning.config.image.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen resim '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.image.lack_char: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli gerekli 'char' argümanı eksik.</yellow>"
|
warning.config.image.missing_height: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi gerekli 'height' argümanı eksik.</yellow>"
|
||||||
#warning.config.image.codepoint_in_use: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli <arg:2> fontunda başka bir görsel olan '<arg:5>' tarafından kullanılmış bir karakter[<arg:3>(<arg:4>)] kullanıyor.</yellow>"
|
warning.config.image.height_ascent_conflict: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi bitmap resim kuralını ihlal ediyor: 'height' argümanı '<arg:2>', 'ascent' argümanı '<arg:3>' değerinden düşük olmamalı.</yellow>"
|
||||||
#warning.config.image.invalid_codepoint_grid: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli geçersiz bir 'chars' kod noktası ızgarasına sahip.</yellow>"
|
warning.config.image.missing_file: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi gerekli 'file' argümanı eksik.</yellow>"
|
||||||
#warning.config.image.file_not_exist: "<yellow><arg:0> dosyasında sorun - '<arg:1>' görseli için '<arg:2>' PNG dosyası bulunamadı.</yellow>"
|
warning.config.image.invalid_file_chars: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi, yasak karakterler içeren '<arg:2>' 'file' argümanına sahip. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
#warning.config.recipe.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen tarif '<arg:1>'.</yellow>"
|
warning.config.image.invalid_font_chars: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi, yasak karakterler içeren '<arg:2>' 'font' argümanına sahip. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
#warning.config.i18n.unknown_locale: "<yellow><arg:0> dosyasında sorun - Bilinmeyen yerel ayar '<arg:1>'.</yellow>"
|
warning.config.image.missing_char: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi gerekli 'char' argümanı eksik.</yellow>"
|
||||||
#warning.config.template.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen şablon '<arg:1>'.</yellow>"
|
warning.config.image.codepoint_conflict: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi, <arg:2> yazı tipinde başka bir resim '<arg:5>' tarafından kullanılmış olan '<arg:3>(<arg:4>)' karakterini kullanıyor.</yellow>"
|
||||||
#warning.config.vanilla_loot.type_not_exist: "<yellow><arg:0> dosyasında sorun - '<arg:1>' vanilla ganimeti için 'type' ayarlanmamış.</yellow>"
|
warning.config.image.invalid_codepoint_grid: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resminin geçersiz bir 'chars' kod noktası ızgarası var.</yellow>"
|
||||||
#warning.config.vanilla_loot.block.invalid_target: "<yellow><arg:0> dosyasında sorun - '<arg:1>' vanilla ganimetinde geçersiz blok hedefi [<arg:2>].</yellow>"
|
warning.config.image.file_not_found: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi için '<arg:2>' PNG dosyası bulunamadı.</yellow>"
|
||||||
#warning.config.sound.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen ses '<arg:1>'.</yellow>"
|
warning.config.image.invalid_hex_value: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' resmi, geçerli bir onaltılık (16 tabanlı) değer olmayan '<arg:2>' unicode karakterini kullanıyor.</yellow>"
|
||||||
#warning.config.jukebox_song.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen müzik kutusu şarkısı '<arg:1>'.</yellow>"
|
warning.config.recipe.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen tarif '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.furniture.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen mobilya '<arg:1>'.</yellow>"
|
warning.config.recipe.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' tarifi gerekli 'type' argümanı eksik.</yellow>"
|
||||||
#warning.config.furniture.lack_placement: "<yellow><arg:0> dosyasında sorun - '<arg:1>' mobilyası gerekli 'placement' argümanı eksik.</yellow>"
|
warning.config.recipe.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' tarifi geçersiz bir tarif türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.furniture.element.lack_item: "<yellow><arg:0> dosyasında sorun - '<arg:1>' mobilyasının elementlerinden biri için gerekli 'item' argümanı eksik.</yellow>"
|
warning.config.recipe.invalid_item: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' tarifi geçersiz bir eşya '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.item.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen eşya '<arg:1>'.</yellow>"
|
warning.config.recipe.missing_ingredient: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' pişirme tarifi gerekli 'ingredient' argümanı eksik.</yellow>"
|
||||||
#warning.config.item.lack_material: "<yellow><arg:0> dosyasında sorun - '<arg:1>' eşyası gerekli 'material' argümanı eksik.</yellow>"
|
warning.config.recipe.missing_result: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' tarifi gerekli 'result' argümanı eksik.</yellow>"
|
||||||
#warning.config.item.invalid_material: "<yellow><arg:0> dosyasında sorun - '<arg:1>' eşyası geçersiz bir materyal türü olan '<arg:2>' kullanıyor.</yellow>"
|
warning.config.recipe.result.missing_id: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' tarifi, tarif sonucu için gerekli 'id' argümanı eksik.</yellow>"
|
||||||
#warning.config.item.bad_custom_model_data_value: "<yellow><arg:0> dosyasında sorun - '<arg:1>' eşyası çok büyük bir özel model verisi [<arg:2>] kullanıyor. 16.777.216'dan düşük bir değer kullanılması önerilir.</yellow>"
|
warning.config.recipe.crafting.invalid_category: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' üretim tarifi geçersiz bir kategori '<arg:2>' kullanıyor. İzin verilen kategoriler: [<arg:3>].</yellow>"
|
||||||
#warning.config.item.custom_model_data_conflict: "<yellow><arg:0> dosyasında sorun - '<arg:1>' eşyası '<arg:3>' eşyası tarafından zaten kullanılmış bir özel model verisi [<arg:2>] kullanıyor</yellow>"
|
warning.config.recipe.cooking.invalid_category: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' pişirme tarifi geçersiz bir kategori '<arg:2>' kullanıyor. İzin verilen kategoriler: [<arg:3>].</yellow>"
|
||||||
#warning.config.item.lack_model_id: "<yellow><arg:0> dosyasında sorun - '<arg:1>' eşyası gerekli 'custom-model-data' veya 'item-model' argümanı eksik.</yellow>"
|
warning.config.recipe.shaped.missing_pattern: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' şekilli tarifi gerekli 'pattern' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen blok '<arg:1>'.</yellow>"
|
warning.config.recipe.shaped.invalid_pattern: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' şekilli tarifi geçersiz bir desen '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.block.lack_state: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu gerekli 'state' argümanı eksik.</yellow>"
|
warning.config.recipe.shaped.invalid_symbol: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' şekilli tarifi, desende geçersiz bir sembol '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.block.state.lack_real_id: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'state' için gerekli 'id' argümanı eksik.</yellow>"
|
warning.config.recipe.smithing_transform.post_processor.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' demircilik dönüşüm tarifi, işlem sonrası işleyicilerinden biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.lack_state: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'state' için gerekli 'state' argümanı eksik.</yellow>"
|
warning.config.recipe.smithing_transform.post_processor.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' demircilik dönüşüm tarifi geçersiz bir işlem sonrası işleyici türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.block.state.lack_properties: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'states' için gerekli 'properties' bölümü eksik.</yellow>"
|
warning.config.recipe.smithing_transform.post_processor.keep_component.missing_components: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' demircilik dönüşüm tarifi, 'keep_components' işlem sonrası işleyicisi için gerekli 'components' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.lack_appearances: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'states' için gerekli 'appearances' bölümü eksik.</yellow>"
|
warning.config.recipe.smithing_transform.post_processor.keep_component.missing_tags: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' demircilik dönüşüm tarifi, 'keep_tags' işlem sonrası işleyicisi için gerekli 'tags' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.lack_variants: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'states' için gerekli 'variants' bölümü eksik.</yellow>"
|
warning.config.i18n.unknown_locale: "<yellow><arg:0> dosyasında sorun bulundu - Bilinmeyen yerel ayar '<arg:1>'.</yellow>"
|
||||||
#warning.config.block.state.variant.lack_appearance: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu '<arg:2>' varyantı için gerekli 'appearance' argümanı eksik.</yellow>"
|
warning.config.template.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen şablon '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.block.state.variant.invalid_appearance: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğunda '<arg:2>' varyantının var olmayan bir görünüm olan '<arg:3>' kullandığı hatası var.</yellow>"
|
warning.config.template.argument.self_increase_int.invalid_range: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' şablonu, 'self_increase_int' argümanında 'to' '<arg:3>' değerinden daha büyük bir 'from' '<arg:2>' değeri kullanıyor.</yellow>"
|
||||||
#warning.config.block.state.invalid_state: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu geçersiz bir vanilla blok durumu olan '<arg:2>' kullanıyor."
|
warning.config.template.argument.list.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' şablonu, argüman olarak bir 'List' bekleyen bir 'list' argümanı kullanıyor, ancak giriş argümanı bir '<arg:2>' türünde.</yellow>"
|
||||||
#warning.config.block.state.unavailable_state: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu kullanılamayan bir vanilla blok durumu olan '<arg:2>' kullanıyor."
|
warning.config.vanilla_loot.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' vanilya ganimeti gerekli 'type' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.invalid_vanilla_state_id: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu mevcut slot aralığı '0~<arg:3>' dışında bir vanilla blok durumu '<arg:2>' kullanıyor."
|
warning.config.vanilla_loot.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' vanilya ganimeti geçersiz bir tür '<arg:2>' kullanıyor. İzin verilen türler: [<arg:3>].</yellow>"
|
||||||
#warning.config.block.state.conflict: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu '<arg:3>' tarafından zaten kullanılmış bir vanilla blok durumu '<arg:2>' kullanıyor."
|
warning.config.vanilla_loot.block.invalid_target: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' vanilya ganimetinde geçersiz blok hedefi '<arg:2>'.</yellow>"
|
||||||
#warning.config.block.state.bind_real_state: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu '<arg:2>' için gerçek blok durumu bağlanamadı çünkü durum '<arg:3>' tarafından kullanılıyor.</yellow>"
|
warning.config.sound.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen ses '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.block.state.invalid_property_structure: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğunda geçersiz bir özellik yapısı '<arg:2>' var."
|
warning.config.sound.missing_sounds: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' sesi gerekli 'sounds' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.invalid_property: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu için '<arg:2>' özelliği oluşturulamadı: <arg:3>."
|
warning.config.sound.missing_name: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' sesi gerekli 'name' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.no_model_set: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu gerekli 'model' veya 'models' argümanı eksik.</yellow>"
|
warning.config.jukebox_song.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen müzik çalar şarkısı '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.block.state.invalid_real_state_id: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu mevcut slot aralığı '0~<arg:3>' dışında bir gerçek blok durumu '<arg:2>' kullanıyor. Eğer slotlar tükenmişse 'additional-real-blocks.yml' içine daha fazla gerçek durum eklemeyi düşünün.</yellow>"
|
warning.config.jukebox_song.missing_sound: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' müzik çalar şarkısı gerekli 'sound' argümanı eksik.</yellow>"
|
||||||
#warning.config.block.state.model.lack_path: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğu 'model' için gerekli 'path' seçeneği eksik.</yellow>"
|
warning.config.furniture.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen mobilya '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.block.state.model.invalid_resource_location: "<yellow><arg:0> dosyasında sorun - '<arg:1>' bloğunun 'path' argümanı [<arg:2>] yasal karakterler içeriyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters adresini okuyun</yellow>"
|
warning.config.furniture.missing_placement: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' mobilyası gerekli 'placement' argümanı eksik.</yellow>"
|
||||||
#warning.config.model.generation.conflict: "<yellow><arg:0> dosyasında sorun - '<arg:1>' için model oluşturulamadı çünkü iki veya daha fazla yapılandırma aynı yolla farklı json modelleri oluşturmaya çalışıyor: '<arg:2>'</yellow>"
|
warning.config.furniture.element.missing_item: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' mobilyası, elementlerinden biri için gerekli 'item' argümanı eksik.</yellow>"
|
||||||
#warning.config.model.generation.texture.invalid_resource_location: "<yellow><arg:0> dosyasında sorun - '<arg:1>' yapılandırmasının '<arg:2>' doku argümanı [<arg:3>] yasal karakterler içeriyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters adresini okuyun</yellow>"
|
warning.config.furniture.settings.unknown: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' mobilyası bilinmeyen bir ayar türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.model.generation.parent.invalid_resource_location: "<yellow><arg:0> dosyasında sorun - '<arg:1>' yapılandırmasının parent argümanı [<arg:2>] yasal karakterler içeriyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters adresini okuyun</yellow>"
|
warning.config.furniture.hitbox.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' mobilyası geçersiz bir hitbox türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.emoji.lack_keywords: "<yellow><arg:0> dosyasında sorun - '<arg:1>' emojisi gerekli 'keywords' argümanı eksik.</yellow>"
|
warning.config.furniture.hitbox.custom.invalid_entity: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' mobilyası, geçersiz varlık türü '<arg:2>' olan özel bir hitbox kullanıyor.</yellow>"
|
||||||
#warning.config.emoji.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen emoji '<arg:1>'.</yellow>"
|
warning.config.item.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen eşya '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
#warning.config.emoji.invalid_image: "<yellow><arg:0> dosyasında sorun - '<arg:1>' emojisi geçersiz bir 'image' argümanı '<arg:2>' kullanıyor.</yellow>"
|
warning.config.item.settings.unknown: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası bilinmeyen bir ayar türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.advancement.duplicated: "<yellow><arg:0> dosyasında sorun - Yinelenen ilerleme '<arg:1>'.</yellow>"
|
warning.config.item.missing_material: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası gerekli 'material' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.lack_type: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Host için gerekli 'type' argümanı eksik.</yellow>"
|
warning.config.item.invalid_material: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası geçersiz bir malzeme türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.invalid_type: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Host 'type' [<arg:0>] geçersiz. Lütfen https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host adresini okuyun</yellow>"
|
warning.config.item.bad_custom_model_data: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası çok büyük bir özel model verisi '<arg:2>' kullanıyor. 16.777.216'dan düşük bir değer kullanmanız önerilir.</yellow>"
|
||||||
#warning.config.host.external.lack_url: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Harici host için gerekli 'url' argümanı eksik.</yellow>"
|
warning.config.item.custom_model_data_conflict: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, '<arg:3>' eşyası tarafından işgal edilmiş bir özel model verisi '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.alist.lack_api_url: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Alist host için gerekli 'api-url' argümanı eksik.</yellow>"
|
warning.config.item.missing_model_id: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası gerekli 'custom-model-data' veya 'item-model' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.alist.lack_username: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Alist host için gerekli 'username' argümanı veya 'CE_ALIST_USERNAME' ortam değişkeni eksik.</yellow>"
|
warning.config.item.behavior.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, eşya davranışı için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.alist.lack_password: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Alist host için gerekli 'password' argümanı veya 'CE_ALIST_PASSWORD' ortam değişkeni eksik.</yellow>"
|
warning.config.item.behavior.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası geçersiz bir eşya davranış türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.alist.lack_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Alist host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
warning.config.item.behavior.block.missing_block: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'block_item' davranışı için gerekli 'block' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.dropbox.lack_app_key: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Dropbox host için gerekli 'app-key' argümanı veya 'CE_DROPBOX_APP_KEY' ortam değişkeni eksik.</yellow>"
|
warning.config.item.behavior.furniture.missing_furniture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'furniture_item' davranışı için gerekli 'furniture' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.dropbox.lack_app_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Dropbox host için gerekli 'app-secret' argümanı veya 'CE_DROPBOX_APP_SECRET' ortam değişkeni eksik.</yellow>"
|
warning.config.item.behavior.liquid_collision.missing_block: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'liquid_collision_block_item' davranışı için gerekli 'block' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.dropbox.lack_refresh_token: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Dropbox host için gerekli 'refresh-token' argümanı veya 'CE_DROPBOX_REFRESH_TOKEN' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası geçersiz bir model türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.dropbox.lack_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Dropbox host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
warning.config.item.model.tint.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, renk tonu için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.lobfile.lack_api_key: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Lobfile host için gerekli 'api-key' argümanı eksik.</yellow>"
|
warning.config.item.model.tint.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası geçersiz bir renk tonu türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.onedrive.lack_client_id: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - OneDrive host için gerekli 'client-id' argümanı veya 'CE_ONEDRIVE_CLIENT_ID' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.tint.constant.missing_value: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, sabit renk tonu için gerekli 'value' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.onedrive.lack_client_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - OneDrive host için gerekli 'client-secret' argümanı veya 'CE_ONEDRIVE_CLIENT_SECRET' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.tint.grass.invalid_temp: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, çimen renk tonu için 0 ile 1 arasında olması beklenen geçersiz bir sıcaklık '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.onedrive.lack_refresh_token: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - OneDrive host için gerekli 'refresh-token' argümanı veya 'CE_ONEDRIVE_REFRESH_TOKEN' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.tint.grass.invalid_downfall: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, çimen renk tonu için 0 ile 1 arasında olması beklenen geçersiz bir yağış '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.onedrive.lack_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - OneDrive host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
warning.config.item.model.tint.invalid_value: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası geçersiz bir renk tonu '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.s3.lack_endpoint: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - S3 host için gerekli 'endpoint' argümanı eksik.</yellow>"
|
warning.config.item.model.base.missing_path: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:model' modeli için gerekli 'path' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.s3.lack_bucket: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - S3 host için gerekli 'bucket' argümanı eksik.</yellow>"
|
warning.config.item.model.base.invalid_path: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyasının, yasak karakterler içeren geçersiz bir 'path' argümanı '<arg:2>' var. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
#warning.config.host.s3.lack_access_key_id: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - S3 host için gerekli 'access-key-id' argümanı veya 'CE_S3_ACCESS_KEY_ID' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.condition.missing_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:condition' modeli için gerekli 'property' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.s3.lack_access_key_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - S3 host için gerekli 'access-key-secret' argümanı veya 'CE_S3_ACCESS_KEY_SECRET' ortam değişkeni eksik.</yellow>"
|
warning.config.item.model.condition.invalid_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:condition' modeli için geçersiz bir özellik '<arg:2>' kullanıyor.</yellow>"
|
||||||
#warning.config.host.s3.lack_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - S3 host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
warning.config.item.model.condition.missing_on_true: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:condition' modeli için gerekli 'on-true' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.self.lack_ip: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Self host için gerekli 'ip' argümanı eksik.</yellow>"
|
warning.config.item.model.condition.missing_on_false: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:condition' modeli için gerekli 'on-false' argümanı eksik.</yellow>"
|
||||||
#warning.config.host.self.invalid_port: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' konumunda sorun - Self host için geçersiz 'port' [<arg:0>].</yellow>"
|
warning.config.item.model.condition.keybind.missing: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:keybind_down' özelliği için gerekli 'keybind' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.condition.has_component.missing_component: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:has_component' özelliği için gerekli 'component' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.composite.missing_models: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:composite' modeli için gerekli 'models' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.missing_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:range_dispatch' modeli için gerekli 'property' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.invalid_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:range_dispatch' modeli için geçersiz bir özellik '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.missing_entries: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:composite' modeli için gerekli 'entries' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.entry.missing_model: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:composite' modelindeki girişlerden biri için gerekli 'model' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.compass.missing_target: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:compass' özelliği için gerekli 'target' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.range_dispatch.time.missing_source: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:time' özelliği için gerekli 'source' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.missing_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:select' modeli için gerekli 'property' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.invalid_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:select' modeli için geçersiz bir özellik '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.item.model.select.missing_cases: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:select' modeli için gerekli 'cases' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.case.missing_when: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:select' modelindeki durumlardan biri için gerekli 'when' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.case.missing_model: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:select' modelindeki durumlardan biri için gerekli 'model' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.block_state.missing_property: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:block_state' özelliği için gerekli 'block-state-property' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.select.local_time.missing_pattern: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:local_time' özelliği için gerekli 'pattern' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:special' modeli için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:special' modeli için geçersiz bir tür '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.item.model.special.banner.missing_color: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:banner' özel modeli için gerekli 'color' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.bed.missing_texture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:bed' özel modeli için gerekli 'texture' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.sign.missing_wood_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:hanging_sign'/'minecraft:standing_sign' özel modeli için gerekli 'wood-type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.sign.missing_texture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:hanging_sign'/'minecraft:standing_sign' özel modeli için gerekli 'texture' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.chest.missing_texture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:chest' özel modeli için gerekli 'texture' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.chest.invalid_openness: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:chest' özel modeli için geçersiz bir 'openness' değeri '<arg:2>' kullanıyor. Geçerli aralık '0~1.'</yellow>"
|
||||||
|
warning.config.item.model.special.shulker_box.missing_texture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:shulker_box' özel modeli için gerekli 'texture' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.shulker_box.invalid_openness: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:shulker_box' özel modeli için geçersiz bir 'openness' değeri '<arg:2>' kullanıyor. Geçerli aralık '0~1.'</yellow>"
|
||||||
|
warning.config.item.model.special.head.missing_kind: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:head' özel modeli için gerekli 'kind' argümanı eksik.</yellow>"
|
||||||
|
warning.config.item.model.special.head.missing_texture: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' eşyası, 'minecraft:head' özel modeli için gerekli 'texture' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen blok '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
|
warning.config.block.missing_state: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu gerekli 'state' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.state.property.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, '<arg:2>' özelliği için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.state.property.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, '<arg:3>' özelliği için geçersiz bir 'type' argümanı '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.state.property.integer.invalid_range: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, '<arg:3>' tamsayı özelliği için geçersiz bir 'range' argümanı '<arg:2>' kullanıyor. Doğru sözdizimi: 1~2.</yellow>"
|
||||||
|
warning.config.block.state.property.invalid_format: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, geçersiz bir blok durum özelliği formatı '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.state.missing_real_id: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'state' için gerekli 'id' argümanı eksik. 'id', her blok durumu türü için benzersiz olan sunucu tarafı blok kimliğidir. 'note_block' ve id 30 ile bir sunucu tarafı blok oluşturursanız, gerçek blok kimliği 'craftengine:note_block_30' olur.</yellow>"
|
||||||
|
warning.config.block.state.missing_state: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'state' için gerekli 'state' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.state.missing_properties: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'states' için gerekli 'properties' bölümü eksik.</yellow>"
|
||||||
|
warning.config.block.state.missing_appearances: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'states' için gerekli 'appearances' bölümü eksik.</yellow>"
|
||||||
|
warning.config.block.state.missing_variants: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'states' için gerekli 'variants' bölümü eksik.</yellow>"
|
||||||
|
warning.config.block.state.variant.missing_appearance: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, '<arg:2>' varyantı için gerekli 'appearance' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.state.variant.invalid_appearance: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğunda, '<arg:2>' varyantının var olmayan bir görünüm '<arg:3>' kullandığı bir hata var.</yellow>"
|
||||||
|
warning.config.block.state.invalid_vanilla: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu geçersiz bir vanilya blok durumu '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.state.unavailable_vanilla: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu kullanılamayan bir vanilya blok durumu '<arg:2>' kullanıyor. Lütfen bu durumu mappings.yml dosyasında serbest bırakın.</yellow>"
|
||||||
|
warning.config.block.state.invalid_vanilla_id: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, mevcut yuva aralığı '0~<arg:3>' aşan bir vanilya blok durumu '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.state.conflict: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, '<arg:3>' tarafından işgal edilmiş bir vanilya blok durumu '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.state.bind_failed: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, durum '<arg:3>' tarafından işgal edildiği için '<arg:2>' için gerçek blok durumu bağlamada başarısız oldu.</yellow>"
|
||||||
|
warning.config.block.state.missing_model: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu gerekli 'model' veya 'models' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.state.invalid_real_id: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, mevcut yuva aralığı '0~<arg:3>' aşan bir gerçek blok durumu '<arg:2>' kullanıyor. Yuvalar kullanılmışsa, 'additional-real-blocks.yml' dosyasına daha fazla gerçek durum eklemeyi düşünün.</yellow>"
|
||||||
|
warning.config.block.state.model.missing_path: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'model' için gerekli 'path' seçeneği eksik.</yellow>"
|
||||||
|
warning.config.block.state.model.invalid_path: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğunun, yasak karakterler içeren bir 'path' argümanı '<arg:2>' var. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
|
warning.config.block.settings.unknown: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu bilinmeyen bir ayar türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.behavior.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, blok davranışı için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu geçersiz bir blok davranış türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.block.behavior.concrete.missing_solid: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'concrete_block' davranışı için gerekli 'solid-block' seçeneği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.crop.missing_age: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'crop_block' davranışı için gerekli 'age' özelliği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.sugar_cane.missing_age: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'sugar_cane_block' davranışı için gerekli 'age' özelliği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.leaves.missing_persistent: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'leaves_block' davranışı için gerekli 'persistent' özelliği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.leaves.missing_distance: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'leaves_block' davranışı için gerekli 'distance' özelliği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.sapling.missing_stage: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'sapling_block' davranışı için gerekli 'stage' özelliği eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.sapling.missing_feature: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'sapling_block' davranışı için gerekli 'feature' argümanı eksik.</yellow>"
|
||||||
|
warning.config.block.behavior.strippable.missing_stripped: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' bloğu, 'strippable_block' davranışı için gerekli 'stripped' argümanı eksik.</yellow>"
|
||||||
|
warning.config.model.generation.missing_parent: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yapılandırması, 'generation' bölümünde gerekli 'parent' argümanı eksik.</yellow>"
|
||||||
|
warning.config.model.generation.conflict: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' için model oluşturulurken hata; iki veya daha fazla yapılandırma aynı yolla farklı json modelleri oluşturmaya çalışıyor: '<arg:2>'.</yellow>"
|
||||||
|
warning.config.model.generation.texture.invalid: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yapılandırması, yasak karakterler içeren '<arg:3>' yoluna sahip bir '<arg:2>' dokusuna sahip. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
|
warning.config.model.generation.parent.invalid: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' yapılandırması, yasak karakterler içeren bir parent argümanı '<arg:2>' kullanıyor. Lütfen https://minecraft.wiki/w/Resource_location#Legal_characters sayfasını okuyun.</yellow>"
|
||||||
|
warning.config.emoji.missing_keywords: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' emojisi gerekli 'keywords' argümanı eksik.</yellow>"
|
||||||
|
warning.config.emoji.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen emoji '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
|
warning.config.emoji.invalid_image: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>' emojisi geçersiz bir 'image' argümanı '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.advancement.duplicate: "<yellow><arg:0> dosyasında sorun bulundu - Yinelenen ilerleme '<arg:1>'. Diğer dosyalarda aynı yapılandırmanın olup olmadığını kontrol edin.</yellow>"
|
||||||
|
warning.config.loot_table.missing_pools: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', gerekli 'pools' argümanı eksik olan yanlış yapılandırılmış bir ganimet tablosuna sahip.</yellow>"
|
||||||
|
warning.config.loot_table.invalid_pools_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'pools' bir dizi/harita listesi olmalı, mevcut tür: '<arg:2>'.</yellow>"
|
||||||
|
warning.config.loot_table.invalid_conditions_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'conditions' bir harita listesi olmalı, mevcut tür: '<arg:2>'.</yellow>"
|
||||||
|
warning.config.loot_table.invalid_functions_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'functions' bir harita listesi olmalı, mevcut tür: '<arg:2>'.</yellow>"
|
||||||
|
warning.config.loot_table.invalid_entries_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'entries' bir harita listesi olmalı, mevcut tür: '<arg:2>'.</yellow>"
|
||||||
|
warning.config.loot_table.function.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, fonksiyonlardan biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.function.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, fonksiyonlardan biri geçersiz bir fonksiyon türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.loot_table.function.apply_bonus.missing_enchantment: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'apply_bonus' fonksiyonu için gerekli 'enchantment' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.function.apply_bonus.missing_formula: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'apply_bonus' fonksiyonu için gerekli 'formula' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.function.drop_exp.missing_count: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'drop_exp' fonksiyonu için gerekli 'count' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.function.set_count.missing_count: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'set_count' fonksiyonu için gerekli 'count' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.entry.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, girişlerden biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.entry.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, girişlerden biri geçersiz bir giriş türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.loot_table.entry.exp.missing_count: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'exp' girişi için gerekli 'count' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.entry.item.missing_item: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, 'item' girişi için gerekli 'item' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.condition.missing_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, koşullardan biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.loot_table.condition.invalid_type: "<yellow><arg:0> dosyasında sorun bulundu - '<arg:1>', yanlış yapılandırılmış bir ganimet tablosuna sahip, koşullardan biri geçersiz bir koşul türü '<arg:2>' kullanıyor.</yellow>"
|
||||||
|
warning.config.host.missing_type: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - Host için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.invalid_type: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - Host türü '<arg:0>' geçersiz. Lütfen https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host sayfasını okuyun.</yellow>"
|
||||||
|
warning.config.host.external.missing_url: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - Harici host için gerekli 'url' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.alist.missing_api_url: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - alist host için gerekli 'api-url' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.alist.missing_username: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - alist host için gerekli 'username' argümanı veya 'CE_ALIST_USERNAME' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.alist.missing_password: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - alist host için gerekli 'password' argümanı veya 'CE_ALIST_PASSWORD' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.alist.missing_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - alist host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.dropbox.missing_app_key: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - dropbox host için gerekli 'app-key' argümanı veya 'CE_DROPBOX_APP_KEY' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.dropbox.missing_app_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - dropbox host için gerekli 'app-secret' argümanı veya 'CE_DROPBOX_APP_SECRET' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.dropbox.missing_refresh_token: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - dropbox host için gerekli 'refresh-token' argümanı veya 'CE_DROPBOX_REFRESH_TOKEN' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.dropbox.missing_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - dropbox host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.lobfile.missing_api_key: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - lobfile host için gerekli 'api-key' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.onedrive.missing_client_id: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - onedrive host için gerekli 'client-id' argümanı veya 'CE_ONEDRIVE_CLIENT_ID' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.onedrive.missing_client_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - onedrive host için gerekli 'client-secret' argümanı veya 'CE_ONEDRIVE_CLIENT_SECRET' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.onedrive.missing_refresh_token: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - onedrive host için gerekli 'refresh-token' argümanı veya 'CE_ONEDRIVE_REFRESH_TOKEN' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.onedrive.missing_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - onedrive host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.s3.missing_endpoint: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - s3 host için gerekli 'endpoint' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.s3.missing_bucket: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - s3 host için gerekli 'bucket' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.s3.missing_access_key: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - s3 host için gerekli 'access-key-id' argümanı veya 'CE_S3_ACCESS_KEY_ID' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.s3.missing_secret: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - s3 host için gerekli 'access-key-secret' argümanı veya 'CE_S3_ACCESS_KEY_SECRET' ortam değişkeni eksik.</yellow>"
|
||||||
|
warning.config.host.s3.missing_upload_path: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - s3 host için gerekli 'upload-path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.self.missing_ip: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - self host için gerekli 'ip' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.self.invalid_port: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - self host için geçersiz port '<arg:0>'.</yellow>"
|
||||||
|
warning.config.host.gitlab.missing_url: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - gitlab host için gerekli 'gitlab-url' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.gitlab.missing_token: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - gitlab host için gerekli 'access-token' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.gitlab.missing_project: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - gitlab host için gerekli 'project-id' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.proxy.missing_host: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - proxy için gerekli 'host' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.proxy.missing_port: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - proxy için gerekli 'port' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.proxy.missing_scheme: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - proxy için gerekli 'scheme' argümanı eksik.</yellow>"
|
||||||
|
warning.config.host.proxy.invalid: "<yellow>config.yml dosyasında 'resource-pack.delivery.hosting' bölümünde sorun bulundu - Geçersiz proxy '<arg:0>'.</yellow>"
|
||||||
|
warning.config.conflict_matcher.missing_type: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - İşleyicilerden biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.invalid_type: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - Terimlerden biri geçersiz bir tür '<arg:0>' kullanıyor.</yellow>"
|
||||||
|
warning.config.conflict_matcher.exact.missing_path: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'exact' eşleştiricisi için gerekli 'path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.contains.missing_path: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'contains' eşleştiricisi için gerekli 'path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.filename.missing_name: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'filename' eşleştiricisi için gerekli 'path' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.pattern.missing_pattern: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'pattern' eşleştiricisi için gerekli 'pattern' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.parent_prefix.missing_prefix: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'parent_path_prefix' eşleştiricisi için gerekli 'prefix' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.parent_suffix.missing_suffix: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'parent_path_suffix' eşleştiricisi için gerekli 'suffix' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.inverted.missing_term: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'inverted' eşleştiricisi için gerekli 'term' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.all_of.missing_terms: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'all_of' eşleştiricisi için gerekli 'terms' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_matcher.any_of.missing_terms: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - 'any_of' eşleştiricisi için gerekli 'terms' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_resolution.missing_type: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - Çözümlerden biri için gerekli 'type' argümanı eksik.</yellow>"
|
||||||
|
warning.config.conflict_resolution.invalid_type: "<yellow>config.yml dosyasında 'resource-pack.duplicated-files-handler' bölümünde sorun bulundu - Çözümlerden biri geçersiz bir tür '<arg:0>' kullanıyor.</yellow>"
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
# 别动这个
|
# 别动这个
|
||||||
lang-version: "${lang_version}"
|
lang-version: "${lang_version}"
|
||||||
|
|
||||||
# 命令
|
|
||||||
exception.invalid_syntax: "<red>无效语法. 正确语法: <white><arg:0></white></red>"
|
exception.invalid_syntax: "<red>无效语法. 正确语法: <white><arg:0></white></red>"
|
||||||
exception.invalid_argument: "<red>无效参数. 原因: <white><arg:0></white></red>"
|
exception.invalid_argument: "<red>无效参数. 原因: <white><arg:0></white></red>"
|
||||||
exception.invalid_sender: "<red><arg:0> 不允许执行该命令. 执行者必须是 <arg:1></red>"
|
exception.invalid_sender: "<red><arg:0> 不允许执行该命令. 执行者必须是 <arg:1></red>"
|
||||||
@@ -70,6 +69,8 @@ warning.config.type.float: "<yellow>在文件 <arg:0> 发现问题 - 无法加
|
|||||||
warning.config.type.double: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为双精度类型 (选项 '<arg:3>')</yellow>"
|
warning.config.type.double: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为双精度类型 (选项 '<arg:3>')</yellow>"
|
||||||
warning.config.type.quaternionf: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为四元数类型 (选项 '<arg:3>')</yellow>"
|
warning.config.type.quaternionf: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为四元数类型 (选项 '<arg:3>')</yellow>"
|
||||||
warning.config.type.vector3f: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为三维向量类型 (选项 '<arg:3>')</yellow>"
|
warning.config.type.vector3f: "<yellow>在文件 <arg:0> 发现问题 - 无法加载 '<arg:1>': 无法将 '<arg:2>' 转换为三维向量类型 (选项 '<arg:3>')</yellow>"
|
||||||
|
warning.config.number.missing_type: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 缺少数字类型所需的 'type' 参数</yellow>"
|
||||||
|
warning.config.number.invalid_type: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 使用了无效的数字类型 '<arg:2>'</yellow>"
|
||||||
warning.config.number.missing_argument: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 缺少数字参数</yellow>"
|
warning.config.number.missing_argument: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 缺少数字参数</yellow>"
|
||||||
warning.config.number.invalid_format: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 使用了无效的数字格式 '<arg:2>'</yellow>"
|
warning.config.number.invalid_format: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 使用了无效的数字格式 '<arg:2>'</yellow>"
|
||||||
warning.config.number.fixed.missing_value: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 缺少 'constant' 数字类型所需的 'value' 参数</yellow>"
|
warning.config.number.fixed.missing_value: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 缺少 'constant' 数字类型所需的 'value' 参数</yellow>"
|
||||||
@@ -222,6 +223,8 @@ warning.config.block.behavior.leaves.missing_distance: "<yellow>在文件 <arg:0
|
|||||||
warning.config.block.behavior.sapling.missing_stage: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'sapling_block' 行为缺少必需的 'stage' 属性</yellow>"
|
warning.config.block.behavior.sapling.missing_stage: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'sapling_block' 行为缺少必需的 'stage' 属性</yellow>"
|
||||||
warning.config.block.behavior.sapling.missing_feature: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'sapling_block' 行为缺少必需的 'feature' 参数</yellow>"
|
warning.config.block.behavior.sapling.missing_feature: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'sapling_block' 行为缺少必需的 'feature' 参数</yellow>"
|
||||||
warning.config.block.behavior.strippable.missing_stripped: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'strippable_block' 行为缺少必需的 'stripped' 参数</yellow>"
|
warning.config.block.behavior.strippable.missing_stripped: "<yellow>在文件 <arg:0> 发现问题 - 方块 '<arg:1>' 的 'strippable_block' 行为缺少必需的 'stripped' 参数</yellow>"
|
||||||
|
warning.config.block.event.condition.missing_type: "<yellow>在文件 <arg:0> - 方块 '<arg:1>' 的事件条件缺少 'type' 参数</yellow>"
|
||||||
|
warning.config.block.event.condition.invalid_type: "<yellow>在文件 <arg:0> - 方块 '<arg:1>' 使用了无效的事件条件类型 '<arg:2>'</yellow>"
|
||||||
warning.config.model.generation.missing_parent: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 的 'generation' 段落缺少必需的 'parent' 参数</yellow>"
|
warning.config.model.generation.missing_parent: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 的 'generation' 段落缺少必需的 'parent' 参数</yellow>"
|
||||||
warning.config.model.generation.conflict: "<yellow>在文件 <arg:0> 发现问题 - 无法为 '<arg:1>' 生成模型 存在多个配置尝试使用相同路径 '<arg:2>' 生成不同的 JSON 模型</yellow>"
|
warning.config.model.generation.conflict: "<yellow>在文件 <arg:0> 发现问题 - 无法为 '<arg:1>' 生成模型 存在多个配置尝试使用相同路径 '<arg:2>' 生成不同的 JSON 模型</yellow>"
|
||||||
warning.config.model.generation.texture.invalid: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 的纹理 '<arg:2>' 路径 '<arg:3>' 包含非法字符 请参考 https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID#%E5%90%88%E6%B3%95%E5%AD%97%E7%AC%A6</yellow>"
|
warning.config.model.generation.texture.invalid: "<yellow>在文件 <arg:0> 发现问题 - 配置项 '<arg:1>' 的纹理 '<arg:2>' 路径 '<arg:3>' 包含非法字符 请参考 https://zh.minecraft.wiki/w/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID#%E5%90%88%E6%B3%95%E5%AD%97%E7%AC%A6</yellow>"
|
||||||
@@ -247,10 +250,6 @@ warning.config.loot_table.entry.exp.missing_count: "<yellow>在文件 <arg:0>
|
|||||||
warning.config.loot_table.entry.item.missing_item: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 'item' 条目缺少必需的 'item' 参数</yellow>"
|
warning.config.loot_table.entry.item.missing_item: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 'item' 条目缺少必需的 'item' 参数</yellow>"
|
||||||
warning.config.loot_table.condition.missing_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个条件缺少必需的 'type' 参数</yellow>"
|
warning.config.loot_table.condition.missing_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个条件缺少必需的 'type' 参数</yellow>"
|
||||||
warning.config.loot_table.condition.invalid_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个条件使用了无效的条件类型 '<arg:2>'</yellow>"
|
warning.config.loot_table.condition.invalid_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个条件使用了无效的条件类型 '<arg:2>'</yellow>"
|
||||||
warning.config.loot_table.condition.table_bonus.missing_enchantment: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 'table_bonus' 条件缺少必需的 'enchantment' 参数</yellow>"
|
|
||||||
warning.config.loot_table.condition.table_bonus.missing_chances: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 'table_bonus' 条件缺少必需的 'chances' 参数</yellow>"
|
|
||||||
warning.config.loot_table.number.missing_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个数值缺少必需的 'type' 参数</yellow>"
|
|
||||||
warning.config.loot_table.number.invalid_type: "<yellow>在文件 <arg:0> 发现问题 - '<arg:1>' 的战利品表配置错误 某个数值使用了无效的数值类型 '<arg:2>'</yellow>"
|
|
||||||
warning.config.host.missing_type: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 缺少必需的 'type' 参数</yellow>"
|
warning.config.host.missing_type: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 缺少必需的 'type' 参数</yellow>"
|
||||||
warning.config.host.invalid_type: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 无效的托管类型 '' 请参考 https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host</yellow>"
|
warning.config.host.invalid_type: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 无效的托管类型 '' 请参考 https://mo-mi.gitbook.io/xiaomomi-plugins/craftengine/plugin-wiki/craftengine/resource-pack/host</yellow>"
|
||||||
warning.config.host.external.missing_url: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 外部托管缺少必需的 'url' 参数</yellow>"
|
warning.config.host.external.missing_url: "<yellow>在 config.yml 的 'resource-pack.delivery.hosting' 处发现问题 - 外部托管缺少必需的 'url' 参数</yellow>"
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ public class CropBlockBehavior extends BushBlockBehavior {
|
|||||||
if (i > maxAge) {
|
if (i > maxAge) {
|
||||||
i = maxAge;
|
i = maxAge;
|
||||||
}
|
}
|
||||||
FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, immutableBlockState.with(this.ageProperty, i).customBlockState().handle(), UpdateOption.UPDATE_NONE.flags());
|
FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, immutableBlockState.with(this.ageProperty, i).customBlockState().handle(), UpdateOption.UPDATE_ALL.flags());
|
||||||
if (sendParticles) {
|
if (sendParticles) {
|
||||||
world.spawnParticle(ParticleUtils.getParticle("HAPPY_VILLAGER"), x + 0.5, y + 0.5, z + 0.5, 15, 0.25, 0.25, 0.25);
|
world.spawnParticle(ParticleUtils.getParticle("HAPPY_VILLAGER"), x + 0.5, y + 0.5, z + 0.5, 15, 0.25, 0.25, 0.25);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import net.bytebuddy.implementation.bind.annotation.AllArguments;
|
|||||||
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
|
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
|
||||||
import net.bytebuddy.implementation.bind.annotation.SuperCall;
|
import net.bytebuddy.implementation.bind.annotation.SuperCall;
|
||||||
import net.bytebuddy.implementation.bind.annotation.This;
|
import net.bytebuddy.implementation.bind.annotation.This;
|
||||||
|
import net.bytebuddy.implementation.bytecode.assign.Assigner;
|
||||||
import net.bytebuddy.implementation.bytecode.assign.TypeCasting;
|
import net.bytebuddy.implementation.bytecode.assign.TypeCasting;
|
||||||
import net.bytebuddy.implementation.bytecode.member.FieldAccess;
|
import net.bytebuddy.implementation.bytecode.member.FieldAccess;
|
||||||
import net.bytebuddy.implementation.bytecode.member.MethodReturn;
|
import net.bytebuddy.implementation.bytecode.member.MethodReturn;
|
||||||
@@ -77,6 +78,7 @@ public class BukkitInjector {
|
|||||||
|
|
||||||
private static Class<?> clazz$InjectedPalettedContainer;
|
private static Class<?> clazz$InjectedPalettedContainer;
|
||||||
private static Class<?> clazz$InjectedLevelChunkSection;
|
private static Class<?> clazz$InjectedLevelChunkSection;
|
||||||
|
private static MethodHandle constructor$InjectedLevelChunkSection;
|
||||||
|
|
||||||
private static VarHandle varHandle$InjectedPalettedContainer$target;
|
private static VarHandle varHandle$InjectedPalettedContainer$target;
|
||||||
|
|
||||||
@@ -104,6 +106,7 @@ public class BukkitInjector {
|
|||||||
.name("net.minecraft.world.level.chunk.InjectedPalettedContainer")
|
.name("net.minecraft.world.level.chunk.InjectedPalettedContainer")
|
||||||
.implement(InjectedHolder.Palette.class)
|
.implement(InjectedHolder.Palette.class)
|
||||||
.defineField("target", Reflections.clazz$PalettedContainer, Visibility.PUBLIC)
|
.defineField("target", Reflections.clazz$PalettedContainer, Visibility.PUBLIC)
|
||||||
|
.defineField("active", boolean.class, Visibility.PUBLIC)
|
||||||
.defineField("cesection", CESection.class, Visibility.PRIVATE)
|
.defineField("cesection", CESection.class, Visibility.PRIVATE)
|
||||||
.defineField("cechunk", CEChunk.class, Visibility.PRIVATE)
|
.defineField("cechunk", CEChunk.class, Visibility.PRIVATE)
|
||||||
.defineField("cepos", SectionPos.class, Visibility.PRIVATE)
|
.defineField("cepos", SectionPos.class, Visibility.PRIVATE)
|
||||||
@@ -116,6 +119,10 @@ public class BukkitInjector {
|
|||||||
.intercept(MethodDelegation.to(GetAndSetInterceptor.INSTANCE))
|
.intercept(MethodDelegation.to(GetAndSetInterceptor.INSTANCE))
|
||||||
.method(ElementMatchers.named("target"))
|
.method(ElementMatchers.named("target"))
|
||||||
.intercept(FieldAccessor.ofField("target"))
|
.intercept(FieldAccessor.ofField("target"))
|
||||||
|
.method(ElementMatchers.named("setTarget"))
|
||||||
|
.intercept(FieldAccessor.ofField("target").withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC))
|
||||||
|
.method(ElementMatchers.named("isActive").or(ElementMatchers.named("setActive")))
|
||||||
|
.intercept(FieldAccessor.ofField("active"))
|
||||||
.method(ElementMatchers.named("ceSection"))
|
.method(ElementMatchers.named("ceSection"))
|
||||||
.intercept(FieldAccessor.ofField("cesection"))
|
.intercept(FieldAccessor.ofField("cesection"))
|
||||||
.method(ElementMatchers.named("ceChunk"))
|
.method(ElementMatchers.named("ceChunk"))
|
||||||
@@ -125,13 +132,14 @@ public class BukkitInjector {
|
|||||||
.make()
|
.make()
|
||||||
.load(BukkitInjector.class.getClassLoader())
|
.load(BukkitInjector.class.getClassLoader())
|
||||||
.getLoaded();
|
.getLoaded();
|
||||||
varHandle$InjectedPalettedContainer$target = Objects.requireNonNull(ReflectionUtils.findVarHandle(clazz$InjectedPalettedContainer, "target", Reflections.clazz$PalettedContainer));
|
//varHandle$InjectedPalettedContainer$target = Objects.requireNonNull(ReflectionUtils.findVarHandle(clazz$InjectedPalettedContainer, "target", Reflections.clazz$PalettedContainer));
|
||||||
|
|
||||||
// Level Chunk Section
|
// Level Chunk Section
|
||||||
clazz$InjectedLevelChunkSection = byteBuddy
|
clazz$InjectedLevelChunkSection = byteBuddy
|
||||||
.subclass(Reflections.clazz$LevelChunkSection)
|
.subclass(Reflections.clazz$LevelChunkSection, ConstructorStrategy.Default.IMITATE_SUPER_CLASS_OPENING)
|
||||||
.name("net.minecraft.world.level.chunk.InjectedLevelChunkSection")
|
.name("net.minecraft.world.level.chunk.InjectedLevelChunkSection")
|
||||||
.implement(InjectedHolder.Section.class)
|
.implement(InjectedHolder.Section.class)
|
||||||
|
.defineField("active", boolean.class, Visibility.PUBLIC)
|
||||||
.defineField("cesection", CESection.class, Visibility.PRIVATE)
|
.defineField("cesection", CESection.class, Visibility.PRIVATE)
|
||||||
.defineField("cechunk", CEChunk.class, Visibility.PRIVATE)
|
.defineField("cechunk", CEChunk.class, Visibility.PRIVATE)
|
||||||
.defineField("cepos", SectionPos.class, Visibility.PRIVATE)
|
.defineField("cepos", SectionPos.class, Visibility.PRIVATE)
|
||||||
@@ -143,10 +151,16 @@ public class BukkitInjector {
|
|||||||
.intercept(FieldAccessor.ofField("cechunk"))
|
.intercept(FieldAccessor.ofField("cechunk"))
|
||||||
.method(ElementMatchers.named("cePos"))
|
.method(ElementMatchers.named("cePos"))
|
||||||
.intercept(FieldAccessor.ofField("cepos"))
|
.intercept(FieldAccessor.ofField("cepos"))
|
||||||
|
.method(ElementMatchers.named("isActive").or(ElementMatchers.named("setActive")))
|
||||||
|
.intercept(FieldAccessor.ofField("active"))
|
||||||
.make()
|
.make()
|
||||||
.load(BukkitInjector.class.getClassLoader())
|
.load(BukkitInjector.class.getClassLoader())
|
||||||
.getLoaded();
|
.getLoaded();
|
||||||
|
|
||||||
|
constructor$InjectedLevelChunkSection = MethodHandles.publicLookup().in(clazz$InjectedLevelChunkSection)
|
||||||
|
.findConstructor(clazz$InjectedLevelChunkSection, MethodType.methodType(void.class, Reflections.clazz$PalettedContainer, Reflections.clazz$PalettedContainer))
|
||||||
|
.asType(MethodType.methodType(Reflections.clazz$LevelChunkSection, Reflections.clazz$PalettedContainer, Reflections.clazz$PalettedContainer));
|
||||||
|
|
||||||
// State Predicate
|
// State Predicate
|
||||||
DynamicType.Unloaded<?> alwaysTrue = byteBuddy
|
DynamicType.Unloaded<?> alwaysTrue = byteBuddy
|
||||||
.subclass(Reflections.clazz$StatePredicate)
|
.subclass(Reflections.clazz$StatePredicate)
|
||||||
@@ -408,32 +422,50 @@ public class BukkitInjector {
|
|||||||
try {
|
try {
|
||||||
if (Config.injectionTarget()) {
|
if (Config.injectionTarget()) {
|
||||||
Object container = FastNMS.INSTANCE.field$LevelChunkSection$states(targetSection);
|
Object container = FastNMS.INSTANCE.field$LevelChunkSection$states(targetSection);
|
||||||
if (!(container instanceof InjectedHolder.Palette)) {
|
if (!(container instanceof InjectedHolder.Palette holder)) {
|
||||||
InjectedHolder.Palette injectedObject;
|
InjectedHolder.Palette injectedObject;
|
||||||
if (Config.fastInjection()) {
|
if (Config.fastInjection()) {
|
||||||
injectedObject = FastNMS.INSTANCE.createInjectedPalettedContainerHolder(container);
|
injectedObject = FastNMS.INSTANCE.createInjectedPalettedContainerHolder(container);
|
||||||
} else {
|
} else {
|
||||||
injectedObject = (InjectedHolder.Palette) Reflections.UNSAFE.allocateInstance(clazz$InjectedPalettedContainer);
|
injectedObject = (InjectedHolder.Palette) Reflections.UNSAFE.allocateInstance(clazz$InjectedPalettedContainer);
|
||||||
varHandle$InjectedPalettedContainer$target.set(injectedObject, container);
|
injectedObject.setTarget(container);
|
||||||
|
//varHandle$InjectedPalettedContainer$target.set(injectedObject, container);
|
||||||
}
|
}
|
||||||
injectedObject.ceChunk(chunk);
|
injectedObject.ceChunk(chunk);
|
||||||
injectedObject.ceSection(ceSection);
|
injectedObject.ceSection(ceSection);
|
||||||
injectedObject.cePos(pos);
|
injectedObject.cePos(pos);
|
||||||
|
injectedObject.setActive(true);
|
||||||
Reflections.varHandle$PalettedContainer$data.setVolatile(injectedObject, Reflections.varHandle$PalettedContainer$data.get(container));
|
Reflections.varHandle$PalettedContainer$data.setVolatile(injectedObject, Reflections.varHandle$PalettedContainer$data.get(container));
|
||||||
Reflections.field$LevelChunkSection$states.set(targetSection, injectedObject);
|
Reflections.field$LevelChunkSection$states.set(targetSection, injectedObject);
|
||||||
|
} else {
|
||||||
|
holder.ceChunk(chunk);
|
||||||
|
holder.ceSection(ceSection);
|
||||||
|
holder.cePos(pos);
|
||||||
|
holder.setActive(true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InjectedHolder.Section injectedObject;
|
if (!(targetSection instanceof InjectedHolder.Section holder)) {
|
||||||
if (true) {
|
InjectedHolder.Section injectedObject;
|
||||||
injectedObject = FastNMS.INSTANCE.createInjectedLevelChunkSectionHolder(targetSection);
|
if (Config.fastInjection()) {
|
||||||
|
injectedObject = FastNMS.INSTANCE.createInjectedLevelChunkSectionHolder(targetSection);
|
||||||
|
} else {
|
||||||
|
injectedObject = (InjectedHolder.Section) constructor$InjectedLevelChunkSection.invoke(
|
||||||
|
FastNMS.INSTANCE.field$LevelChunkSection$states(targetSection), FastNMS.INSTANCE.field$LevelChunkSection$biomes(targetSection));
|
||||||
|
}
|
||||||
|
injectedObject.ceChunk(chunk);
|
||||||
|
injectedObject.ceSection(ceSection);
|
||||||
|
injectedObject.cePos(pos);
|
||||||
|
injectedObject.setActive(true);
|
||||||
|
callback.accept(injectedObject);
|
||||||
|
} else {
|
||||||
|
holder.ceChunk(chunk);
|
||||||
|
holder.ceSection(ceSection);
|
||||||
|
holder.cePos(pos);
|
||||||
|
holder.setActive(true);
|
||||||
}
|
}
|
||||||
injectedObject.ceChunk(chunk);
|
|
||||||
injectedObject.ceSection(ceSection);
|
|
||||||
injectedObject.cePos(pos);
|
|
||||||
callback.accept(injectedObject);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Throwable e) {
|
||||||
CraftEngine.instance().logger().severe("Failed to inject chunk section", e);
|
CraftEngine.instance().logger().severe("Failed to inject chunk section " + pos, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -450,15 +482,17 @@ public class BukkitInjector {
|
|||||||
if (Config.injectionTarget()) {
|
if (Config.injectionTarget()) {
|
||||||
Object states = FastNMS.INSTANCE.field$LevelChunkSection$states(section);
|
Object states = FastNMS.INSTANCE.field$LevelChunkSection$states(section);
|
||||||
if (states instanceof InjectedHolder.Palette holder) {
|
if (states instanceof InjectedHolder.Palette holder) {
|
||||||
try {
|
holder.setActive(false);
|
||||||
Reflections.field$LevelChunkSection$states.set(section, holder.target());
|
// try {
|
||||||
} catch (ReflectiveOperationException e) {
|
// Reflections.field$LevelChunkSection$states.set(section, holder.target());
|
||||||
CraftEngine.instance().logger().severe("Failed to uninject palette", e);
|
// } catch (ReflectiveOperationException e) {
|
||||||
}
|
// CraftEngine.instance().logger().severe("Failed to uninject palette", e);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (section instanceof InjectedHolder.Section holder) {
|
if (section instanceof InjectedHolder.Section holder) {
|
||||||
return FastNMS.INSTANCE.constructor$LevelChunkSection(holder);
|
holder.setActive(false);
|
||||||
|
//return FastNMS.INSTANCE.constructor$LevelChunkSection(holder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return section;
|
return section;
|
||||||
@@ -730,7 +764,9 @@ public class BukkitInjector {
|
|||||||
int z = (int) args[2];
|
int z = (int) args[2];
|
||||||
Object newState = args[3];
|
Object newState = args[3];
|
||||||
Object previousState = superMethod.call();
|
Object previousState = superMethod.call();
|
||||||
compareAndUpdateBlockState(x, y, z, newState, previousState, holder);
|
if (holder.isActive()) {
|
||||||
|
compareAndUpdateBlockState(x, y, z, newState, previousState, holder);
|
||||||
|
}
|
||||||
return previousState;
|
return previousState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -747,7 +783,9 @@ public class BukkitInjector {
|
|||||||
int z = (int) args[2];
|
int z = (int) args[2];
|
||||||
Object newState = args[3];
|
Object newState = args[3];
|
||||||
Object previousState = FastNMS.INSTANCE.method$PalettedContainer$getAndSet(targetStates, x, y, z, newState);
|
Object previousState = FastNMS.INSTANCE.method$PalettedContainer$getAndSet(targetStates, x, y, z, newState);
|
||||||
compareAndUpdateBlockState(x, y, z, newState, previousState, holder);
|
if (holder.isActive()) {
|
||||||
|
compareAndUpdateBlockState(x, y, z, newState, previousState, holder);
|
||||||
|
}
|
||||||
return previousState;
|
return previousState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ import org.bukkit.inventory.PlayerInventory;
|
|||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.bukkit.util.RayTraceResult;
|
import org.bukkit.util.RayTraceResult;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
@@ -1484,7 +1485,7 @@ public class PacketConsumers {
|
|||||||
if (state == null) return;
|
if (state == null) return;
|
||||||
Key itemId = state.settings().itemId();
|
Key itemId = state.settings().itemId();
|
||||||
if (itemId == null) return;
|
if (itemId == null) return;
|
||||||
pickItem(player, itemId);
|
pickItem(player, itemId, pos, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1.21.4+
|
// 1.21.4+
|
||||||
@@ -1523,18 +1524,24 @@ public class PacketConsumers {
|
|||||||
private static void handlePickItemFromEntityOnMainThread(Player player, LoadedFurniture furniture) throws Exception {
|
private static void handlePickItemFromEntityOnMainThread(Player player, LoadedFurniture furniture) throws Exception {
|
||||||
Key itemId = furniture.config().settings().itemId();
|
Key itemId = furniture.config().settings().itemId();
|
||||||
if (itemId == null) return;
|
if (itemId == null) return;
|
||||||
pickItem(player, itemId);
|
pickItem(player, itemId, null, FastNMS.INSTANCE.method$CraftEntity$getHandle(furniture.baseEntity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void pickItem(Player player, Key itemId) throws IllegalAccessException, InvocationTargetException {
|
private static void pickItem(Player player, Key itemId, @Nullable Object blockPos, @Nullable Object entity) throws IllegalAccessException, InvocationTargetException {
|
||||||
ItemStack itemStack = BukkitCraftEngine.instance().itemManager().buildCustomItemStack(itemId, BukkitCraftEngine.instance().adapt(player));
|
ItemStack itemStack = BukkitCraftEngine.instance().itemManager().buildCustomItemStack(itemId, BukkitCraftEngine.instance().adapt(player));
|
||||||
if (itemStack == null) {
|
if (itemStack == null) {
|
||||||
CraftEngine.instance().logger().warn("Item: " + itemId + " is not a valid item");
|
CraftEngine.instance().logger().warn("Item: " + itemId + " is not a valid item");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assert Reflections.method$ServerGamePacketListenerImpl$tryPickItem != null;
|
assert Reflections.method$ServerGamePacketListenerImpl$tryPickItem != null;
|
||||||
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
|
if (VersionHelper.isOrAbove1_21_5()) {
|
||||||
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack));
|
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
|
||||||
|
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)),
|
||||||
|
FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack), blockPos, entity, true);
|
||||||
|
} else {
|
||||||
|
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
|
||||||
|
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> ADD_ENTITY_BYTEBUFFER = (user, event) -> {
|
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> ADD_ENTITY_BYTEBUFFER = (user, event) -> {
|
||||||
|
|||||||
@@ -4967,10 +4967,10 @@ public class Reflections {
|
|||||||
|
|
||||||
public static final Method method$BonemealableBlock$isValidBonemealTarget = requireNonNull(
|
public static final Method method$BonemealableBlock$isValidBonemealTarget = requireNonNull(
|
||||||
VersionHelper.isOrAbove1_20_2() ?
|
VersionHelper.isOrAbove1_20_2() ?
|
||||||
ReflectionUtils.getMethod(
|
ReflectionUtils.getInstanceMethod(
|
||||||
clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState
|
clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState
|
||||||
) :
|
) :
|
||||||
ReflectionUtils.getMethod(
|
ReflectionUtils.getInstanceMethod(
|
||||||
clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState, boolean.class
|
clazz$BonemealableBlock, boolean.class, clazz$LevelReader, clazz$BlockPos, clazz$BlockState, boolean.class
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@@ -5034,6 +5034,10 @@ public class Reflections {
|
|||||||
);
|
);
|
||||||
|
|
||||||
public static final Method method$ServerGamePacketListenerImpl$tryPickItem =
|
public static final Method method$ServerGamePacketListenerImpl$tryPickItem =
|
||||||
|
VersionHelper.isOrAbove1_21_5() ?
|
||||||
|
ReflectionUtils.getDeclaredMethod(
|
||||||
|
clazz$ServerGamePacketListenerImpl, void.class, clazz$ItemStack, clazz$BlockPos, clazz$Entity, boolean.class
|
||||||
|
) :
|
||||||
ReflectionUtils.getDeclaredMethod(
|
ReflectionUtils.getDeclaredMethod(
|
||||||
clazz$ServerGamePacketListenerImpl, void.class, clazz$ItemStack
|
clazz$ServerGamePacketListenerImpl, void.class, clazz$ItemStack
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -266,27 +266,24 @@ public class BukkitWorldManager implements WorldManager, Listener {
|
|||||||
if (ceChunk != null) {
|
if (ceChunk != null) {
|
||||||
if (ceChunk.dirty()) {
|
if (ceChunk.dirty()) {
|
||||||
try {
|
try {
|
||||||
world.worldDataStorage().writeChunkAt(pos, ceChunk, false);
|
this.plugin.debug(() -> "[Dirty Chunk]" + pos + " unloaded");
|
||||||
|
world.worldDataStorage().writeChunkAt(pos, ceChunk);
|
||||||
ceChunk.setDirty(false);
|
ceChunk.setDirty(false);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
this.plugin.logger().warn("Failed to write chunk tag at " + chunk.getX() + " " + chunk.getZ(), e);
|
this.plugin.logger().warn("Failed to write chunk tag at " + chunk.getX() + " " + chunk.getZ(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Config.restoreVanillaBlocks()) {
|
boolean unsaved = false;
|
||||||
boolean unsaved = false;
|
CESection[] ceSections = ceChunk.sections();
|
||||||
CESection[] ceSections = ceChunk.sections();
|
Object worldServer = FastNMS.INSTANCE.field$CraftChunk$worldServer(chunk);
|
||||||
Object worldServer = FastNMS.INSTANCE.field$CraftChunk$worldServer(chunk);
|
Object chunkSource = FastNMS.INSTANCE.method$ServerLevel$getChunkSource(worldServer);
|
||||||
Object chunkSource = FastNMS.INSTANCE.method$ServerLevel$getChunkSource(worldServer);
|
Object levelChunk = FastNMS.INSTANCE.method$ServerChunkCache$getChunkAtIfLoadedMainThread(chunkSource, chunk.getX(), chunk.getZ());
|
||||||
Object levelChunk = FastNMS.INSTANCE.method$ServerChunkCache$getChunkAtIfLoadedMainThread(chunkSource, chunk.getX(), chunk.getZ());
|
Object[] sections = FastNMS.INSTANCE.method$ChunkAccess$getSections(levelChunk);
|
||||||
Object[] sections = FastNMS.INSTANCE.method$ChunkAccess$getSections(levelChunk);
|
for (int i = 0; i < ceSections.length; i++) {
|
||||||
for (int i = 0; i < ceSections.length; i++) {
|
CESection ceSection = ceSections[i];
|
||||||
CESection ceSection = ceSections[i];
|
Object section = sections[i];
|
||||||
Object section = sections[i];
|
BukkitInjector.uninjectLevelChunkSection(section);
|
||||||
Object uninjectedSection = BukkitInjector.uninjectLevelChunkSection(section);
|
if (Config.restoreVanillaBlocks()) {
|
||||||
if (uninjectedSection != section) {
|
|
||||||
sections[i] = uninjectedSection;
|
|
||||||
section = uninjectedSection;
|
|
||||||
}
|
|
||||||
if (!ceSection.statesContainer().isEmpty()) {
|
if (!ceSection.statesContainer().isEmpty()) {
|
||||||
for (int x = 0; x < 16; x++) {
|
for (int x = 0; x < 16; x++) {
|
||||||
for (int z = 0; z < 16; z++) {
|
for (int z = 0; z < 16; z++) {
|
||||||
@@ -301,9 +298,9 @@ public class BukkitWorldManager implements WorldManager, Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (unsaved && !FastNMS.INSTANCE.method$LevelChunk$isUnsaved(levelChunk)) {
|
}
|
||||||
FastNMS.INSTANCE.method$LevelChunk$markUnsaved(levelChunk);
|
if (unsaved && !FastNMS.INSTANCE.method$LevelChunk$isUnsaved(levelChunk)) {
|
||||||
}
|
FastNMS.INSTANCE.method$LevelChunk$markUnsaved(levelChunk);
|
||||||
}
|
}
|
||||||
ceChunk.unload();
|
ceChunk.unload();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ public class UpdateOption {
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
private int flags;
|
private int flags;
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public class Config {
|
|||||||
protected boolean chunk_system$restore_vanilla_blocks_on_chunk_unload;
|
protected boolean chunk_system$restore_vanilla_blocks_on_chunk_unload;
|
||||||
protected boolean chunk_system$restore_custom_blocks_on_chunk_load;
|
protected boolean chunk_system$restore_custom_blocks_on_chunk_load;
|
||||||
protected boolean chunk_system$sync_custom_blocks_on_chunk_load;
|
protected boolean chunk_system$sync_custom_blocks_on_chunk_load;
|
||||||
protected int chunk_system$delay_serialization;
|
protected boolean chunk_system$cache_system;
|
||||||
protected boolean chunk_system$injection$use_fast_method;
|
protected boolean chunk_system$injection$use_fast_method;
|
||||||
protected boolean chunk_system$injection$target;
|
protected boolean chunk_system$injection$target;
|
||||||
|
|
||||||
@@ -274,7 +274,7 @@ public class Config {
|
|||||||
chunk_system$restore_vanilla_blocks_on_chunk_unload = config.getBoolean("chunk-system.restore-vanilla-blocks-on-chunk-unload", true);
|
chunk_system$restore_vanilla_blocks_on_chunk_unload = config.getBoolean("chunk-system.restore-vanilla-blocks-on-chunk-unload", true);
|
||||||
chunk_system$restore_custom_blocks_on_chunk_load = config.getBoolean("chunk-system.restore-custom-blocks-on-chunk-load", true);
|
chunk_system$restore_custom_blocks_on_chunk_load = config.getBoolean("chunk-system.restore-custom-blocks-on-chunk-load", true);
|
||||||
chunk_system$sync_custom_blocks_on_chunk_load = config.getBoolean("chunk-system.sync-custom-blocks-on-chunk-load", false);
|
chunk_system$sync_custom_blocks_on_chunk_load = config.getBoolean("chunk-system.sync-custom-blocks-on-chunk-load", false);
|
||||||
chunk_system$delay_serialization = config.getInt("chunk-system.delay-serialization", 20);
|
chunk_system$cache_system = config.getBoolean("chunk-system.cache-system", true);
|
||||||
chunk_system$injection$use_fast_method = config.getBoolean("chunk-system.injection.use-fast-method", false);
|
chunk_system$injection$use_fast_method = config.getBoolean("chunk-system.injection.use-fast-method", false);
|
||||||
if (firstTime) {
|
if (firstTime) {
|
||||||
chunk_system$injection$target = config.getEnum("chunk-system.injection.target", InjectionTarget.class, InjectionTarget.PALETTE) == InjectionTarget.PALETTE;
|
chunk_system$injection$target = config.getEnum("chunk-system.injection.target", InjectionTarget.class, InjectionTarget.PALETTE) == InjectionTarget.PALETTE;
|
||||||
@@ -699,8 +699,8 @@ public class Config {
|
|||||||
return instance.furniture$collision_entity_type;
|
return instance.furniture$collision_entity_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int delaySerialization() {
|
public static boolean enableChunkCache() {
|
||||||
return instance.chunk_system$delay_serialization;
|
return instance.chunk_system$cache_system;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean fastInjection() {
|
public static boolean fastInjection() {
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ public class NumberProviders {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static NumberProvider fromMap(Map<String, Object> map) {
|
public static NumberProvider fromMap(Map<String, Object> map) {
|
||||||
String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.loot_table.number.missing_type");
|
String type = ResourceConfigUtils.requireNonEmptyStringOrThrow(map.get("type"), "warning.config.number.missing_type");
|
||||||
Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE);
|
Key key = Key.withDefaultNamespace(type, Key.DEFAULT_NAMESPACE);
|
||||||
Factory<NumberProvider> factory = BuiltInRegistries.NUMBER_PROVIDER_FACTORY.getValue(key);
|
Factory<NumberProvider> factory = BuiltInRegistries.NUMBER_PROVIDER_FACTORY.getValue(key);
|
||||||
if (factory == null) {
|
if (factory == null) {
|
||||||
throw new LocalizedResourceConfigException("warning.config.loot_table.number.invalid_type", type);
|
throw new LocalizedResourceConfigException("warning.config.number.invalid_type", type);
|
||||||
}
|
}
|
||||||
return factory.create(map);
|
return factory.create(map);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,6 +246,27 @@ public class ReflectionUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static Method getInstanceMethod(final Class<?> clazz, Class<?> returnType, final Class<?>... parameterTypes) {
|
||||||
|
outer:
|
||||||
|
for (Method method : clazz.getMethods()) {
|
||||||
|
if (method.getParameterCount() != parameterTypes.length) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (Modifier.isStatic(method.getModifiers())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Class<?>[] types = method.getParameterTypes();
|
||||||
|
for (int i = 0; i < types.length; i++) {
|
||||||
|
if (types[i] != parameterTypes[i]) {
|
||||||
|
continue outer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (returnType.isAssignableFrom(method.getReturnType())) return method;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Method getDeclaredMethod(final Class<?> clazz, Class<?> returnType, final String[] possibleMethodNames, final Class<?>... parameterTypes) {
|
public static Method getDeclaredMethod(final Class<?> clazz, Class<?> returnType, final String[] possibleMethodNames, final Class<?>... parameterTypes) {
|
||||||
outer:
|
outer:
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public abstract class CEWorld {
|
|||||||
for (Map.Entry<Long, CEChunk> entry : this.loadedChunkMap.entrySet()) {
|
for (Map.Entry<Long, CEChunk> entry : this.loadedChunkMap.entrySet()) {
|
||||||
CEChunk chunk = entry.getValue();
|
CEChunk chunk = entry.getValue();
|
||||||
if (chunk.dirty()) {
|
if (chunk.dirty()) {
|
||||||
worldDataStorage.writeChunkAt(new ChunkPos(entry.getKey()), chunk, true);
|
worldDataStorage.writeChunkAt(new ChunkPos(entry.getKey()), chunk);
|
||||||
chunk.setDirty(false);
|
chunk.setDirty(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,4 +68,17 @@ public class ChunkPos {
|
|||||||
public static long asLong(int chunkX, int chunkZ) {
|
public static long asLong(int chunkX, int chunkZ) {
|
||||||
return (long) chunkX & 4294967295L | ((long) chunkZ & 4294967295L) << 32;
|
return (long) chunkX & 4294967295L | ((long) chunkZ & 4294967295L) << 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final boolean equals(Object o) {
|
||||||
|
if (!(o instanceof ChunkPos chunkPos)) return false;
|
||||||
|
return x == chunkPos.x && z == chunkPos.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = x;
|
||||||
|
result = 31 * result + z;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ import net.momirealms.craftengine.core.world.SectionPos;
|
|||||||
|
|
||||||
public interface InjectedHolder {
|
public interface InjectedHolder {
|
||||||
|
|
||||||
|
boolean isActive();
|
||||||
|
|
||||||
|
void setActive(boolean active);
|
||||||
|
|
||||||
CESection ceSection();
|
CESection ceSection();
|
||||||
|
|
||||||
void ceSection(CESection section);
|
void ceSection(CESection section);
|
||||||
@@ -22,5 +26,7 @@ public interface InjectedHolder {
|
|||||||
interface Palette extends InjectedHolder {
|
interface Palette extends InjectedHolder {
|
||||||
|
|
||||||
Object target();
|
Object target();
|
||||||
|
|
||||||
|
void setTarget(Object target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package net.momirealms.craftengine.core.world.chunk.storage;
|
||||||
|
|
||||||
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
|
import com.github.benmanes.caffeine.cache.Scheduler;
|
||||||
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
|
import net.momirealms.craftengine.core.world.CEWorld;
|
||||||
|
import net.momirealms.craftengine.core.world.ChunkPos;
|
||||||
|
import net.momirealms.craftengine.core.world.chunk.CEChunk;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class CachedStorage<T extends WorldDataStorage> implements WorldDataStorage {
|
||||||
|
private final T storage;
|
||||||
|
private final Cache<ChunkPos, CEChunk> chunkCache;
|
||||||
|
|
||||||
|
public CachedStorage(T storage) {
|
||||||
|
this.storage = storage;
|
||||||
|
this.chunkCache = Caffeine.newBuilder()
|
||||||
|
.executor(CraftEngine.instance().scheduler().async())
|
||||||
|
.scheduler(Scheduler.systemScheduler())
|
||||||
|
.expireAfterAccess(30, TimeUnit.SECONDS)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull CEChunk readChunkAt(@NotNull CEWorld world, @NotNull ChunkPos pos) throws IOException {
|
||||||
|
CEChunk chunk = this.chunkCache.getIfPresent(pos);
|
||||||
|
if (chunk != null) {
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
chunk = this.storage.readChunkAt(world, pos);
|
||||||
|
this.chunkCache.put(pos, chunk);
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk) throws IOException {
|
||||||
|
this.storage.writeChunkAt(pos, chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
this.storage.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void flush() throws IOException {
|
||||||
|
this.storage.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -147,7 +147,7 @@ public class DefaultRegionFileStorage implements WorldDataStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk, boolean immediately) throws IOException {
|
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk) throws IOException {
|
||||||
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
CompoundTag nbt = DefaultChunkSerializer.serialize(chunk);
|
||||||
writeChunkTagAt(pos, nbt);
|
writeChunkTagAt(pos, nbt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ public class DefaultStorageAdaptor implements StorageAdaptor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull WorldDataStorage adapt(@NotNull World world) {
|
public @NotNull WorldDataStorage adapt(@NotNull World world) {
|
||||||
if (Config.delaySerialization() > 0) {
|
if (Config.enableChunkCache()) {
|
||||||
return new DelayedDefaultRegionFileStorage(world.directory().resolve(CEWorld.REGION_DIRECTORY), Config.delaySerialization());
|
return new CachedStorage<>(new DefaultRegionFileStorage(world.directory().resolve(CEWorld.REGION_DIRECTORY)));
|
||||||
} else {
|
} else {
|
||||||
return new DefaultRegionFileStorage(world.directory().resolve(CEWorld.REGION_DIRECTORY));
|
return new DefaultRegionFileStorage(world.directory().resolve(CEWorld.REGION_DIRECTORY));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
package net.momirealms.craftengine.core.world.chunk.storage;
|
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
|
||||||
import com.github.benmanes.caffeine.cache.RemovalCause;
|
|
||||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
|
||||||
import net.momirealms.craftengine.core.world.CEWorld;
|
|
||||||
import net.momirealms.craftengine.core.world.ChunkPos;
|
|
||||||
import net.momirealms.craftengine.core.world.chunk.CEChunk;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.channels.ClosedChannelException;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
public class DelayedDefaultRegionFileStorage extends DefaultRegionFileStorage {
|
|
||||||
private final Cache<ChunkPos, CEChunk> chunkCache;
|
|
||||||
private boolean isClosed;
|
|
||||||
|
|
||||||
public DelayedDefaultRegionFileStorage(Path directory, int time) {
|
|
||||||
super(directory);
|
|
||||||
this.chunkCache = Caffeine.newBuilder()
|
|
||||||
.expireAfterWrite(time, TimeUnit.SECONDS)
|
|
||||||
.removalListener((ChunkPos key, CEChunk value, RemovalCause cause) -> {
|
|
||||||
if (key == null || value == null || isClosed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cause == RemovalCause.EXPIRED || cause == RemovalCause.SIZE) {
|
|
||||||
try {
|
|
||||||
super.writeChunkAt(key, value, true);
|
|
||||||
} catch (ClosedChannelException e) {
|
|
||||||
if (this.isClosed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CraftEngine.instance().logger().warn("Failed to write chunk at " + key, e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
CraftEngine.instance().logger().warn("Failed to write chunk at " + key, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull CEChunk readChunkAt(@NotNull CEWorld world, @NotNull ChunkPos pos) throws IOException {
|
|
||||||
CEChunk chunk = this.chunkCache.asMap().remove(pos);
|
|
||||||
if (chunk != null) {
|
|
||||||
return chunk;
|
|
||||||
}
|
|
||||||
return super.readChunkAt(world, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk, boolean immediately) throws IOException {
|
|
||||||
if (immediately) {
|
|
||||||
super.writeChunkAt(pos, chunk, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (chunk.isEmpty()) {
|
|
||||||
super.writeChunkTagAt(pos, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.chunkCache.put(pos, chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void close() throws IOException {
|
|
||||||
this.isClosed = true;
|
|
||||||
this.saveCache();
|
|
||||||
this.chunkCache.cleanUp();
|
|
||||||
super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void saveCache() {
|
|
||||||
try {
|
|
||||||
for (var chunk : this.chunkCache.asMap().entrySet()) {
|
|
||||||
super.writeChunkAt(chunk.getKey(), chunk.getValue(), true);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
CraftEngine.instance().logger().warn("Failed to save chunks", e);
|
|
||||||
}
|
|
||||||
this.chunkCache.invalidateAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -309,9 +309,6 @@ public class RegionFile implements AutoCloseable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void clear(ChunkPos pos) throws IOException {
|
public void clear(ChunkPos pos) throws IOException {
|
||||||
if (!this.fileChannel.isOpen()) {
|
|
||||||
throw new ClosedChannelException();
|
|
||||||
}
|
|
||||||
int chunkLocation = RegionFile.getChunkLocation(pos);
|
int chunkLocation = RegionFile.getChunkLocation(pos);
|
||||||
int sectorInfo = this.sectorInfo.get(chunkLocation);
|
int sectorInfo = this.sectorInfo.get(chunkLocation);
|
||||||
if (sectorInfo != INFO_NOT_PRESENT) {
|
if (sectorInfo != INFO_NOT_PRESENT) {
|
||||||
@@ -325,9 +322,6 @@ public class RegionFile implements AutoCloseable {
|
|||||||
|
|
||||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||||
protected synchronized void write(ChunkPos pos, ByteBuffer buf) throws IOException {
|
protected synchronized void write(ChunkPos pos, ByteBuffer buf) throws IOException {
|
||||||
if (!this.fileChannel.isOpen()) {
|
|
||||||
throw new ClosedChannelException();
|
|
||||||
}
|
|
||||||
// get old offset info
|
// get old offset info
|
||||||
int offsetIndex = RegionFile.getChunkLocation(pos);
|
int offsetIndex = RegionFile.getChunkLocation(pos);
|
||||||
int previousSectorInfo = this.sectorInfo.get(offsetIndex);
|
int previousSectorInfo = this.sectorInfo.get(offsetIndex);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public interface WorldDataStorage {
|
|||||||
@NotNull
|
@NotNull
|
||||||
CEChunk readChunkAt(@NotNull CEWorld world, @NotNull ChunkPos pos) throws IOException;
|
CEChunk readChunkAt(@NotNull CEWorld world, @NotNull ChunkPos pos) throws IOException;
|
||||||
|
|
||||||
void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk, boolean immediately) throws IOException;
|
void writeChunkAt(@NotNull ChunkPos pos, @NotNull CEChunk chunk) throws IOException;
|
||||||
|
|
||||||
void flush() throws IOException;
|
void flush() throws IOException;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Project settings
|
# Project settings
|
||||||
# Rule: [major update].[feature update].[bug fix]
|
# Rule: [major update].[feature update].[bug fix]
|
||||||
project_version=0.0.53-beta.6
|
project_version=0.0.53
|
||||||
config_version=32
|
config_version=32
|
||||||
lang_version=12
|
lang_version=12
|
||||||
project_group=net.momirealms
|
project_group=net.momirealms
|
||||||
@@ -50,7 +50,7 @@ byte_buddy_version=1.17.5
|
|||||||
ahocorasick_version=0.6.3
|
ahocorasick_version=0.6.3
|
||||||
snake_yaml_version=2.4
|
snake_yaml_version=2.4
|
||||||
anti_grief_version=0.15
|
anti_grief_version=0.15
|
||||||
nms_helper_version=0.65.12
|
nms_helper_version=0.65.15
|
||||||
evalex_version=3.5.0
|
evalex_version=3.5.0
|
||||||
reactive_streams_version=1.0.4
|
reactive_streams_version=1.0.4
|
||||||
amazon_awssdk_version=2.31.23
|
amazon_awssdk_version=2.31.23
|
||||||
|
|||||||
Reference in New Issue
Block a user