Spielregeln
VORAUSSETZUNGEN
Möglicherweise möchtest du zunächst die Generierung von Übersetzungen abschließen, dies ist jedoch nicht erforderlich.
Spielregeln verhalten sich wie weltenspezifische Konfigurationsoptionen, die der Spieler während des Spiels mit einem Befehl ändern kann. Diese Variablen steuern in der Regel bestimmte Funktionen der Welt, zum Beispiel steuern pvp, spawn_monsters und advance_time, ob PvP aktiviert ist, Monster erscheinen und ob die Zeit verstreicht.
Eine Spielregel erstellen
Um eine benutzerdefinierte Spielregel zu erstellen, erstelle zunächst eine Klasse GameRules; dort werden wir unsere Spielregeln definieren. In dieser Klasse, deklariere zwei Konstanten: Eine Bezeichnung für die Spielregel und die Regel selbst.
java
public class ExampleModGameRules implements ModInitializer {
// Create and register a boolean gamerule, disabled by default
public static final GameRule<Boolean> BAD_VISION_BOOLEAN_GAMERULE = GameRuleBuilder
.forBoolean(false) // Default value declaration
.category(GameRuleCategory.MISC)
.buildAndRegister(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision"));
}1
2
3
4
5
6
7
2
3
4
5
6
7
Das Argument der Kategorie (.category(GameRuleCategory.MISC)) legt fest, unter welche Kategorie die Spielregel in der Oberfläche zur Welterstellung fällt. Dieses Beispiel verwendet die durch Vanilla bereitgestellte Kategorie Verschiedenes, aber zusätzliche Kategorien können über GameRuleCategory.register hinzugefügt werden. In diesem Beispiel haben wir eine boolsche Spielregel mit dem Standardwert false und der ID bad_vision erstellt. Die in Spielregeln gespeicherten Werte sind nicht auf boolesche Werte beschränkt; weitere zulässige Typen sind Doubles, Integers und Enums.
Beispiel einer Spielregel, die einen double speichert:
java
public static final GameRule<Double> DOUBLE_GAMERULE = GameRuleBuilder
.forDouble(6.7) // Default value declaration
.category(GameRuleCategory.MISC)
.buildAndRegister(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "double_example"));1
2
3
4
2
3
4
Auf eine Spielregel zugreifen
Da wir jetzt eine Spielregel und deren Identifier haben, kannst du überall mit der Methode serverLevel.getGameRules().get(GAMERULE) darauf zugreifen, wobei das Argument für .get() deine Spielregelkonstante ist und nicht die ID der Spielregel.
java
boolean badVisionEnabled = serverLevel.getGameRules().get(ExampleModGameRules.BAD_VISION_BOOLEAN_GAMERULE);1
Du kannst dies auch verwenden, um auf die Werte von Vanilla Spielregeln zuzugreifen:
java
boolean doMobGriefing = serverLevel.getGameRules().get(GameRules.MOB_GRIEFING);1
Beispielsweise würde die Implementierung für eine Regel, die bei dem Wert true allen Spielern Blindheit gibt, wie folgt aussehen:
java
// In your mod's onInitialize():
ServerTickEvents.END_WORLD_TICK.register(serverLevel -> {
// Runs every tick on the server
// Check for the state of the gamerule
boolean badVisionEnabled = serverLevel.getGameRules().get(ExampleModGameRules.BAD_VISION_BOOLEAN_GAMERULE);
if (badVisionEnabled) {
// If the gamerule is true
for (Player player : serverLevel.getPlayers(p -> true)) {
// Apply blindness to every player
player.addEffect(new MobEffectInstance(
MobEffects.BLINDNESS,
40,
1,
false,
false,
false
));
}
}
});1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Übersetzungen
Jetzt müssen wir unserer Spielregel einen Anzeigenamen geben, damit sie in der Oberfläche für Spielregeln leicht verständlich ist. Um dies über die Datengenerierung zu erledigen, füge die folgenden Zeilen zu deinem Sprach-Provider hinzu:
java
translationBuilder.add(Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision"), "Bad Vision");1
Zuletzt müssen wir unserer Spielregel eine Beschreibung hinzufügen. Um dies über die Datengenerierung zu erledigen, füge die folgenden Zeilen zu deinem Sprach-Provider hinzu:
java
translationBuilder.add(
Util.makeDescriptionId("gamerule", Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "bad_vision")),
"Gives every player the blindness effect" // A short description of the game rule
);1
2
3
4
2
3
4
INFO
Diese Übersetzungsschlüssel werden bei der Anzeige von Text in der Oberfläche für Spielregeln verwendet. Wenn du die automatische Datengenerierung nicht verwendest, kannst du diese auch manuell in deiner Datei assets/example-mod/lang/en_us.json eintragen.
json
"example-mod.bad_vision": "Bad Vision",
"gamerule.example-mod.bad_vision": "Gives every player the blindness effect",1
2
2
Spielregeln im Spiel ändern
Jetzt solltest du in der Lage sein, den Wert deiner Regel im Spiel mit dem Befehl /gamerule wie folgt zu ändern:
mcfunction
/gamerule example-mod:bad_vision true1
Die Spielregel wird nun auch in der Kategorie Verschiedenes in der Oberfläche Spielregeln bearbeiten angezeigt.






