From 34a632269985c1cd4863450623f779d23b2e02a2 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 24 Jun 2018 13:33:16 +0300 Subject: [PATCH] TimeUpdate --- core/src/main/java/mc/core/GameLoop.java | 6 +++-- .../mc/core/network/BroadcastNetChannel.java | 4 +-- .../main/java/mc/core/network/NetChannel.java | 2 +- .../mc/core/time/AbstractTimeProcessor.java | 14 ++++++++++ core/src/main/java/mc/core/time/IdleTime.java | 2 +- core/src/main/java/mc/core/time/RealTime.java | 2 +- .../main/java/mc/core/time/TimePerTick.java | 2 +- .../main/java/mc/core/time/TimeProcessor.java | 1 + .../mc/core/network/proto_1_12_2/State.java | 1 + .../packets/TimeUpdatePacket.java | 27 +++++++++++++++++++ .../netty/wrappers/WrapperNetChannel.java | 5 ++-- 11 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 core/src/main/java/mc/core/time/AbstractTimeProcessor.java create mode 100644 proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/TimeUpdatePacket.java diff --git a/core/src/main/java/mc/core/GameLoop.java b/core/src/main/java/mc/core/GameLoop.java index 2946302..d028e8a 100644 --- a/core/src/main/java/mc/core/GameLoop.java +++ b/core/src/main/java/mc/core/GameLoop.java @@ -47,8 +47,10 @@ public class GameLoop extends Thread { /* --- --- --- */ - long gameTime = gameTimer.getGameTime(); - playerManager.getBroadcastChannel().sendTimeUpdate(gameTime); + playerManager.getBroadcastChannel().sendTimeUpdate( + gameTimer.getGameTime(), + gameTimer.getWorldAge() + ); /* --- --- --- */ diff --git a/core/src/main/java/mc/core/network/BroadcastNetChannel.java b/core/src/main/java/mc/core/network/BroadcastNetChannel.java index 902d8cd..0b2732f 100644 --- a/core/src/main/java/mc/core/network/BroadcastNetChannel.java +++ b/core/src/main/java/mc/core/network/BroadcastNetChannel.java @@ -20,8 +20,8 @@ public class BroadcastNetChannel implements NetChannel { } @Override - public void sendTimeUpdate(final long value) { - playerStream.forEach(player -> player.getChannel().sendTimeUpdate(value)); + public void sendTimeUpdate(final long time, final long age) { + playerStream.forEach(player -> player.getChannel().sendTimeUpdate(time, age)); } @Override diff --git a/core/src/main/java/mc/core/network/NetChannel.java b/core/src/main/java/mc/core/network/NetChannel.java index 76b7078..ebcbdbd 100644 --- a/core/src/main/java/mc/core/network/NetChannel.java +++ b/core/src/main/java/mc/core/network/NetChannel.java @@ -8,7 +8,7 @@ import mc.core.text.Text; public interface NetChannel { void sendKeepAlive(); - void sendTimeUpdate(long value); + void sendTimeUpdate(long time, long age); void sendChatMessage(Text text); void writeAndFlush(SCPacket pkt); diff --git a/core/src/main/java/mc/core/time/AbstractTimeProcessor.java b/core/src/main/java/mc/core/time/AbstractTimeProcessor.java new file mode 100644 index 0000000..cff6079 --- /dev/null +++ b/core/src/main/java/mc/core/time/AbstractTimeProcessor.java @@ -0,0 +1,14 @@ +/* + * DmitriyMX + * 2018-06-24 + */ +package mc.core.time; + +public abstract class AbstractTimeProcessor implements TimeProcessor { + private long worldAge = 0; + + @Override + public long getWorldAge() { + return worldAge++; + } +} diff --git a/core/src/main/java/mc/core/time/IdleTime.java b/core/src/main/java/mc/core/time/IdleTime.java index 8926486..b4be15d 100644 --- a/core/src/main/java/mc/core/time/IdleTime.java +++ b/core/src/main/java/mc/core/time/IdleTime.java @@ -8,7 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor -public class IdleTime implements TimeProcessor { +public class IdleTime extends AbstractTimeProcessor { @Getter private final long gameTime; } diff --git a/core/src/main/java/mc/core/time/RealTime.java b/core/src/main/java/mc/core/time/RealTime.java index ffad2b3..5b5158f 100644 --- a/core/src/main/java/mc/core/time/RealTime.java +++ b/core/src/main/java/mc/core/time/RealTime.java @@ -6,7 +6,7 @@ package mc.core.time; import java.util.Calendar; -public class RealTime implements TimeProcessor { +public class RealTime extends AbstractTimeProcessor { private static final long DIFF = 21600L; private static final long HOUR24 = 86400L; private final Calendar calendar = Calendar.getInstance(); diff --git a/core/src/main/java/mc/core/time/TimePerTick.java b/core/src/main/java/mc/core/time/TimePerTick.java index 25e3615..02dc756 100644 --- a/core/src/main/java/mc/core/time/TimePerTick.java +++ b/core/src/main/java/mc/core/time/TimePerTick.java @@ -4,7 +4,7 @@ */ package mc.core.time; -public class TimePerTick implements TimeProcessor { +public class TimePerTick extends AbstractTimeProcessor { private long gameTime; public void setStartGameTime(long value) { diff --git a/core/src/main/java/mc/core/time/TimeProcessor.java b/core/src/main/java/mc/core/time/TimeProcessor.java index 05e96cd..93f5547 100644 --- a/core/src/main/java/mc/core/time/TimeProcessor.java +++ b/core/src/main/java/mc/core/time/TimeProcessor.java @@ -6,4 +6,5 @@ package mc.core.time; public interface TimeProcessor { long getGameTime(); + long getWorldAge(); } diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/State.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/State.java index 1645ac9..f0e3b48 100644 --- a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/State.java +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/State.java @@ -60,6 +60,7 @@ public enum State { .put(KeepAlivePacket.class, 0x1F) .put(JoinGamePacket.class, 0x23) .put(SpawnPositionPacket.class, 0x46) + .put(TimeUpdatePacket.class, 0x47) .put(PlayerAbilitiesPacket.class, 0x2C) .put(PlayerPositionAndLookPacket.class, 0x2F) .build() diff --git a/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/TimeUpdatePacket.java b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/TimeUpdatePacket.java new file mode 100644 index 0000000..1a95d8c --- /dev/null +++ b/proto_1.12.2/src/main/java/mc/core/network/proto_1_12_2/packets/TimeUpdatePacket.java @@ -0,0 +1,27 @@ +/* + * DmitriyMX + * 2018-06-24 + */ +package mc.core.network.proto_1_12_2.packets; + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import mc.core.network.NetStream; +import mc.core.network.SCPacket; + +@AllArgsConstructor +@NoArgsConstructor +@Setter +@ToString +public class TimeUpdatePacket implements SCPacket { + private long time; + private long worldage; + + @Override + public void writeSelf(NetStream netStream) { + netStream.writeLong(worldage); + netStream.writeLong(time); + } +} diff --git a/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/wrappers/WrapperNetChannel.java b/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/wrappers/WrapperNetChannel.java index 7838455..246f376 100644 --- a/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/wrappers/WrapperNetChannel.java +++ b/proto_1.12.2_netty/src/main/java/mc/core/network/proto_1_12_2/netty/wrappers/WrapperNetChannel.java @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import mc.core.network.NetChannel; import mc.core.network.SCPacket; import mc.core.network.proto_1_12_2.packets.KeepAlivePacket; +import mc.core.network.proto_1_12_2.packets.TimeUpdatePacket; import mc.core.text.Text; import java.util.Random; @@ -24,8 +25,8 @@ public class WrapperNetChannel implements NetChannel { } @Override - public void sendTimeUpdate(long value) { - + public void sendTimeUpdate(long time, long age) { + writeAndFlush(new TimeUpdatePacket(time, age)); } @Override