refactor: prefix module
This commit is contained in:
11 files changed
+233
-96
No files matched your search
@@ -4,8 +4,9 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.inject.*;
|
import com.google.inject.*;
|
||||||
import io.ib67.sfcraft.module.*;
|
import io.ib67.sfcraft.module.*;
|
||||||
import io.ib67.sfcraft.module.chat.ChatPingModule;
|
import io.ib67.sfcraft.module.chat.ChatPrefixModule;
|
||||||
import io.ib67.sfcraft.module.chat.ChatSendLocModule;
|
import io.ib67.sfcraft.module.chat.decorator.ChatPingModule;
|
||||||
|
import io.ib67.sfcraft.module.chat.decorator.ChatSendLocModule;
|
||||||
import io.ib67.sfcraft.module.compat.ModCompatModule;
|
import io.ib67.sfcraft.module.compat.ModCompatModule;
|
||||||
import io.ib67.sfcraft.module.randomevt.LongNightModule;
|
import io.ib67.sfcraft.module.randomevt.LongNightModule;
|
||||||
import io.ib67.sfcraft.module.room.CreativeRoomModule;
|
import io.ib67.sfcraft.module.room.CreativeRoomModule;
|
||||||
@@ -59,6 +60,7 @@ public class SFCraftInitializer extends GuiceModInitializer {
|
|||||||
registerFeature(ModCompatModule.class);
|
registerFeature(ModCompatModule.class);
|
||||||
registerFeature(RoomModule.class);
|
registerFeature(RoomModule.class);
|
||||||
registerFeature(CreativeRoomModule.class);
|
registerFeature(CreativeRoomModule.class);
|
||||||
|
registerFeature(ChatPrefixModule.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import com.google.inject.Inject;
|
|||||||
import io.ib67.sfcraft.ServerModule;
|
import io.ib67.sfcraft.ServerModule;
|
||||||
import io.ib67.sfcraft.callback.SFCallbacks;
|
import io.ib67.sfcraft.callback.SFCallbacks;
|
||||||
import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
||||||
|
import io.ib67.sfcraft.module.chat.ChatPrefix;
|
||||||
|
import io.ib67.sfcraft.module.chat.ChatPrefixModule;
|
||||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||||
import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
|
import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
|
||||||
@@ -19,33 +21,21 @@ import java.util.Objects;
|
|||||||
public class AFKModule extends ServerModule {
|
public class AFKModule extends ServerModule {
|
||||||
@Inject
|
@Inject
|
||||||
private MinecraftServerSupplier serverSupplier;
|
private MinecraftServerSupplier serverSupplier;
|
||||||
private Team team;
|
@Inject
|
||||||
|
private ChatPrefixModule chatPrefixModule;
|
||||||
|
private ChatPrefix prefix;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
SFCallbacks.PLAYER_IDLE.register(this::onAFK);
|
SFCallbacks.PLAYER_IDLE.register(this::onAFK);
|
||||||
ServerPlayConnectionEvents.JOIN.register(this::onJoin);
|
prefix = new ChatPrefix(
|
||||||
ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect);
|
Text.literal("[挂机] ").withColor(Colors.LIGHT_GRAY),
|
||||||
|
"afk",
|
||||||
|
true,
|
||||||
|
10
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDisconnect(ServerPlayNetworkHandler serverPlayNetworkHandler, MinecraftServer server) {
|
|
||||||
if (team != null) {
|
|
||||||
var name = serverPlayNetworkHandler.getPlayer().getName().getLiteralString();
|
|
||||||
if (team.getPlayerList().contains(name)) {
|
|
||||||
team.getPlayerList().remove(name);
|
|
||||||
server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, name, TeamS2CPacket.Operation.REMOVE));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable() {
|
|
||||||
if (team == null) {
|
|
||||||
team = new Team(serverSupplier.get().getScoreboard(), "afk");
|
|
||||||
team.setPrefix(Text.literal("[挂机] ").withColor(Colors.LIGHT_GRAY));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onAFK(ServerPlayerEntity player, boolean afk) {
|
private void onAFK(ServerPlayerEntity player, boolean afk) {
|
||||||
if (afk) {
|
if (afk) {
|
||||||
@@ -56,31 +46,21 @@ public class AFKModule extends ServerModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void enAFK(ServerPlayerEntity player) {
|
private void enAFK(ServerPlayerEntity player) {
|
||||||
String playerName = player.getName().getLiteralString();
|
chatPrefixModule.applyPrefix(player, prefix);
|
||||||
team.getPlayerList().add(playerName);
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
player.server.getPlayerManager().broadcast(
|
player.server.getPlayerManager().broadcast(
|
||||||
Text.literal(" * " + playerName + " 正在挂机.").withColor(Colors.LIGHT_GRAY),
|
Text.literal(" * " + player.getName().getLiteralString() + " 正在挂机.").withColor(Colors.LIGHT_GRAY),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
SFCallbacks.PLAYER_AFK.invoker().onAFKStatus(player,true);
|
SFCallbacks.PLAYER_AFK.invoker().onAFKStatus(player, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deAFK(ServerPlayerEntity player) {
|
public void deAFK(ServerPlayerEntity player) {
|
||||||
String playerName = player.getName().getLiteralString();
|
String playerName = player.getName().getLiteralString();
|
||||||
team.getPlayerList().remove(playerName);
|
chatPrefixModule.removePrefix(player, prefix);
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, playerName, TeamS2CPacket.Operation.REMOVE));
|
|
||||||
player.server.getPlayerManager().broadcast(
|
player.server.getPlayerManager().broadcast(
|
||||||
Text.literal(" * " + playerName + " 回来了.").withColor(Colors.LIGHT_GRAY),
|
Text.literal(" * " + playerName + " 回来了.").withColor(Colors.LIGHT_GRAY),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
SFCallbacks.PLAYER_AFK.invoker().onAFKStatus(player,false);
|
SFCallbacks.PLAYER_AFK.invoker().onAFKStatus(player, false);
|
||||||
}
|
|
||||||
|
|
||||||
private void onJoin(ServerPlayNetworkHandler serverPlayNetworkHandler, PacketSender packetSender, MinecraftServer minecraftServer) {
|
|
||||||
if (team != null) {
|
|
||||||
packetSender.sendPacket(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package io.ib67.sfcraft.module.chat;
|
||||||
|
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public record ChatPrefix(
|
||||||
|
Text prefix,
|
||||||
|
String id,
|
||||||
|
boolean temporary,
|
||||||
|
int priority
|
||||||
|
) implements Comparable<ChatPrefix> {
|
||||||
|
public ChatPrefix {
|
||||||
|
Objects.requireNonNull(id, "id cannot be null");
|
||||||
|
Objects.requireNonNull(prefix, "prefix cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return id.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return obj != null && obj instanceof ChatPrefix && ((ChatPrefix) obj).id.equals(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(@NotNull ChatPrefix o) {
|
||||||
|
return Integer.compare(priority, o.priority);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
package io.ib67.sfcraft.module.chat;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import io.ib67.sfcraft.ServerModule;
|
||||||
|
import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
||||||
|
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||||
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.network.packet.Packet;
|
||||||
|
import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
|
||||||
|
import net.minecraft.scoreboard.Team;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class ChatPrefixModule extends ServerModule {
|
||||||
|
@Inject
|
||||||
|
private MinecraftServerSupplier serverSupplier;
|
||||||
|
private volatile ChatPrefix empty;
|
||||||
|
private final Map<UUID, SortedSet<ChatPrefix>> playerPrefixes = new HashMap<>();
|
||||||
|
private final Map<String, Team> virtualTeams = new HashMap<>();
|
||||||
|
private final Map<UUID, Team> players = new HashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInitialize() {
|
||||||
|
ServerPlayConnectionEvents.JOIN.register(this::onJoin);
|
||||||
|
ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
empty = new ChatPrefix(
|
||||||
|
Text.empty(),
|
||||||
|
"EMPTY",
|
||||||
|
true,
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
virtualTeams.put(empty.id(), createTeamFrom(empty));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onDisconnect(ServerPlayNetworkHandler serverPlayNetworkHandler, MinecraftServer minecraftServer) {
|
||||||
|
var player = serverPlayNetworkHandler.getPlayer();
|
||||||
|
var current = getCurrentPrefix(player);
|
||||||
|
if (current.temporary()) {
|
||||||
|
removeFromTeam(player, players.get(player.getUuid()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onJoin(ServerPlayNetworkHandler networkHandler, PacketSender sender, MinecraftServer minecraftServer) {
|
||||||
|
for (Map.Entry<UUID, Team> uuidTeamEntry : players.entrySet()) {
|
||||||
|
var team = uuidTeamEntry.getValue();
|
||||||
|
sender.sendPacket(TeamS2CPacket.updateTeam(team, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onPrefixUpdate(PlayerEntity player) {
|
||||||
|
var lastTeam = players.get(player.getUuid());
|
||||||
|
var current = virtualTeams.get(playerPrefixes.get(player.getUuid()).getFirst().id());
|
||||||
|
if (lastTeam == current) return;
|
||||||
|
if (lastTeam != null) removeFromTeam(player, lastTeam);
|
||||||
|
if (current == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
addToTeam(player, current);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addToTeam(PlayerEntity player, Team team) {
|
||||||
|
var playerName = player.getName().getLiteralString();
|
||||||
|
team.getPlayerList().add(playerName);
|
||||||
|
sendToAll(TeamS2CPacket.updateTeam(team, true));
|
||||||
|
players.put(player.getUuid(), team);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeFromTeam(PlayerEntity player, Team team) {
|
||||||
|
var playerName = player.getName().getLiteralString();
|
||||||
|
team.getPlayerList().remove(playerName);
|
||||||
|
sendToAll(TeamS2CPacket.updateTeam(team, true));
|
||||||
|
var current = getCurrentPrefix(player);
|
||||||
|
var newTeam = virtualTeams.get(current.id());
|
||||||
|
addToTeam(player, newTeam);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendToAll(Packet<?> packet) {
|
||||||
|
serverSupplier.get().getPlayerManager().sendToAll(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void applyPrefix(PlayerEntity player, ChatPrefix prefix) {
|
||||||
|
if (hasPrefix(player.getUuid(), prefix)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
playerPrefixes.get(player.getUuid()).add(prefix);
|
||||||
|
onPrefixUpdate(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePrefix(PlayerEntity player, ChatPrefix prefix) {
|
||||||
|
if (!hasPrefix(player.getUuid(), prefix)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
playerPrefixes.get(player.getUuid()).remove(prefix);
|
||||||
|
onPrefixUpdate(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatPrefix getCurrentPrefix(PlayerEntity player) {
|
||||||
|
if (!playerPrefixes.containsKey(player.getUuid())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return playerPrefixes.get(player.getUuid()).first();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPrefix(UUID player, ChatPrefix prefix) {
|
||||||
|
if (!virtualTeams.containsKey(prefix.id())) {
|
||||||
|
virtualTeams.put(prefix.id(), createTeamFrom(prefix));
|
||||||
|
}
|
||||||
|
return playerPrefixes.computeIfAbsent(player, ignored -> new TreeSet<>(List.of(empty))).contains(prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Team createTeamFrom(ChatPrefix prefix) {
|
||||||
|
var t = new Team(
|
||||||
|
serverSupplier.get().getScoreboard(),
|
||||||
|
prefix.id()
|
||||||
|
);
|
||||||
|
t.setPrefix(prefix.prefix());
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-2
@@ -1,4 +1,4 @@
|
|||||||
package io.ib67.sfcraft.module.chat;
|
package io.ib67.sfcraft.module.chat.decorator;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.ib67.sfcraft.ServerModule;
|
import io.ib67.sfcraft.ServerModule;
|
||||||
@@ -9,7 +9,6 @@ import net.minecraft.entity.player.PlayerEntity;
|
|||||||
import net.minecraft.network.message.MessageDecorator;
|
import net.minecraft.network.message.MessageDecorator;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvent;
|
|
||||||
import net.minecraft.sound.SoundEvents;
|
import net.minecraft.sound.SoundEvents;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Colors;
|
import net.minecraft.util.Colors;
|
||||||
+1
-2
@@ -1,4 +1,4 @@
|
|||||||
package io.ib67.sfcraft.module.chat;
|
package io.ib67.sfcraft.module.chat.decorator;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import io.ib67.sfcraft.ServerModule;
|
import io.ib67.sfcraft.ServerModule;
|
||||||
@@ -6,7 +6,6 @@ import io.ib67.sfcraft.registry.chat.SimpleMessageDecorator;
|
|||||||
import io.ib67.sfcraft.util.Helper;
|
import io.ib67.sfcraft.util.Helper;
|
||||||
import io.ib67.sfcraft.util.SFConsts;
|
import io.ib67.sfcraft.util.SFConsts;
|
||||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
import net.minecraft.entity.effect.StatusEffectUtil;
|
|
||||||
import net.minecraft.entity.effect.StatusEffects;
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
import net.minecraft.network.message.MessageDecorator;
|
import net.minecraft.network.message.MessageDecorator;
|
||||||
import net.minecraft.registry.RegistryKey;
|
import net.minecraft.registry.RegistryKey;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package io.ib67.sfcraft.module.chat;
|
package io.ib67.sfcraft.module.chat.decorator;
|
||||||
|
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
@@ -8,6 +8,8 @@ import io.ib67.sfcraft.ServerModule;
|
|||||||
import io.ib67.sfcraft.callback.SFCallbacks;
|
import io.ib67.sfcraft.callback.SFCallbacks;
|
||||||
import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
import io.ib67.sfcraft.inject.MinecraftServerSupplier;
|
||||||
import io.ib67.sfcraft.module.RoomModule;
|
import io.ib67.sfcraft.module.RoomModule;
|
||||||
|
import io.ib67.sfcraft.module.chat.ChatPrefix;
|
||||||
|
import io.ib67.sfcraft.module.chat.ChatPrefixModule;
|
||||||
import io.ib67.sfcraft.registry.RoomRegistry;
|
import io.ib67.sfcraft.registry.RoomRegistry;
|
||||||
import io.ib67.sfcraft.room.RoomTeleporter;
|
import io.ib67.sfcraft.room.RoomTeleporter;
|
||||||
import io.ib67.sfcraft.room.create.CreativeSpaceFactory;
|
import io.ib67.sfcraft.room.create.CreativeSpaceFactory;
|
||||||
@@ -29,8 +31,10 @@ import net.minecraft.server.network.ServerPlayNetworkHandler;
|
|||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Colors;
|
import net.minecraft.util.Colors;
|
||||||
|
import net.minecraft.world.GameMode;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class CreativeRoomModule extends ServerModule {
|
public class CreativeRoomModule extends ServerModule {
|
||||||
@@ -50,19 +54,24 @@ public class CreativeRoomModule extends ServerModule {
|
|||||||
private RoomModule roomModule;
|
private RoomModule roomModule;
|
||||||
@Inject
|
@Inject
|
||||||
private MinecraftServerSupplier serverSupplier;
|
private MinecraftServerSupplier serverSupplier;
|
||||||
|
@Inject
|
||||||
|
private ChatPrefixModule chatPrefixModule;
|
||||||
private CreativeSpaceRoom room;
|
private CreativeSpaceRoom room;
|
||||||
private Team team;
|
private ChatPrefix prefix;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
|
prefix = new ChatPrefix(
|
||||||
|
Text.literal("[PLAYGRD] ").withColor(Colors.LIGHT_YELLOW),
|
||||||
|
"playgrd",
|
||||||
|
true,
|
||||||
|
20
|
||||||
|
);
|
||||||
CommandRegistrationCallback.EVENT
|
CommandRegistrationCallback.EVENT
|
||||||
.register(this::registerCommand);
|
.register(this::registerCommand);
|
||||||
ServerPlayConnectionEvents.JOIN.register(this::onJoin);
|
|
||||||
ServerPlayConnectionEvents.DISCONNECT.register(this::onDisconnect);
|
|
||||||
PermissionCheckEvent.EVENT.register(this::onWorldEdit);
|
PermissionCheckEvent.EVENT.register(this::onWorldEdit);
|
||||||
PermissionCheckEvent.EVENT.register(this::onOtherCommands);
|
PermissionCheckEvent.EVENT.register(this::onOtherCommands);
|
||||||
SFCallbacks.PLAYER_AFK.register(this::onAFK);
|
room = new CreativeSpaceRoom(this);
|
||||||
room = new CreativeSpaceRoom();
|
|
||||||
roomRegistry.registerRoomType(CreativeSpaceRoom.class, CreativeSpaceRoom.WORLD, new CreativeSpaceFactory(room));
|
roomRegistry.registerRoomType(CreativeSpaceRoom.class, CreativeSpaceRoom.WORLD, new CreativeSpaceFactory(room));
|
||||||
roomRegistry.createRoomOf(CreativeSpaceRoom.class, CreativeSpaceRoom.IDENTIFIER, null, (String) null);
|
roomRegistry.createRoomOf(CreativeSpaceRoom.class, CreativeSpaceRoom.IDENTIFIER, null, (String) null);
|
||||||
roomModule.enqueuePregen(CreativeSpaceRoom.WORLD, CreativeSpaceRoom.SPAWN_POS);
|
roomModule.enqueuePregen(CreativeSpaceRoom.WORLD, CreativeSpaceRoom.SPAWN_POS);
|
||||||
@@ -92,44 +101,6 @@ public class CreativeRoomModule extends ServerModule {
|
|||||||
return TriState.DEFAULT;
|
return TriState.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAFK(ServerPlayerEntity player, boolean b) {
|
|
||||||
if (!b) {
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, player.getName().getLiteralString(), TeamS2CPacket.Operation.ADD));
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onDisconnect(ServerPlayNetworkHandler serverPlayNetworkHandler, MinecraftServer minecraftServer) {
|
|
||||||
ServerPlayerEntity player = serverPlayNetworkHandler.getPlayer();
|
|
||||||
if (!RoomModule.isVirtual(player.getUuid())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String playerName = player.getName().getLiteralString();
|
|
||||||
team.getPlayerList().remove(playerName);
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.changePlayerTeam(team, playerName, TeamS2CPacket.Operation.REMOVE));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onJoin(ServerPlayNetworkHandler serverPlayNetworkHandler, PacketSender packetSender, MinecraftServer minecraftServer) {
|
|
||||||
ServerPlayerEntity player = serverPlayNetworkHandler.getPlayer();
|
|
||||||
if (RoomModule.isVirtual(player.getUuid())) {
|
|
||||||
String playerName = player.getName().getLiteralString();
|
|
||||||
team.getPlayerList().add(playerName);
|
|
||||||
}
|
|
||||||
player.server.getPlayerManager().sendToAll(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
packetSender.sendPacket(TeamS2CPacket.updateTeam(team, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEnable() {
|
|
||||||
if (team == null) {
|
|
||||||
team = new Team(serverSupplier.get().getScoreboard(), "playgrd");
|
|
||||||
team.setPrefix(Text.literal("[游乐场] ").withColor(Colors.LIGHT_YELLOW));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void registerCommand(CommandDispatcher<ServerCommandSource> dispatcher,
|
private void registerCommand(CommandDispatcher<ServerCommandSource> dispatcher,
|
||||||
CommandRegistryAccess registry, CommandManager.RegistrationEnvironment env) {
|
CommandRegistryAccess registry, CommandManager.RegistrationEnvironment env) {
|
||||||
dispatcher.register(
|
dispatcher.register(
|
||||||
@@ -144,4 +115,23 @@ public class CreativeRoomModule extends ServerModule {
|
|||||||
teleporter.teleportTo(room, player);
|
teleporter.teleportTo(room, player);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onPlayerJoin(ServerPlayerEntity player) {
|
||||||
|
player.sendMessage(Text.of("你现在正在创造游乐园中,使用 //schem list 查看可用投影。"));
|
||||||
|
player.sendMessage(Text.literal("以下功能现在可用:").withColor(Colors.WHITE)
|
||||||
|
.append(Text.literal("/player /track /summon /setblock /time /gamerule /weather 及 WorldEdit 的所有命令").withColor(Color.MAGENTA.getRGB()).append("。")));
|
||||||
|
player.sendMessage(Text.of(" "));
|
||||||
|
player.sendMessage(Text.literal("如何上传投影到游乐场: ").withColor(Colors.GRAY)
|
||||||
|
.append(Text.literal("https://github.com/saltedfishclub/sfcraft-schematics").withColor(Colors.GRAY).styled(it -> it.withUnderline(true))) );
|
||||||
|
player.sendMessage(Text.literal("游乐园中的生物不能逃逸到其他维度。").withColor(Colors.GRAY));
|
||||||
|
player.sendMessage(Text.literal("使用 /reco 或重新加入游戏即可离开。").withColor(Colors.GRAY));
|
||||||
|
player.changeGameMode(GameMode.CREATIVE);
|
||||||
|
|
||||||
|
chatPrefixModule.applyPrefix(player, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPlayerQuit(ServerPlayerEntity player) {
|
||||||
|
System.out.println(player.getUuid());
|
||||||
|
chatPrefixModule.removePrefix(player, prefix);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.ib67.sfcraft.room.create;
|
package io.ib67.sfcraft.room.create;
|
||||||
|
|
||||||
|
import io.ib67.sfcraft.module.room.CreativeRoomModule;
|
||||||
import io.ib67.sfcraft.room.SimpleRoomPlayerManager;
|
import io.ib67.sfcraft.room.SimpleRoomPlayerManager;
|
||||||
import io.ib67.sfcraft.subserver.Room;
|
import io.ib67.sfcraft.subserver.Room;
|
||||||
import io.ib67.sfcraft.subserver.RoomSession;
|
import io.ib67.sfcraft.subserver.RoomSession;
|
||||||
@@ -7,12 +8,15 @@ import io.ib67.sfcraft.subserver.RoomSession;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class CreativePlayerManager extends SimpleRoomPlayerManager {
|
public class CreativePlayerManager extends SimpleRoomPlayerManager {
|
||||||
protected CreativePlayerManager(Room room) {
|
protected final CreativeRoomModule module;
|
||||||
|
|
||||||
|
protected CreativePlayerManager(Room room, CreativeRoomModule module) {
|
||||||
super(room);
|
super(room);
|
||||||
|
this.module = module;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RoomSession createSession(UUID id) {
|
protected RoomSession createSession(UUID id) {
|
||||||
return new CreativePlayerSession(room);
|
return new CreativePlayerSession(room, module);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.ib67.sfcraft.room.create;
|
package io.ib67.sfcraft.room.create;
|
||||||
|
|
||||||
|
import io.ib67.sfcraft.module.room.CreativeRoomModule;
|
||||||
import io.ib67.sfcraft.subserver.Room;
|
import io.ib67.sfcraft.subserver.Room;
|
||||||
import io.ib67.sfcraft.subserver.RoomSession;
|
import io.ib67.sfcraft.subserver.RoomSession;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
@@ -13,9 +14,11 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class CreativePlayerSession extends RoomSession {
|
public class CreativePlayerSession extends RoomSession {
|
||||||
private final GlobalPos spawn;
|
private final GlobalPos spawn;
|
||||||
|
protected final CreativeRoomModule module;
|
||||||
|
|
||||||
protected CreativePlayerSession(Room room) {
|
protected CreativePlayerSession(Room room, CreativeRoomModule module) {
|
||||||
super(room);
|
super(room);
|
||||||
|
this.module = module;
|
||||||
spawn = new GlobalPos(
|
spawn = new GlobalPos(
|
||||||
CreativeSpaceRoom.WORLD,
|
CreativeSpaceRoom.WORLD,
|
||||||
CreativeSpaceRoom.SPAWN_POS
|
CreativeSpaceRoom.SPAWN_POS
|
||||||
@@ -24,10 +27,7 @@ public class CreativePlayerSession extends RoomSession {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerJoin(ServerPlayerEntity player) {
|
public void onPlayerJoin(ServerPlayerEntity player) {
|
||||||
player.sendMessage(Text.of("你现在正在创造游乐园中。"));
|
module.onPlayerJoin(player);
|
||||||
player.sendMessage(Text.literal("游乐园中的生物不能逃逸到其他维度。").withColor(Colors.GRAY));
|
|
||||||
player.sendMessage(Text.literal("使用 /reco 或重新加入游戏即可离开。").withColor(Colors.GRAY));
|
|
||||||
player.changeGameMode(GameMode.CREATIVE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -42,6 +42,6 @@ public class CreativePlayerSession extends RoomSession {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerQuit(ServerPlayerEntity player) {
|
public void onPlayerQuit(ServerPlayerEntity player) {
|
||||||
|
module.onPlayerQuit(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.ib67.sfcraft.room.create;
|
package io.ib67.sfcraft.room.create;
|
||||||
|
|
||||||
|
import io.ib67.sfcraft.module.room.CreativeRoomModule;
|
||||||
import io.ib67.sfcraft.subserver.Room;
|
import io.ib67.sfcraft.subserver.Room;
|
||||||
import io.ib67.sfcraft.subserver.RoomPlayerManager;
|
import io.ib67.sfcraft.subserver.RoomPlayerManager;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -18,8 +19,8 @@ public class CreativeSpaceRoom implements Room {
|
|||||||
@Getter
|
@Getter
|
||||||
private final RoomPlayerManager playerManager;
|
private final RoomPlayerManager playerManager;
|
||||||
|
|
||||||
public CreativeSpaceRoom() {
|
public CreativeSpaceRoom(CreativeRoomModule module) {
|
||||||
this.playerManager = new CreativePlayerManager(this);
|
this.playerManager = new CreativePlayerManager(this,module);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in new issue
Block a user