Move rule change event into a rule observer and outside the Java api
* Move rule change event into a rule observer, without exposing it * Fix comment * Fix formatting changes added by my IDE Still trying to configure it to force correctly the new style Also remove some finals
This commit is contained in:
1 parent
06bdbdaed2
commit
0869cbb81c
4 files changed
+40
-36
No files matched your search
@@ -100,15 +100,14 @@ public interface CarpetRule<T> {
|
|||||||
/**
|
/**
|
||||||
* <p>Sets this rule's value to the provided {@link String}, after first converting the {@link String} into a suitable type.</p>
|
* <p>Sets this rule's value to the provided {@link String}, after first converting the {@link String} into a suitable type.</p>
|
||||||
*
|
*
|
||||||
* <p>This methods run any required validation on the value first, and throws {@link InvalidRuleValueException} if the value is not suitable
|
* <p>This methods run any required validation on the value first, and throws {@link InvalidRuleValueException} if the value is not suitable for
|
||||||
* for this rule, regardless of whether it was impossible to convert the value to the required type, the rule doesn't accept the
|
* this rule, regardless of whether it was impossible to convert the value to the required type, the rule doesn't accept the value, or the rule is
|
||||||
* value, or the rule is immutable.</p>
|
* immutable.</p>
|
||||||
*
|
*
|
||||||
* <p>Implementations of this method must notify their {@link SettingsManager} by calling
|
* <p>Implementations of this method must notify their {@link SettingsManager} by calling
|
||||||
* {@link SettingsManager#notifyRuleChanged(CommandSourceStack, CarpetRule, String)}, who is responsible for
|
* {@link SettingsManager#notifyRuleChanged(CommandSourceStack, CarpetRule, String)}, who is responsible for notifying the
|
||||||
* notifying the {@link ServerNetworkHandler} (if the rule isn't restricted from being synchronized with clients)
|
* {@link ServerNetworkHandler} (if the rule isn't restricted from being synchronized with clients) and other rule observers like the Scarpet
|
||||||
* and the {@link CarpetEventServer.Event#CARPET_RULE_CHANGES#onCarpetRuleChanges(CarpetRule, CommandSourceStack)} Scarpet event
|
* event, in case the value of the rule was changed because of the invocation.</p>
|
||||||
* in case the value of the rule was changed because of the invocation.</p>
|
|
||||||
*
|
*
|
||||||
* <p>This method must not throw any exception other than the documented {@link InvalidRuleValueException}.</p>
|
* <p>This method must not throw any exception other than the documented {@link InvalidRuleValueException}.</p>
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ import java.util.function.Predicate;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import carpet.script.CarpetEventServer;
|
|
||||||
import carpet.script.value.StringValue;
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
@@ -259,39 +257,12 @@ public class SettingsManager {
|
|||||||
rules.put(rule.name(), rule);
|
rules.put(rule.name(), rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final CarpetEventServer.Event CARPET_RULE_CHANGES = new CarpetEventServer.Event("carpet_rule_changes", 2, true)
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void handleAny(final Object ... args)
|
|
||||||
{
|
|
||||||
final CarpetRule<?> rule = (CarpetRule<?>) args[0];
|
|
||||||
final CommandSourceStack source = (CommandSourceStack) args[1];
|
|
||||||
final String id = rule.settingsManager().identifier();
|
|
||||||
final String namespace;
|
|
||||||
if (!id.equals("carpet"))
|
|
||||||
{
|
|
||||||
namespace = id + ":";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
namespace = "";
|
|
||||||
}
|
|
||||||
handler.call(
|
|
||||||
() -> Arrays.asList(
|
|
||||||
new StringValue(namespace + rule.name()),
|
|
||||||
new StringValue(RuleHelper.toRuleString(rule.value()))
|
|
||||||
), () -> source
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public void notifyRuleChanged(CommandSourceStack source, CarpetRule<?> rule, String userInput)
|
public void notifyRuleChanged(CommandSourceStack source, CarpetRule<?> rule, String userInput)
|
||||||
{
|
{
|
||||||
observers.forEach(observer -> observer.ruleChanged(source, rule, userInput));
|
observers.forEach(observer -> observer.ruleChanged(source, rule, userInput));
|
||||||
staticObservers.forEach(observer -> observer.ruleChanged(source, rule, userInput));
|
staticObservers.forEach(observer -> observer.ruleChanged(source, rule, userInput));
|
||||||
ServerNetworkHandler.updateRuleWithConnectedClients(rule);
|
ServerNetworkHandler.updateRuleWithConnectedClients(rule);
|
||||||
switchScarpetRuleIfNeeded(source, rule); //TODO move into rule
|
switchScarpetRuleIfNeeded(source, rule); //TODO move into rule
|
||||||
if (CARPET_RULE_CHANGES.isNeeded()) CARPET_RULE_CHANGES.handleAny(rule, source);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -437,6 +437,11 @@ public class CarpetEventServer
|
|||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
Carpet.initCarpetEvents();
|
||||||
|
}
|
||||||
|
|
||||||
public static final Event START = new Event("server_starts", 0, true)
|
public static final Event START = new Event("server_starts", 0, true)
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import carpet.helpers.TickSpeed;
|
|||||||
import carpet.logging.HUDController;
|
import carpet.logging.HUDController;
|
||||||
import carpet.network.ServerNetworkHandler;
|
import carpet.network.ServerNetworkHandler;
|
||||||
import carpet.patches.EntityPlayerMPFake;
|
import carpet.patches.EntityPlayerMPFake;
|
||||||
|
import carpet.script.CarpetEventServer;
|
||||||
import carpet.script.CarpetExpression;
|
import carpet.script.CarpetExpression;
|
||||||
import carpet.script.CarpetScriptHost;
|
import carpet.script.CarpetScriptHost;
|
||||||
import carpet.script.CarpetScriptServer;
|
import carpet.script.CarpetScriptServer;
|
||||||
@@ -40,6 +41,7 @@ import java.io.IOException;
|
|||||||
import java.nio.file.FileVisitOption;
|
import java.nio.file.FileVisitOption;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -214,6 +216,33 @@ public class Carpet
|
|||||||
throw new LoadException(String.format("%s requires a version of mod '%s' matching '%s', which is missing!", host.getName(), requiredModId, stringPredicate));
|
throw new LoadException(String.format("%s requires a version of mod '%s' matching '%s', which is missing!", host.getName(), requiredModId, stringPredicate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// to be ran once during CarpetEventServer.Event static init
|
||||||
|
public static void initCarpetEvents() {
|
||||||
|
CarpetEventServer.Event carpetRuleChanges = new CarpetEventServer.Event("carpet_rule_changes", 2, true)
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void handleAny(final Object... args)
|
||||||
|
{
|
||||||
|
CarpetRule<?> rule = (CarpetRule<?>) args[0];
|
||||||
|
CommandSourceStack source = (CommandSourceStack) args[1];
|
||||||
|
String id = rule.settingsManager().identifier();
|
||||||
|
String namespace;
|
||||||
|
if (!id.equals("carpet"))
|
||||||
|
{
|
||||||
|
namespace = id + ":";
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
namespace = "";
|
||||||
|
}
|
||||||
|
handler.call(() -> Arrays.asList(
|
||||||
|
new StringValue(namespace + rule.name()),
|
||||||
|
new StringValue(RuleHelper.toRuleString(rule.value()))
|
||||||
|
), () -> source);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
SettingsManager.registerGlobalRuleObserver((source, changedRule, userInput) -> carpetRuleChanges.handleAny(changedRule, source));
|
||||||
|
}
|
||||||
|
|
||||||
public static class ScarpetAppStoreValidator extends Validator<String>
|
public static class ScarpetAppStoreValidator extends Validator<String>
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in new issue
Block a user