Make extension's rules get properly synced with clients
This commit is contained in:
1 parent
f40e797e3e
commit
5bb6862a53
2 files changed
+45
-13
No files matched your search
@@ -1,9 +1,11 @@
|
|||||||
package carpet.network;
|
package carpet.network;
|
||||||
|
|
||||||
import carpet.CarpetServer;
|
import carpet.CarpetServer;
|
||||||
|
import carpet.CarpetExtension;
|
||||||
import carpet.CarpetSettings;
|
import carpet.CarpetSettings;
|
||||||
import carpet.helpers.TickSpeed;
|
import carpet.helpers.TickSpeed;
|
||||||
import carpet.settings.ParsedRule;
|
import carpet.settings.ParsedRule;
|
||||||
|
import carpet.settings.SettingsManager;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
import net.minecraft.nbt.AbstractNumberTag;
|
import net.minecraft.nbt.AbstractNumberTag;
|
||||||
@@ -19,36 +21,58 @@ import java.util.function.BiConsumer;
|
|||||||
|
|
||||||
public class ClientNetworkHandler
|
public class ClientNetworkHandler
|
||||||
{
|
{
|
||||||
private static Map<String, BiConsumer<ClientPlayerEntity, Tag>> dataHandlers = new HashMap<String, BiConsumer<ClientPlayerEntity, Tag>>(){{
|
private static Map<String, BiConsumer<ClientPlayerEntity, Tag>> dataHandlers = new HashMap<String, BiConsumer<ClientPlayerEntity, Tag>>();
|
||||||
put("Rules", (p, t) -> {
|
static
|
||||||
|
{
|
||||||
|
dataHandlers.put("Rules", (p, t) -> {
|
||||||
CompoundTag ruleset = (CompoundTag)t;
|
CompoundTag ruleset = (CompoundTag)t;
|
||||||
for (String ruleName: ruleset.getKeys())
|
for (String fullRuleName: ruleset.getKeys())
|
||||||
{
|
{
|
||||||
ParsedRule<?> rule = CarpetServer.settingsManager.getRule(ruleName);
|
int separatorPos = fullRuleName.indexOf(':');
|
||||||
|
SettingsManager manager = null;
|
||||||
|
String ruleName;
|
||||||
|
if (separatorPos > -1)
|
||||||
|
{
|
||||||
|
String identifier = fullRuleName.substring(0,separatorPos);
|
||||||
|
ruleName = fullRuleName.substring(separatorPos + 1);
|
||||||
|
for (CarpetExtension extension:CarpetServer.extensions) {
|
||||||
|
SettingsManager eManager = extension.customSettingsManager();
|
||||||
|
if (eManager != null && identifier.equals(eManager.getIdentifier()))
|
||||||
|
{
|
||||||
|
manager = eManager;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ruleName = fullRuleName;
|
||||||
|
manager = CarpetServer.settingsManager;
|
||||||
|
}
|
||||||
|
ParsedRule<?> rule = (manager != null) ? manager.getRule(ruleName) : null;
|
||||||
if (rule == null)
|
if (rule == null)
|
||||||
CarpetSettings.LOG.error("Received unknown rule: "+ruleName);
|
CarpetSettings.LOG.error("Received unknown rule: "+fullRuleName);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CompoundTag ruleNBT = (CompoundTag) ruleset.get(ruleName);
|
CompoundTag ruleNBT = (CompoundTag) ruleset.get(fullRuleName);
|
||||||
String value = ruleNBT.getString("Value");
|
String value = ruleNBT.getString("Value");
|
||||||
rule.set(null, value);
|
rule.set(null, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
put("TickRate", (p, t) -> TickSpeed.tickrate(((AbstractNumberTag)t).getFloat(), false));
|
dataHandlers.put("TickRate", (p, t) -> TickSpeed.tickrate(((AbstractNumberTag)t).getFloat(), false));
|
||||||
put("scShape", (p, t) -> { // deprecated
|
dataHandlers.put("scShape", (p, t) -> { // deprecated
|
||||||
if (CarpetClient.shapes != null)
|
if (CarpetClient.shapes != null)
|
||||||
CarpetClient.shapes.addShape((CompoundTag)t);
|
CarpetClient.shapes.addShape((CompoundTag)t);
|
||||||
});
|
});
|
||||||
put("scShapes", (p, t) -> {
|
dataHandlers.put("scShapes", (p, t) -> {
|
||||||
if (CarpetClient.shapes != null)
|
if (CarpetClient.shapes != null)
|
||||||
CarpetClient.shapes.addShapes((ListTag) t);
|
CarpetClient.shapes.addShapes((ListTag) t);
|
||||||
});
|
});
|
||||||
put("clientCommand", (p, t) -> {
|
dataHandlers.put("clientCommand", (p, t) -> {
|
||||||
CarpetClient.onClientCommand(t);
|
CarpetClient.onClientCommand(t);
|
||||||
});
|
});
|
||||||
}};
|
};
|
||||||
|
|
||||||
|
|
||||||
public static void handleData(PacketByteBuf data, ClientPlayerEntity player)
|
public static void handleData(PacketByteBuf data, ClientPlayerEntity player)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import carpet.CarpetServer;
|
|||||||
import carpet.CarpetSettings;
|
import carpet.CarpetSettings;
|
||||||
import carpet.helpers.TickSpeed;
|
import carpet.helpers.TickSpeed;
|
||||||
import carpet.settings.ParsedRule;
|
import carpet.settings.ParsedRule;
|
||||||
|
import carpet.settings.SettingsManager;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.ListTag;
|
import net.minecraft.nbt.ListTag;
|
||||||
@@ -78,6 +79,12 @@ public class ServerNetworkHandler
|
|||||||
CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion);
|
CarpetSettings.LOG.warn("Player "+playerEntity.getName().getString()+" joined with another carpet version: "+clientVersion);
|
||||||
DataBuilder data = DataBuilder.create().withTickRate();
|
DataBuilder data = DataBuilder.create().withTickRate();
|
||||||
CarpetServer.settingsManager.getRules().forEach(data::withRule);
|
CarpetServer.settingsManager.getRules().forEach(data::withRule);
|
||||||
|
CarpetServer.extensions.forEach(e -> {
|
||||||
|
SettingsManager eManager = e.customSettingsManager();
|
||||||
|
if (eManager != null) {
|
||||||
|
eManager.getRules().forEach(data::withRule);
|
||||||
|
}
|
||||||
|
});
|
||||||
playerEntity.networkHandler.sendPacket(new CustomPayloadS2CPacket(CarpetClient.CARPET_CHANNEL, data.build() ));
|
playerEntity.networkHandler.sendPacket(new CustomPayloadS2CPacket(CarpetClient.CARPET_CHANNEL, data.build() ));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,9 +241,10 @@ public class ServerNetworkHandler
|
|||||||
rules = new CompoundTag();
|
rules = new CompoundTag();
|
||||||
tag.put("Rules", rules);
|
tag.put("Rules", rules);
|
||||||
}
|
}
|
||||||
|
String identifier = (rule.settingsManager != CarpetServer.settingsManager) ? rule.settingsManager.getIdentifier()+":" : "";
|
||||||
CompoundTag ruleNBT = new CompoundTag();
|
CompoundTag ruleNBT = new CompoundTag();
|
||||||
ruleNBT.putString("Value", rule.getAsString());
|
ruleNBT.putString("Value", rule.getAsString());
|
||||||
rules.put(rule.name, ruleNBT);
|
rules.put(identifier+rule.name, ruleNBT);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user