PlayerData persistent state + added new stats
This commit is contained in:
parent
7536863a00
commit
cc09ee124b
|
@ -1,11 +1,13 @@
|
|||
package com.youpe.test;
|
||||
|
||||
import com.youpe.test.event.DirtBrokenAfter;
|
||||
import com.youpe.test.event.JoinServerHandler;
|
||||
import com.youpe.test.item.ModItems;
|
||||
import com.youpe.test.networking.ModNetworkingManager;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
|
@ -24,14 +26,14 @@ public class Testing implements ModInitializer {
|
|||
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
||||
|
||||
|
||||
public static final Identifier DIRT_BROKEN = new Identifier("testing", "dirt_broken");
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
LOGGER.info("Hello Fabric world!");
|
||||
ModItems.registerModItems();
|
||||
ModNetworkingManager.registerC2SPackets();
|
||||
PlayerBlockBreakEvents.AFTER.register(new DirtBrokenAfter());
|
||||
ModNetworkingManager.registerC2SPackets();
|
||||
|
||||
ModItems.registerModItems();
|
||||
|
||||
PlayerBlockBreakEvents.AFTER.register(new DirtBrokenAfter());
|
||||
ServerPlayConnectionEvents.JOIN.register(new JoinServerHandler());
|
||||
}
|
||||
}
|
|
@ -4,18 +4,24 @@ import com.youpe.test.event.KeyInputHandler;
|
|||
|
||||
import com.youpe.test.event.TestHudRender;
|
||||
import com.youpe.test.networking.ModNetworkingManager;
|
||||
import com.youpe.test.server.PlayerData;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
public class TestingClient implements ClientModInitializer{
|
||||
|
||||
public static PlayerData playerData = new PlayerData();
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
|
||||
ModNetworkingManager.registerS2CPackets();
|
||||
|
||||
KeyInputHandler.registerKeyInputs();
|
||||
|
||||
TestHudRender.registerModRenders();
|
||||
ModNetworkingManager.registerS2CPackets();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package com.youpe.test.event;
|
||||
|
||||
|
||||
import com.youpe.test.networking.ModNetworkingManager;
|
||||
import com.youpe.test.server.PlayerData;
|
||||
import com.youpe.test.server.StateSaverAndLoader;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||
|
||||
public class JoinServerHandler implements ServerPlayConnectionEvents.Join {
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayReady(ServerPlayNetworkHandler handler, PacketSender sender, MinecraftServer server) {
|
||||
PlayerData playerState = StateSaverAndLoader.getPlayerState(handler.getPlayer());
|
||||
PacketByteBuf data = PacketByteBufs.create();
|
||||
data.writeInt(playerState.dirtBlocksBroken);
|
||||
data.writeInt(playerState.level);
|
||||
data.writeFloat(playerState.exp);
|
||||
data.writeFloat(playerState.strength);
|
||||
data.writeFloat(playerState.dexterity);
|
||||
data.writeFloat(playerState.intelligence);
|
||||
data.writeString(playerState.className);
|
||||
server.execute(() -> {
|
||||
ServerPlayNetworking.send(handler.getPlayer(), ModNetworkingManager.INIT_SYNC, data);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -3,17 +3,20 @@ package com.youpe.test.networking;
|
|||
import com.youpe.test.Testing;
|
||||
|
||||
import com.youpe.test.networking.packet.DirtBrokenS2CPacket;
|
||||
import com.youpe.test.networking.packet.InitSyncS2CPacket;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class ModNetworkingManager {
|
||||
public static final Identifier DIRT_BROKEN = new Identifier(Testing.MOD_ID, "msg_dirt_broken");
|
||||
public static final Identifier INIT_SYNC = new Identifier(Testing.MOD_ID, "msg_init_sync");
|
||||
|
||||
public static void registerC2SPackets(){
|
||||
|
||||
}
|
||||
public static void registerS2CPackets(){
|
||||
ClientPlayNetworking.registerGlobalReceiver(DIRT_BROKEN, DirtBrokenS2CPacket::receive);
|
||||
ClientPlayNetworking.registerGlobalReceiver(INIT_SYNC, InitSyncS2CPacket::receive);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,8 +11,10 @@ public class DirtBrokenS2CPacket {
|
|||
public static void receive(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
|
||||
int totalDirtBlocksBroken = buf.readInt();
|
||||
int playerSpecificDirtBlocksBroken = buf.readInt();
|
||||
client.player.sendMessage(Text.literal("Total dirt blocks broken: " + totalDirtBlocksBroken));
|
||||
client.player.sendMessage(Text.literal("Player specific dirt blocks broken: " + playerSpecificDirtBlocksBroken));
|
||||
client.execute(() -> {
|
||||
client.player.sendMessage(Text.literal("Total dirt blocks broken: " + totalDirtBlocksBroken));
|
||||
client.player.sendMessage(Text.literal("Player specific dirt blocks broken: " + playerSpecificDirtBlocksBroken));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package com.youpe.test.networking.packet;
|
||||
|
||||
import com.youpe.test.TestingClient;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
public class InitSyncS2CPacket {
|
||||
public static void receive(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) {
|
||||
|
||||
TestingClient.playerData.dirtBlocksBroken = buf.readInt();
|
||||
TestingClient.playerData.level = buf.readInt();
|
||||
TestingClient.playerData.exp = buf.readFloat();
|
||||
TestingClient.playerData.strength = buf.readFloat();
|
||||
TestingClient.playerData.dexterity = buf.readFloat();
|
||||
TestingClient.playerData.intelligence = buf.readFloat();
|
||||
TestingClient.playerData.className = buf.readString();
|
||||
|
||||
client.execute(() -> {
|
||||
client.player.sendMessage(Text.literal("Your broken dirt on this server: " + TestingClient.playerData.dirtBlocksBroken), false);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -3,4 +3,12 @@ package com.youpe.test.server;
|
|||
public class PlayerData {
|
||||
|
||||
public int dirtBlocksBroken = 0;
|
||||
public int level = 0;
|
||||
public float exp = 0;
|
||||
public String className = "base";
|
||||
public float strength = 1;
|
||||
public float dexterity = 1;
|
||||
public float intelligence = 1;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,12 +21,49 @@ public class StateSaverAndLoader extends PersistentState {
|
|||
public NbtCompound writeNbt(NbtCompound nbt) {
|
||||
nbt.putInt("totalDirtBlocksBroken", totalDirtBlocksBroken);
|
||||
|
||||
NbtCompound playersNbt = new NbtCompound();
|
||||
|
||||
players.forEach((uuid, playerData) -> {
|
||||
NbtCompound playerNbt = new NbtCompound();
|
||||
|
||||
// Player stats
|
||||
playerNbt.putInt("dirtBlocksBroken", playerData.dirtBlocksBroken);
|
||||
playerNbt.putInt("level", playerData.level);
|
||||
playerNbt.putFloat("exp", playerData.exp);
|
||||
playerNbt.putFloat("strength", playerData.strength);
|
||||
playerNbt.putFloat("dexterity", playerData.dexterity);
|
||||
playerNbt.putFloat("intelligence", playerData.intelligence);
|
||||
playerNbt.putString("className", playerData.className);
|
||||
|
||||
|
||||
playersNbt.put(uuid.toString(), playerNbt);
|
||||
});
|
||||
nbt.put("players", playersNbt);
|
||||
|
||||
return nbt;
|
||||
}
|
||||
|
||||
public static StateSaverAndLoader createFromNbt(NbtCompound tag) {
|
||||
StateSaverAndLoader state = new StateSaverAndLoader();
|
||||
state.totalDirtBlocksBroken = tag.getInt("totalDirtBlocksBroken");
|
||||
|
||||
NbtCompound playersNbt = tag.getCompound("players");
|
||||
playersNbt.getKeys().forEach((key) -> {
|
||||
PlayerData playerData = new PlayerData();
|
||||
|
||||
playerData.dirtBlocksBroken = playersNbt.getCompound(key).getInt("dirtBlocksBroken");
|
||||
playerData.level = playersNbt.getCompound(key).getInt("level");
|
||||
playerData.exp = playersNbt.getCompound(key).getFloat("exp");
|
||||
playerData.strength = playersNbt.getCompound(key).getFloat("strength");
|
||||
playerData.dexterity = playersNbt.getCompound(key).getFloat("dexterity");
|
||||
playerData.intelligence = playersNbt.getCompound(key).getFloat("intelligence");
|
||||
playerData.className = playersNbt.getCompound(key).getString("className");
|
||||
|
||||
|
||||
UUID uuid = UUID.fromString(key);
|
||||
state.players.put(uuid, playerData);
|
||||
});
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue