Skip to content

Commit 1b020f8

Browse files
ScribbleScribble
authored andcommitted
Fix #110, improvements on server side
-Added the ability to join the dedicated server when in tickrate 0 -Fixed commands not sending in the server interface when in tickrate 0 -Improved tickrate command a bit
1 parent af8681e commit 1b020f8

File tree

7 files changed

+51
-12
lines changed

7 files changed

+51
-12
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ apply plugin: 'org.spongepowered.mixin'
1919
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
2020

2121

22-
version = "Alpha6"
22+
version = "Alpha7-WIP"
2323
group = "de.scribble.lp.tastools" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
2424
archivesBaseName = "TASmod-1.12.2"
2525

src/main/java/de/scribble/lp/tasmod/events/PlayerJoinLeaveEvents.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public static void firePlayerJoinedServerSide(EntityPlayerMP player) {
2424
TASmod.logger.info("Firing login events for {} on the SERVER", player.getName());
2525
TickSyncServer.joinServer(player);
2626
TASmod.containerStateServer.joinServer(player);
27+
TickrateChangerServer.joinServer(player);
2728
}
2829

2930
/**
@@ -32,8 +33,7 @@ public static void firePlayerJoinedServerSide(EntityPlayerMP player) {
3233
* @param player The player that left the server
3334
*/
3435
public static void firePlayerLeaveServerSide(EntityPlayerMP player) {
35-
TASmod.logger.info("Firing logout events for {} on the SERVER", player.getName());
36-
TickrateChangerServer.leaveServer(player);
36+
// TASmod.logger.info("Firing logout events for {} on the SERVER", player.getName());
3737
}
3838

3939
/**

src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public abstract class MixinMinecraft {
3535
@Shadow
3636
private GuiScreen currentScreen;
3737

38+
// private int faketick=0;
39+
3840
@Inject(method = "runGameLoop", at = @At(value = "HEAD"))
3941
public void injectRunGameLoop(CallbackInfo ci) {
4042
// TASmod
@@ -44,6 +46,15 @@ public void injectRunGameLoop(CallbackInfo ci) {
4446
if(((Minecraft) (Object) this).player!=null) {
4547
ClientProxy.hud.tick();
4648
}
49+
50+
//Fake tickrate loop when you are in tickrate 0
51+
// if(TickrateChangerClient.TICKS_PER_SECOND==0) {
52+
// faketick++;
53+
// if(faketick>=Minecraft.getDebugFPS()/3) { //Not yet used but maybe in the future
54+
// faketick=0;
55+
// }
56+
// }
57+
4758
while (Keyboard.next()) {
4859
ClientProxy.virtual.updateNextKeyboard(Keyboard.getEventKey(), Keyboard.getEventKeyState(), Keyboard.getEventCharacter());
4960
}

src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraftServer.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
import de.scribble.lp.tasmod.tickratechanger.TickrateChangerServer;
1818
import de.scribble.lp.tasmod.ticksync.TickSyncPackage;
1919
import de.scribble.lp.tasmod.ticksync.TickSyncServer;
20+
import net.minecraft.network.NetworkSystem;
2021
import net.minecraft.server.MinecraftServer;
22+
import net.minecraftforge.fml.relauncher.Side;
23+
import net.minecraftforge.fml.relauncher.SideOnly;
2124

2225
@Mixin(MinecraftServer.class)
2326
public abstract class MixinMinecraftServer {
@@ -74,6 +77,11 @@ public long redirectMathMax(long oneLong, long i) {
7477

7578
@Shadow
7679
private Queue<FutureTask<?>> futureTaskQueue;
80+
81+
@Shadow
82+
private NetworkSystem networkSystem;
83+
84+
private int faketick=0;
7785

7886
@Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/lang/Thread;sleep(J)V"))
7987
public void redirectThreadSleep(long msToTick) {
@@ -87,6 +95,12 @@ public void redirectThreadSleep(long msToTick) {
8795
for (long o = 0; o < msToTick; o++) {
8896
if(TickrateChangerServer.TICKS_PER_SECOND==0) {
8997
currentTime=System.currentTimeMillis();
98+
faketick++;
99+
if(faketick>=20) {
100+
faketick=0;
101+
networkSystem.networkTick();
102+
runPendingCommands();
103+
}
90104
}
91105
if (TickrateChangerServer.INTERRUPT) {
92106
currentTime = System.currentTimeMillis();
@@ -102,6 +116,7 @@ public void redirectThreadSleep(long msToTick) {
102116
}
103117
}
104118
}
119+
105120
try {
106121
Thread.sleep(1L);
107122
} catch (InterruptedException e) {
@@ -111,6 +126,14 @@ public void redirectThreadSleep(long msToTick) {
111126
}
112127
}
113128

129+
@SideOnly(Side.SERVER)
130+
private void runPendingCommands() {
131+
if((MinecraftServer)(Object)this instanceof net.minecraft.server.dedicated.DedicatedServer) {
132+
net.minecraft.server.dedicated.DedicatedServer server=(net.minecraft.server.dedicated.DedicatedServer)(MinecraftServer)(Object)this;
133+
server.executePendingCommands();
134+
}
135+
}
136+
114137
// =====================================================================================================================================
115138

116139
// @Inject(method = "tick", at = @At("HEAD"))

src/main/java/de/scribble/lp/tasmod/tickratechanger/CommandTickrate.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.command.CommandException;
99
import net.minecraft.command.ICommandSender;
1010
import net.minecraft.server.MinecraftServer;
11+
import net.minecraft.util.text.TextComponentString;
1112

1213
public class CommandTickrate extends CommandBase{
1314
@Override
@@ -27,6 +28,10 @@ public String getUsage(ICommandSender sender) {
2728

2829
@Override
2930
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
31+
if(args.length==0) {
32+
sender.sendMessage(new TextComponentString("Current tickrate: "+ TickrateChangerServer.TICKS_PER_SECOND));
33+
return;
34+
}
3035
float tickrate= Float.parseFloat(args[0]);
3136
TickrateChangerServer.changeServerTickrate(tickrate);
3237
TickrateChangerServer.changeClientTickrate(tickrate);

src/main/java/de/scribble/lp/tasmod/tickratechanger/TickrateChangerClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,20 @@ public static void pauseUnpauseGame() {
3535
pauseUnpauseClient();
3636
}
3737
}
38+
3839
public static void advanceTick() {
3940
if(Minecraft.getMinecraft().world!=null) {
4041
advanceServerTick();
4142
}else {
4243
advanceClientTick();
4344
}
4445
}
46+
4547
/**
4648
* Bypasses the tick system
4749
*/
4850
public static void bypass() {
51+
//Stopping any playback or recording if you are in tickrate 0 and the GuiControls
4952
if(Minecraft.getMinecraft().currentScreen instanceof GuiControls) {
5053
if(TICKS_PER_SECOND==0&&WASZERO==false) {
5154
changeClientTickrate(20);
@@ -58,6 +61,7 @@ public static void bypass() {
5861
changeClientTickrate(0);
5962
WASZERO=false;
6063
}
64+
6165
}
6266

6367
public static void advanceClientTick() {

src/main/java/de/scribble/lp/tasmod/tickratechanger/TickrateChangerServer.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import de.scribble.lp.tasmod.CommonProxy;
44
import de.scribble.lp.tasmod.TASmod;
55
import net.minecraft.entity.player.EntityPlayerMP;
6-
import net.minecraft.server.MinecraftServer;
76

87
public class TickrateChangerServer {
98
public static float TICKS_PER_SECOND=20F;
@@ -50,16 +49,13 @@ public static void advanceTick() {
5049
}
5150

5251
/**
53-
* Fired when a player left the server
52+
* Fired when a player joined the server
5453
* @param player
5554
*/
56-
public static void leaveServer(EntityPlayerMP player) {
57-
//TODO Test this in multiplayer
58-
if(TASmod.getServerInstance().getPlayerList().getCurrentPlayerCount()==1) {
59-
if (TickrateChangerServer.TICKS_PER_SECOND == 0 || ADVANCE_TICK) {
60-
TASmod.logger.info("Changing tickrate to 20 since the last player left the server");
61-
TickrateChangerServer.changeServerTickrate(20F);
62-
}
55+
public static void joinServer(EntityPlayerMP player) {
56+
if(TASmod.getServerInstance().isDedicatedServer()) {
57+
TASmod.logger.info("Sending the current tickrate ({}) to {}", TICKS_PER_SECOND, player.getName());
58+
CommonProxy.NETWORK.sendTo(new TickratePacket(false, TICKS_PER_SECOND, false), player);
6359
}
6460
}
6561
}

0 commit comments

Comments
 (0)