60 lines
3.0 KiB
Java
60 lines
3.0 KiB
Java
package wtf.hak.survivalfabric.mixin;
|
|
|
|
import net.minecraft.network.ClientConnection;
|
|
import net.minecraft.network.message.MessageType;
|
|
import net.minecraft.network.message.SignedMessage;
|
|
import net.minecraft.server.PlayerManager;
|
|
import net.minecraft.server.network.ConnectedClientData;
|
|
import net.minecraft.server.network.ServerPlayerEntity;
|
|
import net.minecraft.text.Text;
|
|
import net.minecraft.world.GameMode;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
import wtf.hak.survivalfabric.commands.SpectatorCommand;
|
|
import wtf.hak.survivalfabric.config.ConfigManager;
|
|
|
|
import java.util.Objects;
|
|
import java.util.Set;
|
|
|
|
@Mixin(PlayerManager.class)
|
|
public abstract class PlayerManagerMixin {
|
|
|
|
@Inject(method = {"onPlayerConnect"}, at = {@At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V")})
|
|
public void onPlayerConnect(ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci) {
|
|
if(ConfigManager.getConfig().joinMessageEnabled) {
|
|
Text text = Text.literal(String.format(ConfigManager.getConfig().joinMessage, player.getName().getString()));
|
|
player.sendMessage(text, false);
|
|
}
|
|
}
|
|
|
|
@ModifyArg(method = {"onPlayerConnect"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V"))
|
|
private Text onPlayerConnect(Text text) {
|
|
if(ConfigManager.getConfig().joinMessageEnabled) {
|
|
String name = text.getString().split(" ")[0];
|
|
return Text.literal(String.format(ConfigManager.getConfig().joinMessage, name));
|
|
} else
|
|
return text;
|
|
}
|
|
|
|
@Inject(method = {"remove"}, at = {@At("HEAD")})
|
|
public void onPlayerLeave(ServerPlayerEntity player, CallbackInfo ci) {
|
|
if(SpectatorCommand.spectating.containsKey(player)) {
|
|
SpectatorCommand.LocationData loc = SpectatorCommand.spectating.remove(player);
|
|
player.teleport(loc.world, loc.x,loc.y,loc.z, Set.of(), loc.yaw, loc.pitch, false);
|
|
player.changeGameMode(GameMode.SURVIVAL);
|
|
}
|
|
}
|
|
|
|
@Inject(method = {"broadcast(Lnet/minecraft/network/message/SignedMessage;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/network/message/MessageType$Parameters;)V"}, at = {@At("HEAD")}, cancellable = true)
|
|
private void onBroadcast(SignedMessage message, ServerPlayerEntity sender, MessageType.Parameters parameters, CallbackInfo ci) {
|
|
if(sender != null && ConfigManager.getConfig().chatMessageEnabled) {
|
|
Text text = Text.literal(String.format(ConfigManager.getConfig().chatMessage, sender.getName().getString(), message.getContent().getString()));
|
|
Objects.requireNonNull(sender.getServer()).getPlayerManager().broadcast(text, false);
|
|
ci.cancel();
|
|
}
|
|
}
|
|
}
|