Compare commits
2 Commits
8ac3484c54
...
1.1.0
Author | SHA1 | Date | |
---|---|---|---|
4894b7d389 | |||
0ee3031742 |
@ -9,7 +9,7 @@ yarn_mappings=1.21.4+build.8
|
||||
loader_version=0.16.10
|
||||
|
||||
# Mod Properties
|
||||
mod_version=1.0.0
|
||||
mod_version=1.1.0
|
||||
maven_group=wtf.hak.survivalfabric
|
||||
archives_base_name=survivalfabric
|
||||
|
||||
|
@ -3,11 +3,14 @@ package wtf.hak.survivalfabric;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
|
||||
import net.minecraft.scoreboard.Team;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import wtf.hak.survivalfabric.commands.SpectatorCommand;
|
||||
|
||||
public class SurvivalFabric implements ModInitializer {
|
||||
|
||||
public static final String MOD_ID = "survivalfabric";
|
||||
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
||||
@ -15,5 +18,6 @@ public class SurvivalFabric implements ModInitializer {
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> SpectatorCommand.register(dispatcher, new String[] { "spectator", "s", "S", "camera", "c", "C", }));
|
||||
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.world.GameMode;
|
||||
import wtf.hak.survivalfabric.utils.DimensionTeams;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -35,6 +36,7 @@ public class SpectatorCommand {
|
||||
player.teleport(data.world, data.x, data.y, data.z, Set.of(), data.yaw, data.pitch, false);
|
||||
player.changeGameMode(GameMode.SURVIVAL);
|
||||
spectating.remove(player);
|
||||
DimensionTeams.assignCorrectTeam(player, data.world.getRegistryKey().getValue().toTranslationKey());
|
||||
} else {
|
||||
|
||||
spectating.put(player, new LocationData(player
|
||||
@ -45,6 +47,7 @@ public class SpectatorCommand {
|
||||
.getPitch(), player
|
||||
.getServerWorld()));
|
||||
player.changeGameMode(GameMode.SPECTATOR);
|
||||
DimensionTeams.assignCorrectTeam(player, "");
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ 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.network.packet.s2c.play.PlayerListS2CPacket;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.PlayerManager;
|
||||
import net.minecraft.server.network.ConnectedClientData;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
@ -16,6 +18,7 @@ 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.utils.DimensionTeams;
|
||||
import wtf.hak.survivalfabric.utils.Messages;
|
||||
|
||||
import java.util.Set;
|
||||
@ -29,6 +32,11 @@ public abstract class PlayerManagerMixin {
|
||||
player.sendMessage(text, false);
|
||||
}
|
||||
|
||||
@Inject(method = {"onPlayerConnect"}, at = {@At(value = "HEAD")})
|
||||
public void onPlayerConnectHead(ClientConnection connection, ServerPlayerEntity player, ConnectedClientData clientData, CallbackInfo ci) {
|
||||
DimensionTeams.assignCorrectTeam(player, player.getServerWorld().getRegistryKey().getValue().toTranslationKey());
|
||||
}
|
||||
|
||||
@ModifyArg(method = {"onPlayerConnect"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Z)V"))
|
||||
private Text onPlayerConnect(Text text) {
|
||||
String name = text.getString().split(" ")[0];
|
||||
|
@ -0,0 +1,26 @@
|
||||
package wtf.hak.survivalfabric.mixin;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.Text;
|
||||
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.callback.CallbackInfo;
|
||||
import wtf.hak.survivalfabric.utils.DimensionTeams;
|
||||
import wtf.hak.survivalfabric.utils.Messages;
|
||||
|
||||
@Mixin(ServerWorld.class)
|
||||
public class ServerWorldMixin {
|
||||
|
||||
@Inject(method = "onDimensionChanged", at = {@At("HEAD")})
|
||||
public void onDimensionChange(Entity entity, CallbackInfo ci) {
|
||||
if(entity instanceof ServerPlayerEntity) {
|
||||
ServerPlayerEntity player = (ServerPlayerEntity)entity;
|
||||
String dimension = Messages.getDimensionFormatted(player.getServerWorld().getRegistryKey().getValue().toTranslationKey());
|
||||
player.sendMessage(Text.literal(dimension), false);
|
||||
DimensionTeams.assignCorrectTeam(player, player.getServerWorld().getRegistryKey().getValue().toTranslationKey());
|
||||
}
|
||||
}
|
||||
}
|
108
src/main/java/wtf/hak/survivalfabric/utils/DimensionTeams.java
Normal file
108
src/main/java/wtf/hak/survivalfabric/utils/DimensionTeams.java
Normal file
@ -0,0 +1,108 @@
|
||||
package wtf.hak.survivalfabric.utils;
|
||||
|
||||
import net.minecraft.scoreboard.ServerScoreboard;
|
||||
import net.minecraft.scoreboard.Team;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import wtf.hak.survivalfabric.commands.SpectatorCommand;
|
||||
|
||||
public class DimensionTeams {
|
||||
|
||||
public static DimensionTeams INSTANCE;
|
||||
|
||||
public Team overworldTeam;
|
||||
public Team netherTeam;
|
||||
public Team endTeam;
|
||||
public Team spectatorTeam;
|
||||
public Team unknownTeam;
|
||||
|
||||
public DimensionTeams(ServerPlayerEntity player) {
|
||||
ServerScoreboard scoreboard = player.getServer().getScoreboard();
|
||||
for(Team team : scoreboard.getTeams()) {
|
||||
if(team.getName().equals("survivalfabric_overworld")) {
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("found old"), false);
|
||||
overworldTeam = team;
|
||||
} else if(team.getName().equals("survivalfabric_nether")) {
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("found old"), false);
|
||||
netherTeam = team;
|
||||
} else if(team.getName().equals("survivalfabric_end")) {
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("found old"), false);
|
||||
endTeam = team;
|
||||
} else if(team.getName().equals("survivalfabric_spectator")) {
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("found old"), false);
|
||||
spectatorTeam = team;
|
||||
} else if(team.getName().equals("survivalfabric_unknown")) {
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("found old"), false);
|
||||
unknownTeam = team;
|
||||
}
|
||||
}
|
||||
if(overworldTeam == null) {
|
||||
overworldTeam = scoreboard.addTeam("survivalfabric_overworld");
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("added new"), false);
|
||||
} else if (netherTeam == null) {
|
||||
netherTeam = scoreboard.addTeam("survivalfabric_nether");
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("added new"), false);
|
||||
|
||||
} else if (endTeam == null) {
|
||||
endTeam = scoreboard.addTeam("survivalfabric_end");
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("added new"), false);
|
||||
|
||||
} else if (spectatorTeam == null) {
|
||||
spectatorTeam = scoreboard.addTeam("survivalfabric_spectator");
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("added new"), false);
|
||||
|
||||
} else if (unknownTeam == null) {
|
||||
unknownTeam = scoreboard.addTeam("survivalfabric_unknown");
|
||||
player.getServer().getPlayerManager().broadcast(Text.literal("added new"), false);
|
||||
|
||||
}
|
||||
|
||||
overworldTeam.setPrefix(Text.literal(Messages.OVERWORLD_PREFIX));
|
||||
overworldTeam.setColor(Formatting.GRAY);
|
||||
netherTeam.setPrefix(Text.literal(Messages.NETHER_PREFIX));
|
||||
netherTeam.setColor(Formatting.GRAY);
|
||||
endTeam.setPrefix(Text.literal(Messages.END_PREFIX));
|
||||
endTeam.setColor(Formatting.GRAY);
|
||||
spectatorTeam.setPrefix(Text.literal(Messages.SPECTATOR_PREFIX));
|
||||
spectatorTeam.setColor(Formatting.GRAY);
|
||||
unknownTeam.setPrefix(Text.literal(Messages.UNKNOWN_PREFIX));
|
||||
unknownTeam.setColor(Formatting.GRAY);
|
||||
}
|
||||
|
||||
public static Team assignCorrectTeam(ServerPlayerEntity player, String translationKey) {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new DimensionTeams(player);
|
||||
}
|
||||
|
||||
ServerScoreboard scoreboard = player.getServer().getScoreboard();
|
||||
String name = player.getNameForScoreboard();
|
||||
|
||||
for(Team team : player.getServer().getScoreboard().getTeams()) {
|
||||
if(team.getName().startsWith("survivalfabric")) {
|
||||
if(team.getPlayerList().contains(name))
|
||||
scoreboard.removeScoreHolderFromTeam(name, team);
|
||||
}
|
||||
}
|
||||
|
||||
if(!SpectatorCommand.spectating.containsKey(player)) {
|
||||
switch (translationKey) {
|
||||
case "minecraft.overworld":
|
||||
scoreboard.addScoreHolderToTeam(name, INSTANCE.overworldTeam);
|
||||
return INSTANCE.overworldTeam;
|
||||
case "minecraft.the_nether":
|
||||
scoreboard.addScoreHolderToTeam(name, INSTANCE.netherTeam);
|
||||
return INSTANCE.netherTeam;
|
||||
case "minecraft.the_end":
|
||||
scoreboard.addScoreHolderToTeam(name, INSTANCE.endTeam);
|
||||
return INSTANCE.endTeam;
|
||||
default:
|
||||
scoreboard.addScoreHolderToTeam(name, INSTANCE.unknownTeam);
|
||||
return INSTANCE.unknownTeam;
|
||||
}
|
||||
} else {
|
||||
scoreboard.addScoreHolderToTeam(name, INSTANCE.spectatorTeam);
|
||||
return INSTANCE.spectatorTeam;
|
||||
}
|
||||
}
|
||||
}
|
@ -6,4 +6,23 @@ public class Messages {
|
||||
public static final String QUIT_MESSAGE = "§8[§c-§8] §7%s";
|
||||
|
||||
public static final String CHAT_FORMAT = "§7%s§8:§f %s";
|
||||
|
||||
public static final String OVERWORLD_PREFIX = "§8[§aOverworld§8] ";
|
||||
public static final String NETHER_PREFIX = "§8[§cNether§8] ";
|
||||
public static final String END_PREFIX = "§8[§dEnd§8] ";
|
||||
public static final String SPECTATOR_PREFIX = "§8[§eSpectator§8] ";
|
||||
public static final String UNKNOWN_PREFIX = "§8[§7Unknown§8] ";
|
||||
|
||||
public static String getDimensionFormatted(String translationKey) {
|
||||
switch(translationKey) {
|
||||
case "minecraft.overworld":
|
||||
return "Overworld";
|
||||
case "minecraft.the_nether":
|
||||
return "Nether";
|
||||
case "minecraft.the_end":
|
||||
return "End";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
}
|
@ -3,13 +3,13 @@
|
||||
"id": "survivalfabric",
|
||||
"version": "${version}",
|
||||
"name": "SurvivalFabric",
|
||||
"description": "This is an example description! Tell everyone what your mod is about!",
|
||||
"description": "Adds a few QOL features to your Survival!",
|
||||
"authors": [
|
||||
"Me!"
|
||||
"AlwaysHAK"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://fabricmc.net/",
|
||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
||||
"homepage": "https://hak.wtf",
|
||||
"sources": "https://git.hak.wtf/hkuijlman/SurvivalFabric"
|
||||
},
|
||||
"license": "CC0-1.0",
|
||||
"icon": "assets/survivalfabric/icon.png",
|
||||
@ -32,6 +32,6 @@
|
||||
"fabric-api": "*"
|
||||
},
|
||||
"suggests": {
|
||||
"another-mod": "*"
|
||||
|
||||
}
|
||||
}
|
@ -4,7 +4,8 @@
|
||||
"compatibilityLevel": "JAVA_21",
|
||||
"mixins": [
|
||||
"PlayerManagerMixin",
|
||||
"ServerPlayNetworkHandlerMixin"
|
||||
"ServerPlayNetworkHandlerMixin",
|
||||
"ServerWorldMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
Reference in New Issue
Block a user