Skip to content

Commit

Permalink
feat: anim for taking off suit
Browse files Browse the repository at this point in the history
chore: DeltaTimeManager
chore: ServerLifecycleHooks
todo: player anim
  • Loading branch information
Duzos committed Aug 26, 2024
1 parent 3907a7b commit 3739511
Show file tree
Hide file tree
Showing 9 changed files with 1,361 additions and 15 deletions.
2 changes: 2 additions & 0 deletions src/main/java/mc/duzo/timeless/Timeless.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

import mc.duzo.timeless.network.Network;
import mc.duzo.timeless.registry.Register;
import mc.duzo.timeless.util.ServerLifecycleHooks;

public class Timeless implements ModInitializer {
public static final String MOD_ID = "timeless";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

@Override
public void onInitialize() {
ServerLifecycleHooks.init();
Register.init();
Network.init();
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/mc/duzo/timeless/client/TimelessClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import net.fabricmc.api.ClientModInitializer;

import mc.duzo.timeless.client.keybind.TimelessKeybinds;
import mc.duzo.timeless.client.network.ClientNetwork;
import mc.duzo.timeless.suit.client.ClientSuitRegistry;

public class TimelessClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
ClientNetwork.init();
ClientSuitRegistry.init();

TimelessKeybinds.init();
}
}
15 changes: 15 additions & 0 deletions src/main/java/mc/duzo/timeless/client/network/ClientNetwork.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package mc.duzo.timeless.client.network;

import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;

import mc.duzo.timeless.network.s2c.MarkFiveAnimationS2CPacket;

public class ClientNetwork {
static {
ClientPlayNetworking.registerGlobalReceiver(MarkFiveAnimationS2CPacket.TYPE, MarkFiveAnimationS2CPacket::handle);
}

public static void init() {

}
}
40 changes: 40 additions & 0 deletions src/main/java/mc/duzo/timeless/network/Network.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
package mc.duzo.timeless.network;

import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import net.fabricmc.fabric.api.networking.v1.FabricPacket;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;

import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtOps;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;

import mc.duzo.timeless.Timeless;
import mc.duzo.timeless.network.c2s.UsePowerC2SPacket;

public class Network {
Expand All @@ -12,4 +24,32 @@ public class Network {
public static void init() {

}


// codec networking is Theo's from Adventures in Time
public static <T> void send(ServerPlayerEntity player, PacketByteBuf buf, Identifier id, Codec<T> codec, T t) {
DataResult<NbtElement> result = codec.encodeStart(NbtOps.INSTANCE, t);
NbtElement nbt = result.resultOrPartial(Timeless.LOGGER::error).orElseThrow();

buf.writeNbt((NbtCompound) nbt);
send(player, id, buf);
}

public static void send(ServerPlayerEntity player, Identifier id, PacketByteBuf buf) {
if (player == null)
return;

ServerPlayNetworking.send(player, id, buf);
}

public static <T> T receive(Codec<T> codec, PacketByteBuf buf) {
return codec.decode(NbtOps.INSTANCE, buf.readNbt())
.resultOrPartial(Timeless.LOGGER::error)
.orElseThrow().getFirst();
}

public static void toTracking(FabricPacket packet, ServerPlayerEntity target) {
ServerPlayNetworking.send(target, packet);
PlayerLookup.tracking(target).forEach(p -> ServerPlayNetworking.send(p, packet));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package mc.duzo.timeless.network.s2c;

import java.util.UUID;

import net.fabricmc.fabric.api.networking.v1.FabricPacket;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.PacketType;

import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;

import mc.duzo.timeless.Timeless;
import mc.duzo.timeless.client.animation.player.PlayerAnimationTracker;
import mc.duzo.timeless.client.animation.player.TimelessPlayerAnimations;
import mc.duzo.timeless.client.animation.player.holder.PlayerAnimationHolder;
import mc.duzo.timeless.suit.client.animation.IronManAnimations;
import mc.duzo.timeless.suit.client.animation.SuitAnimationHolder;
import mc.duzo.timeless.suit.client.animation.SuitAnimationTracker;

public record MarkFiveAnimationS2CPacket(UUID player, boolean isPuttingOn) implements FabricPacket {
public static final PacketType<MarkFiveAnimationS2CPacket> TYPE = PacketType.create(new Identifier(Timeless.MOD_ID, "mark_five_animation"), MarkFiveAnimationS2CPacket::new);

public MarkFiveAnimationS2CPacket(PacketByteBuf buf) {
this(buf.readUuid(), buf.readBoolean());
}
@Override
public void write(PacketByteBuf buf) {
buf.writeUuid(player);
buf.writeBoolean(isPuttingOn);
}

@Override
public PacketType<?> getType() {
return TYPE;
}

public void handle(ClientPlayerEntity client, PacketSender sender) {
SuitAnimationHolder suit = (isPuttingOn) ? new SuitAnimationHolder(IronManAnimations.MK5_CASE_OPEN, true, false) : new SuitAnimationHolder(IronManAnimations.MK5_CASE_CLOSE, true, false);
SuitAnimationTracker.addAnimation(player, suit);

if (!isPuttingOn) return; // todo - close anim for player

PlayerAnimationHolder anim = new PlayerAnimationHolder(TimelessPlayerAnimations.MK5_CASE_OPEN);
PlayerAnimationTracker.addAnimation(player, anim);
}
}
Loading

0 comments on commit 3739511

Please sign in to comment.