Skip to content

Commit 9fe284d

Browse files
LasmGratelTakakura-Anri
authored andcommitted
Add command /gokistats gui [player], closes #40.
Solved death loss multiplier cast to int problem
1 parent 61dff3a commit 9fe284d

File tree

13 files changed

+132
-30
lines changed

13 files changed

+132
-30
lines changed

src/main/java/net/infstudio/goki/client/ClientProxy.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.infstudio.goki.client;
22

33
import net.infstudio.goki.common.CommonProxy;
4-
import net.infstudio.goki.common.handlers.GokiKeyHandler;
4+
import net.infstudio.goki.common.config.GokiConfig;
55
import net.minecraftforge.common.MinecraftForge;
66

77
public class ClientProxy extends CommonProxy {
@@ -13,6 +13,7 @@ public void registerKeybinding() {
1313
@Override
1414
public void registerHandlers() {
1515
super.registerHandlers();
16-
registerKeybinding();
16+
if (GokiConfig.keyBindingEnabled)
17+
registerKeybinding();
1718
}
1819
}

src/main/java/net/infstudio/goki/common/handlers/GokiKeyHandler.java renamed to src/main/java/net/infstudio/goki/client/GokiKeyHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.infstudio.goki.common.handlers;
1+
package net.infstudio.goki.client;
22

33
import net.infstudio.goki.GokiStats;
44
import net.minecraft.client.Minecraft;
@@ -42,4 +42,4 @@ public void keyDown(InputEvent.KeyInputEvent event) {
4242
(int) player.posZ);
4343
}
4444
}
45-
}
45+
}

src/main/java/net/infstudio/goki/client/gui/GuiStats.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.infstudio.goki.client.gui;
22

3-
import net.infstudio.goki.common.handlers.GokiKeyHandler;
3+
import net.infstudio.goki.common.config.GokiConfig;
4+
import net.infstudio.goki.client.GokiKeyHandler;
45
import net.infstudio.goki.common.network.GokiPacketHandler;
56
import net.infstudio.goki.common.network.message.C2SStatSync;
67
import net.infstudio.goki.common.stats.StatBase;
@@ -117,7 +118,7 @@ protected void keyTyped(char c, int keyCode) throws IOException {
117118
super.keyTyped(c, keyCode);
118119
// 1 is the Esc key, and we made our keybinding array public and static
119120
// so we can access it here
120-
if (c == 1 || keyCode == GokiKeyHandler.statsMenu.getKeyCode()) {
121+
if (c == 1 || (GokiConfig.keyBindingEnabled && keyCode == GokiKeyHandler.statsMenu.getKeyCode())) {
121122
mc.player.closeScreen();
122123
}
123124
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.infstudio.goki.client.network.handler;
2+
3+
import net.infstudio.goki.client.gui.GuiStats;
4+
import net.infstudio.goki.common.network.message.S2COpenGui;
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
7+
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
8+
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
9+
10+
public class PacketGuiClientHandler implements IMessageHandler<S2COpenGui, IMessage> {
11+
@Override
12+
public IMessage onMessage(S2COpenGui message, MessageContext ctx) {
13+
Minecraft.getMinecraft().addScheduledTask(() ->
14+
Minecraft.getMinecraft().displayGuiScreen(new GuiStats(Minecraft.getMinecraft().player)));
15+
return null;
16+
}
17+
}

src/main/java/net/infstudio/goki/common/network/handler/PacketSyncClientHandler.java renamed to src/main/java/net/infstudio/goki/client/network/handler/PacketSyncClientHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.infstudio.goki.common.network.handler;
1+
package net.infstudio.goki.client.network.handler;
22

33
import net.infstudio.goki.common.network.message.S2CStatSync;
44
import net.infstudio.goki.common.network.message.S2CSyncAll;
Lines changed: 66 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,94 @@
11
package net.infstudio.goki.common;
22

3+
import com.google.common.collect.Lists;
4+
import com.mojang.authlib.GameProfile;
35
import net.infstudio.goki.common.config.ConfigManager;
46
import net.infstudio.goki.common.config.Configurable;
7+
import net.infstudio.goki.common.network.GokiPacketHandler;
8+
import net.infstudio.goki.common.network.message.S2COpenGui;
59
import net.infstudio.goki.common.stats.StatBase;
6-
import net.minecraft.command.CommandBase;
7-
import net.minecraft.command.ICommandSender;
10+
import net.minecraft.command.*;
811
import net.minecraft.entity.player.EntityPlayer;
12+
import net.minecraft.entity.player.EntityPlayerMP;
913
import net.minecraft.server.MinecraftServer;
10-
import net.minecraft.util.text.TextComponentTranslation;
14+
import net.minecraft.util.math.BlockPos;
15+
import net.minecraft.util.text.TextComponentString;
1116

1217
import javax.annotation.Nonnull;
18+
import javax.annotation.Nullable;
19+
import java.util.Arrays;
20+
import java.util.Collections;
21+
import java.util.List;
1322

1423
public class StatsCommand extends CommandBase {
1524
@Nonnull
1625
@Override
1726
public String getName() {
18-
return "reloadGokiStats";
27+
return "gokistats";
1928
}
2029

2130
@Nonnull
2231
@Override
2332
public String getUsage(@Nonnull ICommandSender sender) {
24-
return "/gokistats reload";
33+
return "/gokistats";
2534
}
2635

2736
@Override
28-
public void execute(MinecraftServer server, ICommandSender icommandsender, String[] astring) {
29-
StatBase.stats.forEach(Configurable::reloadConfig);
30-
ConfigManager.INSTANCE.reloadConfig();
31-
EntityPlayer player;
32-
if ((icommandsender instanceof EntityPlayer)) {
33-
player = (EntityPlayer) icommandsender;
34-
player.sendMessage(new TextComponentTranslation("Reloaded gokistats configuration file."));
37+
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
38+
if (args.length < 1)
39+
throw new WrongUsageException("Invalid usage! Valid commands: /gokistats reload, /gokistats gui");
40+
41+
if (args[0].equals("reload")) {
42+
StatBase.stats.forEach(Configurable::reloadConfig);
43+
ConfigManager.INSTANCE.reloadConfig();
44+
EntityPlayer player;
45+
if ((sender instanceof EntityPlayer)) {
46+
player = (EntityPlayer) sender;
47+
player.sendMessage(new TextComponentString("Reloaded gokistats configuration file."));
48+
} else {
49+
server.logInfo("Reloaded gokistats configuration file.");
50+
}
51+
} else if (args[0].equals("gui")) {
52+
EntityPlayerMP player = null;
53+
if (args.length == 1) {
54+
if ((sender instanceof EntityPlayerMP)) {
55+
player = (EntityPlayerMP) sender;
56+
} else {
57+
throw new WrongUsageException("This command should be only used by player");
58+
}
59+
} else if (args.length == 2) player = server.getPlayerList().getPlayerByUsername(args[1]);
60+
if (player == null)
61+
throw new PlayerNotFoundException(args[1]);
62+
GokiPacketHandler.CHANNEL.sendTo(new S2COpenGui(0), player);
3563
} else {
36-
server.logInfo("Reloaded gokistats configuration file.");
64+
throw new CommandNotFoundException("No sub-command " + args[0]);
3765
}
3866
}
3967

40-
public String getCommandUsage(ICommandSender icommandsender) {
41-
return null;
68+
@Nonnull
69+
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) {
70+
if (args.length == 1) {
71+
String s = args[args.length - 1];
72+
if (args[0].isEmpty()) return Arrays.asList("reload", "gui");
73+
if (doesStringStartWith(s, "reload"))
74+
return Collections.singletonList("reload");
75+
else if (doesStringStartWith(s, "gui"))
76+
return Collections.singletonList("gui");
77+
} else if (args.length == 2) {
78+
if (args[0].equals("gui")) {
79+
List<String> list = Lists.newArrayList();
80+
81+
for (GameProfile gameprofile : server.getOnlinePlayerProfiles())
82+
if (!server.getPlayerList().canSendCommands(gameprofile) && doesStringStartWith(args[1], gameprofile.getName()))
83+
list.add(gameprofile.getName());
84+
85+
return list;
86+
}
87+
}
88+
return Arrays.asList("reload", "gui");
4289
}
4390

44-
}
91+
public String getCommandUsage(ICommandSender sender) {
92+
return null;
93+
}
94+
}

src/main/java/net/infstudio/goki/common/config/GokiConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ public class GokiConfig {
88
@Config.Name("Configuration Version")
99
public static String version = "v3";
1010

11+
@Config.Name("Keybinding Enabled")
12+
@Config.Comment({"Should register gokistats keybinding (default Y)", "If set to false, player can only use /gokistats gui to open gui"})
13+
@Config.RequiresMcRestart
14+
public static boolean keyBindingEnabled = true;
15+
1116
@Config.Name("Global Modifiers")
1217
public static GlobalModifiers globalModifiers = new GlobalModifiers();
1318

src/main/java/net/infstudio/goki/common/handlers/CommonHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public void playerRespawn(PlayerRespawnEvent event) {
159159
for (int stat = 0; stat < StatBase.totalStats; stat++) {
160160
DataHelper.multiplyPlayerStatLevel(player,
161161
StatBase.stats.get(stat),
162-
level -> level - (int) GokiConfig.globalModifiers.loseStatsMultiplier * level);
162+
level -> level - (int) (GokiConfig.globalModifiers.loseStatsMultiplier * level));
163163
}
164164
GokiPacketHandler.CHANNEL.sendTo(new S2CSyncAll(player), (EntityPlayerMP) player);
165165
}

src/main/java/net/infstudio/goki/common/handlers/TickHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class TickHandler {
2626

2727
@SubscribeEvent
2828
public void playerTick(TickEvent.PlayerTickEvent event) {
29-
if (event.phase == TickEvent.Phase.END) { // Due to issue #32
29+
if (event.phase == TickEvent.Phase.START) { // Due to issue #32
3030
EntityPlayer player = event.player;
3131

3232
handleTaskPlayerAPI(player);
@@ -150,4 +150,4 @@ private void handleFurnace(EntityPlayer player) {
150150

151151
}
152152

153-
}
153+
}

src/main/java/net/infstudio/goki/common/network/GokiPacketHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package net.infstudio.goki.common.network;
22

3-
import net.infstudio.goki.common.network.handler.PacketSyncClientHandler;
3+
import net.infstudio.goki.client.network.handler.PacketGuiClientHandler;
4+
import net.infstudio.goki.client.network.handler.PacketSyncClientHandler;
45
import net.infstudio.goki.common.network.handler.PacketSyncHandler;
56
import net.infstudio.goki.common.network.message.C2SStatSync;
7+
import net.infstudio.goki.common.network.message.S2COpenGui;
68
import net.infstudio.goki.common.network.message.S2CStatSync;
79
import net.infstudio.goki.common.network.message.S2CSyncAll;
810
import net.infstudio.goki.common.utils.Reference;
@@ -17,6 +19,7 @@ public class GokiPacketHandler {
1719
CHANNEL.registerMessage(new PacketSyncHandler.Stat(), C2SStatSync.class, 0, Side.SERVER);
1820
CHANNEL.registerMessage(PacketSyncClientHandler.StatAll.class, S2CSyncAll.class, 1, Side.CLIENT);
1921
CHANNEL.registerMessage(PacketSyncClientHandler.Stat.class, S2CStatSync.class, 2, Side.CLIENT);
22+
CHANNEL.registerMessage(PacketGuiClientHandler.class, S2COpenGui.class, 3, Side.CLIENT);
2023
// CHANNEL.registerMessage(new PacketConfigHandler(), MessageConfig.class, 0, Side.CLIENT);
2124

2225
// CHANNEL.registerMessage(new PacketSyncHandler.XP(), MessageXPSync.class, 0, Side.SERVER);

0 commit comments

Comments
 (0)