From aa3fbbc994456d6c1a86dfaccfb6eda5d09854ef Mon Sep 17 00:00:00 2001 From: Moderocky Date: Fri, 16 Aug 2024 21:21:03 +0100 Subject: [PATCH 01/16] Fix bad EffLook example (#6977) --- src/main/java/ch/njol/skript/effects/EffLook.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/effects/EffLook.java b/src/main/java/ch/njol/skript/effects/EffLook.java index 39f1d95de5f..6a45f5ed84a 100644 --- a/src/main/java/ch/njol/skript/effects/EffLook.java +++ b/src/main/java/ch/njol/skript/effects/EffLook.java @@ -40,7 +40,7 @@ @Name("Look At") @Description("Forces the mob(s) or player(s) to look at an entity, vector or location. Vanilla max head pitches range from 10 to 50.") @Examples({ - "force the head of the player to look towards event-entity's feet", + "force the player to look towards event-entity's feet", "", "on entity explosion:", "\tset {_player} to the nearest player", From 4ed30cd33f7b0f604cb0e06ae05a5140d25c29c5 Mon Sep 17 00:00:00 2001 From: sovdee <10354869+sovdeeth@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:51:45 -0700 Subject: [PATCH 02/16] Bandaid fix for single quotes in command args (#6936) --- src/main/java/ch/njol/skript/command/CommandUsage.java | 4 ++++ .../regressions/pull-6936-single quotes in commands.sk | 10 ++++++++++ 2 files changed, 14 insertions(+) create mode 100644 src/test/skript/tests/regressions/pull-6936-single quotes in commands.sk diff --git a/src/main/java/ch/njol/skript/command/CommandUsage.java b/src/main/java/ch/njol/skript/command/CommandUsage.java index 59b79765604..c746d93cf8a 100644 --- a/src/main/java/ch/njol/skript/command/CommandUsage.java +++ b/src/main/java/ch/njol/skript/command/CommandUsage.java @@ -46,6 +46,10 @@ public class CommandUsage { */ public CommandUsage(@Nullable VariableString usage, String defaultUsage) { if (usage == null) { + // Manually escape quotes. This is not a good solution, as it doesn't handle many other issues, like % in + // commands, but in lieu of re-writing the argument parser and command logic completely, I believe this is + // a decent stop-gap measure for using " in commands. + defaultUsage = VariableString.quote(defaultUsage); usage = VariableString.newInstance(defaultUsage); assert usage != null; } diff --git a/src/test/skript/tests/regressions/pull-6936-single quotes in commands.sk b/src/test/skript/tests/regressions/pull-6936-single quotes in commands.sk new file mode 100644 index 00000000000..b8d8c554e64 --- /dev/null +++ b/src/test/skript/tests/regressions/pull-6936-single quotes in commands.sk @@ -0,0 +1,10 @@ +command single-quotes-in-commands [""]: + trigger: + set {sqic::output} to arg + +test "single-quotes-in-commands": + execute console command "single-quotes-in-commands ""success 1""" + assert {sqic::output} is "success 1" with "failed to parse arg in quotes" + execute console command "single-quotes-in-commands" + assert {sqic::output} is "success 2" with "failed to use default arg" + delete {sqic::output} From e44ed6cc94757c962a0f46a2a3450ea40d6eb371 Mon Sep 17 00:00:00 2001 From: Patrick Miller Date: Fri, 16 Aug 2024 19:24:57 -0400 Subject: [PATCH 03/16] Update EasyMock to 5.4.0; Re-enable JUnitJava21 (#6950) --- ...unit-21-builds.disabled => junit-21-builds.yml} | 2 -- build.gradle | 14 ++++++-------- src/test/skript/junit/BellEvents.sk | 4 ++++ 3 files changed, 10 insertions(+), 10 deletions(-) rename .github/workflows/{junit-21-builds.disabled => junit-21-builds.yml} (82%) diff --git a/.github/workflows/junit-21-builds.disabled b/.github/workflows/junit-21-builds.yml similarity index 82% rename from .github/workflows/junit-21-builds.disabled rename to .github/workflows/junit-21-builds.yml index 07bc5bebbeb..1eeee5846dc 100644 --- a/.github/workflows/junit-21-builds.disabled +++ b/.github/workflows/junit-21-builds.yml @@ -1,5 +1,3 @@ -# Disabled as EasyMock 5.2.0 is required for Java 21 support -# However, we are currently using 5.0.1 (see https://github.com/SkriptLang/Skript/pull/6204#discussion_r1405302009) name: JUnit (MC 1.20.6+) on: diff --git a/build.gradle b/build.gradle index 486220cf22e..afdd2c7aae9 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ dependencies { implementation fileTree(dir: 'lib', include: '*.jar') testShadow group: 'junit', name: 'junit', version: '4.13.2' - testShadow group: 'org.easymock', name: 'easymock', version: '5.0.1' + testShadow group: 'org.easymock', name: 'easymock', version: '5.4.0' } task checkAliases { @@ -70,7 +70,7 @@ task build(overwrite: true, type: ShadowJar) { from sourceSets.main.output } -// Excludes the tests for the build task. Should be using junit, junitJava17, junitJava11, skriptTest, quickTest. +// Excludes the tests for the build task. Should be using JUnitQuick, JUnitJava21, JUnitJava17, JUnitJava11, skriptTest, quickTest. // We do not want tests to run for building. That's time consuming and annoying. Especially in development. test { exclude '**/*' @@ -239,8 +239,8 @@ def latestEnv = 'java21/paper-1.21.0.json' def latestJava = java21 def oldestJava = java11 -def latestJUnitEnv = 'java17/paper-1.20.4.json' -def latestJUnitJava = java17 +def latestJUnitEnv = latestEnv +def latestJUnitJava = latestJava java { toolchain.languageVersion.set(JavaLanguageVersion.of(latestJava)) @@ -271,14 +271,12 @@ tasks.register('skriptTest') { } createTestTask('JUnitQuick', 'Runs JUnit tests on one environment being the latest supported Java and Minecraft.', environments + latestJUnitEnv, latestJUnitJava, 0, Modifiers.JUNIT) -// Disabled as EasyMock 5.2.0 is required for Java 21 support -// However, we are currently using 5.0.1 (see https://github.com/SkriptLang/Skript/pull/6204#discussion_r1405302009) -//createTestTask('JUnitJava21', 'Runs JUnit tests on all Java 21 environments.', environments + 'java21', java21, 0, Modifiers.JUNIT) +createTestTask('JUnitJava21', 'Runs JUnit tests on all Java 21 environments.', environments + 'java21', java21, 0, Modifiers.JUNIT) createTestTask('JUnitJava17', 'Runs JUnit tests on all Java 17 environments.', environments + 'java17', java17, 0, Modifiers.JUNIT) createTestTask('JUnitJava11', 'Runs JUnit tests on all Java 11 environments.', environments + 'java11', java11, 0, Modifiers.JUNIT) tasks.register('JUnit') { description = 'Runs JUnit tests on all environments.' - dependsOn JUnitJava11, JUnitJava17//, JUnitJava21 + dependsOn JUnitJava11, JUnitJava17, JUnitJava21 } // Build flavor configurations diff --git a/src/test/skript/junit/BellEvents.sk b/src/test/skript/junit/BellEvents.sk index 7a502fdddbd..2d7597ef4b2 100644 --- a/src/test/skript/junit/BellEvents.sk +++ b/src/test/skript/junit/BellEvents.sk @@ -1,5 +1,7 @@ test "BellEventsTest" when running JUnit: set {_slashIndex} to last index of "/" in "%script%.sk" + if {_slashIndex} is -1: # try \ separator (Windows) + set {_slashIndex} to last index of "\" in "%script%.sk" set {_parent} to substring of "%script%.sk" from 0 to {_slashIndex} if running below minecraft "1.19.4": @@ -16,6 +18,8 @@ test "BellEventsTest" when running JUnit: on script unload: set {_slashIndex} to last index of "/" in "%script%.sk" + if {_slashIndex} is -1: # try \ separator (Windows) + set {_slashIndex} to last index of "\" in "%script%.sk" set {_parent} to substring of "%script%.sk" from 0 to {_slashIndex} disable script "%{_parent}%BellEventsSpigot.sk" disable script "%{_parent}%BellEventsPaper.sk" From d78bf61ca493691632f9026ff870fd54de41ea6b Mon Sep 17 00:00:00 2001 From: "Mr. Darth" <66969562+Mr-Darth@users.noreply.github.com> Date: Sun, 18 Aug 2024 00:03:32 +0300 Subject: [PATCH 04/16] Re-add support for itemtypes in CondIsOfType (#5073) --- .../njol/skript/conditions/CondIsOfType.java | 30 +++++++------- .../tests/syntaxes/conditions/CondIsOfType.sk | 39 +++++++++++++++++++ 2 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 src/test/skript/tests/syntaxes/conditions/CondIsOfType.sk diff --git a/src/main/java/ch/njol/skript/conditions/CondIsOfType.java b/src/main/java/ch/njol/skript/conditions/CondIsOfType.java index 5ca721081bc..1a02f2a4ab4 100644 --- a/src/main/java/ch/njol/skript/conditions/CondIsOfType.java +++ b/src/main/java/ch/njol/skript/conditions/CondIsOfType.java @@ -20,6 +20,7 @@ import org.bukkit.entity.Entity; import org.bukkit.event.Event; +import org.bukkit.inventory.ItemStack; import org.eclipse.jdt.annotation.Nullable; import ch.njol.skript.aliases.ItemType; @@ -38,11 +39,8 @@ import ch.njol.util.Checker; import ch.njol.util.Kleenean; -/** - * @author Peter Güttinger - */ @Name("Is of Type") -@Description("Checks whether an item of an entity is of the given type. This is mostly useful for variables," + +@Description("Checks whether an item or an entity is of the given type. This is mostly useful for variables," + " as you can use the general 'is' condition otherwise (e.g. 'victim is a creeper').") @Examples({"tool is of type {selected type}", "victim is of type {villager type}"}) @@ -50,17 +48,17 @@ public class CondIsOfType extends Condition { static { - PropertyCondition.register(CondIsOfType.class, "of type[s] %entitytypes/entitydatas%", "itemstacks/entities"); + PropertyCondition.register(CondIsOfType.class, "of type[s] %itemtypes/entitydatas%", "itemstacks/entities"); } - @SuppressWarnings("null") + @SuppressWarnings("NotNullFieldNotInitialized") private Expression what; - @SuppressWarnings("null") + @SuppressWarnings("NotNullFieldNotInitialized") private Expression types; @SuppressWarnings("null") @Override - public boolean init(final Expression[] exprs, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) { + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { what = exprs[0]; types = exprs[1]; setNegated(matchedPattern == 1); @@ -68,12 +66,12 @@ public boolean init(final Expression[] exprs, final int matchedPattern, final } @Override - public boolean check(final Event e) { - return what.check(e, - (Checker) o1 -> types.check(e, + public boolean check(Event event) { + return what.check(event, + (Checker) o1 -> types.check(event, (Checker) o2 -> { - if (o2 instanceof ItemType && o1 instanceof ItemType) { - return ((ItemType) o2).isSupertypeOf((ItemType) o1); + if (o2 instanceof ItemType && o1 instanceof ItemStack) { + return ((ItemType) o2).isSupertypeOf(new ItemType((ItemStack) o1)); } else if (o2 instanceof EntityData && o1 instanceof Entity) { return ((EntityData) o2).isInstance((Entity) o1); } else if (o2 instanceof ItemType && o1 instanceof Entity) { @@ -86,9 +84,9 @@ public boolean check(final Event e) { } @Override - public String toString(final @Nullable Event e, final boolean debug) { - return PropertyCondition.toString(this, PropertyType.BE, e, debug, what, - "of " + (types.isSingle() ? "type " : "types") + types.toString(e, debug)); + public String toString(@Nullable Event event, boolean debug) { + return PropertyCondition.toString(this, PropertyType.BE, event, debug, what, + "of " + (types.isSingle() ? "type " : "types ") + types.toString(event, debug)); } } diff --git a/src/test/skript/tests/syntaxes/conditions/CondIsOfType.sk b/src/test/skript/tests/syntaxes/conditions/CondIsOfType.sk new file mode 100644 index 00000000000..c4a7ce6e5e1 --- /dev/null +++ b/src/test/skript/tests/syntaxes/conditions/CondIsOfType.sk @@ -0,0 +1,39 @@ +test "item is of type condition": + assert stone is of type stone with "stone isn't of type stone" + assert 12 stone is of type stone with "12 stone isn't of type stone" + assert stone named "test" is of type stone with "named stone isn't of type stone" + assert stone is of type plain stone with "stone isn't of type plain stone" + + assert diamond sword of sharpness is of type diamond sword with "enchanted diamond sword isn't of type diamond sword" + assert stone sword is of type sword with "stone sword isn't of type sword" + + assert gold sword of smite named "test" is not of type iron sword with "enchanted named gold sword is of type iron sword" + + assert armor stand is of type armor stand with "armor stand isn't of type armor stand" + assert 12 armor stand is of type 1 armor stand with "12 armor stand isn't of type 1 armor stand" + assert armor stand named "test" is of type armor stand with "named armor stand isn't of type armor stand" + + assert ender pearl is of type ender pearl with "ender pearl isn't of type ender pearl" + assert ender pearl is of type plain ender pearl with "ender pearl isn't of type plain ender pearl" + +test "entity is of type condition": + spawn zombie at spawn of "world" + assert last spawned zombie is of type zombie with "zombie isn't of type zombie" + assert last spawned zombie is not of type ghast with "zombie isn't of type ghast" + set {_zombie} to last spawned zombie + assert {_zombie} is of type zombie with "zombie in a variable isn't of type zombie" + delete last spawned zombie + + spawn armor stand at spawn of "world" + assert last spawned armor stand is of type armor stand with "armor stand isn't of type armor stand" + assert last spawned armor stand is not of type ghast with "armor stand isn't of type ghast" + set {_armor-stand} to last spawned armor stand + assert {_armor-stand} is of type armor stand with "armor stand in a variable isn't of type armor stand" + delete last spawned armor stand + + spawn enderpearl at spawn of "world" + assert last spawned enderpearl is of type ender pearl with "enderpearl isn't of type enderpearl" + assert last spawned enderpearl is not of type ghast with "enderpearl isn't of type ghast" + set {_enderpearl} to last spawned enderpearl + assert {_enderpearl} is of type ender pearl with "enderpearl in a variable isn't of type enderpearl" + delete last spawned enderpearl From 56119b39b45214a68c1cd8b49e7df95d0bf09dc1 Mon Sep 17 00:00:00 2001 From: _tud <98935832+UnderscoreTud@users.noreply.github.com> Date: Tue, 20 Aug 2024 23:11:01 +0300 Subject: [PATCH 05/16] Fix EffReturn error message (#6983) --- src/main/java/ch/njol/skript/effects/EffReturn.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/effects/EffReturn.java b/src/main/java/ch/njol/skript/effects/EffReturn.java index 7c4025b5d7a..ba56ae3e875 100644 --- a/src/main/java/ch/njol/skript/effects/EffReturn.java +++ b/src/main/java/ch/njol/skript/effects/EffReturn.java @@ -96,7 +96,8 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye } if (handler.isSingleReturnValue() && !convertedExpr.isSingle()) { - Skript.error(handler + " is defined to only return a single " + returnType + ", but this return statement can return multiple values."); + String typeName = Classes.getSuperClassInfo(returnType).getName().getSingular(); + Skript.error(handler + " is defined to only return a single " + typeName + ", but this return statement can return multiple values."); return false; } value = convertedExpr; From 37449b12fccecb07366016e0435bf2f155663c50 Mon Sep 17 00:00:00 2001 From: Patrick Miller Date: Sat, 31 Aug 2024 16:21:52 -0400 Subject: [PATCH 06/16] Fix default variables concurrency issues (#6996) * Ensure synchronization for default variables hints access * Use Guava synchronized deque --- .../skript/structures/StructVariables.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/ch/njol/skript/structures/StructVariables.java b/src/main/java/ch/njol/skript/structures/StructVariables.java index 4ae72d5977d..8579dc2386f 100644 --- a/src/main/java/ch/njol/skript/structures/StructVariables.java +++ b/src/main/java/ch/njol/skript/structures/StructVariables.java @@ -27,6 +27,7 @@ import java.util.Locale; import java.util.Map; +import com.google.common.collect.Queues; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; @@ -85,7 +86,16 @@ public class StructVariables extends Structure { public static class DefaultVariables implements ScriptData { - private final Deque[]>> hints = new ArrayDeque<>(); + /* + * Performance/Risk Notice: + * In the event that an element is pushed to the deque on one thread, causing it to grow, a second thread + * waiting to access the dequeue may not see the correct deque or pointers (the backing array is not volatile), + * causing issues such as a loss of data or attempting to write beyond the array's capacity. + * It is unlikely for the array to ever grow from its default capacity (16), as this would require extreme + * nesting of variables (e.g. {a::%{b::%{c::}%}%} (given the current usage of enter/exit scope) + * While thread-safe deque implementations are available, this setup has been chosen for performance. + */ + private final Deque[]>> hints = Queues.synchronizedDeque(new ArrayDeque<>()); private final List> variables; private boolean loaded; @@ -99,9 +109,10 @@ public void add(String variable, Class... hints) { if (CollectionUtils.containsAll(hints, Object.class)) // Ignore useless type hint. return; // This important empty check ensures that the variable type hint came from a defined DefaultVariable. - if (this.hints.isEmpty()) + Map[]> map = this.hints.peekFirst(); + if (map == null) return; - this.hints.getFirst().put(variable, hints); + map.put(variable, hints); } public void enterScope() { @@ -119,12 +130,13 @@ public void exitScope() { * @param variable The variable string of a variable. * @return type hints of a variable if found otherwise null. */ - @Nullable - public Class[] get(String variable) { - for (Map[]> map : hints) { - Class[] hints = map.get(variable); - if (hints != null && hints.length > 0) - return hints; + public Class @Nullable [] get(String variable) { + synchronized (hints) { // must manually synchronize for iterators + for (Map[]> map : hints) { + Class[] hints = map.get(variable); + if (hints != null && hints.length > 0) + return hints; + } } return null; } From 9a4c0eeffde2db2f467b34a6f7e017185ff38b51 Mon Sep 17 00:00:00 2001 From: mugu Date: Sat, 31 Aug 2024 22:24:08 +0200 Subject: [PATCH 07/16] Small fix in german.lang and adds dutch.lang (#6942) * Update german.lang Changes nightly build message from English to German * Create dutch.lang Adds dutch language files * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update dutch.lang * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update dutch.lang * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> * Update src/main/resources/lang/dutch.lang Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> --------- Co-authored-by: Efy <35348263+Efnilite@users.noreply.github.com> Co-authored-by: Mwexim <38397639+Mwexim@users.noreply.github.com> Co-authored-by: Moderocky --- src/main/resources/lang/dutch.lang | 191 ++++++++++++++++++++++++++++ src/main/resources/lang/german.lang | 2 +- 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/lang/dutch.lang diff --git a/src/main/resources/lang/dutch.lang b/src/main/resources/lang/dutch.lang new file mode 100644 index 00000000000..8169cc1286b --- /dev/null +++ b/src/main/resources/lang/dutch.lang @@ -0,0 +1,191 @@ +# Default Dutch language file + +# Which version of Skript this language file was written for +version: @version@ + +# What null (nothing) should show up as in a string/text +none: + +# -- Skript -- +skript: + copyright: ~ gemaakt door & © Peter Güttinger oftewel Njol ~ + prefix: [Skript] + quotes error: Ongeldig gebruik van aanhalingstekens ("). Als je aanhalingstekens wil gebruiken in "aangehaalde tekst", verdubbel ze dan: "". + brackets error: Ongeldige hoeveelheid of plaatsing van haakjes. Zorg ervoor dat elke openend haakje een bijbehorend sluitend haakje heeft. + invalid reload: Skript mag alleen worden herladen door Bukkits '/reload' of Skripts '/skript reload' commando. + no scripts: Er zijn geen scripts gevonden, misschien moet je er een paar schrijven ;) + no errors: Alle scripts zijn zonder fouten geladen. + scripts loaded: %s scripts zijn geladen met in totaal %s structuren in %s + finished loading: Klaar met laden. + +# -- Skript command -- +skript command: + usage: Gebruiksaanwijzing: + help: + description: Skripts hoofdcommando + help: Toont deze hulpmelding. Gebruik '/skript reload/enable/disable/update' voor meer informatie. + reload: + description: Herlaadt een specifiek script, alle scripts, de configuratie of alles + all: Herlaadt de configuratie, alle alliassenconfiguraties en alle scripts + config: Herlaadt de hoofdconfiguratie + aliases: Herlaadt de alliassenconfiguratie (aliases-english.zip of plugin jar) + scripts: Herlaadt alle scripts +