1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
package gregtech.common.misc;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
import static gregtech.common.misc.WirelessNetworkManager.getUserEU;
import static gregtech.common.misc.WirelessNetworkManager.setUserEU;
import java.lang.reflect.Field;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.EnumChatFormatting;
import com.gtnewhorizon.structurelib.StructureLib;
import gregtech.GT_Mod;
import gregtech.api.enums.GT_Values;
import gregtech.api.objects.GT_ChunkManager;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Pollution;
import gregtech.common.misc.spaceprojects.SpaceProjectManager;
public final class GT_Command extends CommandBase {
@Override
public String getCommandName() {
return "gt";
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "Usage: gt <subcommand>. Valid subcommands are: toggle, chunks, pollution.";
}
private void printHelp(ICommandSender sender) {
sender.addChatMessage(
new ChatComponentText(
"Usage: gt <toggle|chunks|pollution|global_energy_add|global_energy_set|global_energy_join>"));
sender.addChatMessage(new ChatComponentText("\"toggle D1\" - toggles general.Debug (D1)"));
sender.addChatMessage(new ChatComponentText("\"toggle D2\" - toggles general.Debug2 (D2)"));
sender.addChatMessage(new ChatComponentText("\"toggle debugCleanroom\" - toggles cleanroom debug log"));
sender.addChatMessage(new ChatComponentText("\"toggle debugDriller\" - toggles oil drill debug log"));
sender.addChatMessage(new ChatComponentText("\"toggle debugBlockPump\" - Possible issues with pumps"));
sender.addChatMessage(new ChatComponentText("\"toggle debugBlockMiner\" - Possible issues with miners"));
sender.addChatMessage(
new ChatComponentText("\"toggle debugEntityCramming\" - How long it takes and how many entities it finds"));
sender.addChatMessage(new ChatComponentText("\"toggle debugWorldGen\" - toggles generic worldgen debug"));
sender.addChatMessage(new ChatComponentText("\"toggle debugOrevein\" - toggles worldgen ore vein debug"));
sender.addChatMessage(new ChatComponentText("\"toggle debugSmallOres\" - toggles worldgen small vein debug"));
sender.addChatMessage(new ChatComponentText("\"toggle debugStones\" - toggles worldgen stones debug"));
sender.addChatMessage(new ChatComponentText("\"toggle debugChunkloaders\" - toggles chunkloaders debug"));
sender.addChatMessage(new ChatComponentText("\"toggle debugMulti\" - toggles structurelib debug"));
sender.addChatMessage(new ChatComponentText("\"chunks\" - print a list of the force loaded chunks"));
sender.addChatMessage(
new ChatComponentText(
"\"pollution <amount>\" - adds the <amount> of the pollution to the current chunk, "
+ "\n if <amount> isnt specified, will add"
+ GT_Mod.gregtechproxy.mPollutionSmogLimit
+ "gibbl."));
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + " --- Global wireless EU controls ---"));
sender.addChatMessage(new ChatComponentText("Allows you to set the amount of EU in a users wireless network."));
sender.addChatMessage(
new ChatComponentText(
"Usage:" + EnumChatFormatting.RED
+ " global_energy_set "
+ EnumChatFormatting.BLUE
+ "[Name] "
+ EnumChatFormatting.LIGHT_PURPLE
+ "[EU]"));
sender.addChatMessage(
new ChatComponentText("Allows you to add EU to a users wireless network. Also accepts negative numbers."));
sender.addChatMessage(
new ChatComponentText(
"Usage:" + EnumChatFormatting.RED
+ " global_energy_add "
+ EnumChatFormatting.BLUE
+ "[Name] "
+ EnumChatFormatting.LIGHT_PURPLE
+ "[EU]"));
sender.addChatMessage(
new ChatComponentText(
"Allows you to join two users together into one network. Can be undone by writing the users name twice."));
sender.addChatMessage(
new ChatComponentText(
"Usage:" + EnumChatFormatting.RED
+ " global_energy_join "
+ EnumChatFormatting.BLUE
+ "[User joining] [User to join]"));
sender.addChatMessage(new ChatComponentText("Shows the amount of EU in a users energy network."));
sender.addChatMessage(
new ChatComponentText(
"Usage:" + EnumChatFormatting.RED + " global_energy_display " + EnumChatFormatting.BLUE + "[Name]"));
}
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] ss) {
List<String> l = new ArrayList<>();
String test = ss.length == 0 ? "" : ss[0].trim();
if (ss.length == 0 || ss.length == 1 && (test.isEmpty() || Stream
.of(
"toggle",
"chunks",
"pollution",
"global_energy_add",
"global_energy_set",
"global_energy_join",
"global_energy_display")
.anyMatch(s -> s.startsWith(test)))) {
Stream
.of(
"toggle",
"chunks",
"pollution",
"global_energy_add",
"global_energy_set",
"global_energy_join",
"global_energy_display")
.filter(s -> test.isEmpty() || s.startsWith(test))
.forEach(l::add);
} else if (test.equals("toggle")) {
String test1 = ss[1].trim();
Stream
.of(
"D1",
"D2",
"debugCleanroom",
"debugDriller",
"debugBlockPump",
"debugBlockMiner",
"debugWorldGen",
"debugEntityCramming",
"debugOrevein",
"debugSmallOres",
"debugStones",
"debugChunkloaders",
"debugMulti",
"debugWorldData")
.filter(s -> test1.isEmpty() || s.startsWith(test1))
.forEach(l::add);
}
return l;
}
@Override
public void processCommand(ICommandSender sender, String[] strings) {
if (strings.length < 1) {
printHelp(sender);
return;
}
switch (strings[0]) {
case "toggle" -> {
if (strings.length < 2) {
printHelp(sender);
return;
}
if ("debugMulti".equals(strings[1])) {
StructureLib.DEBUG_MODE = !StructureLib.DEBUG_MODE;
sender.addChatMessage(
new ChatComponentText(strings[1] + " = " + (StructureLib.DEBUG_MODE ? "true" : "false")));
return;
}
try {
Field field = GT_Values.class.getDeclaredField(strings[1]);
if (field.getType() != boolean.class) {
sender.addChatMessage(new ChatComponentText("Wrong variable: " + strings[1]));
return;
}
boolean b = !field.getBoolean(null);
field.setBoolean(null, b);
sender.addChatMessage(new ChatComponentText(strings[1] + " = " + (b ? "true" : "false")));
} catch (Exception e) {
sender.addChatMessage(new ChatComponentText("No such variable: " + strings[0]));
}
}
case "chunks" -> {
GT_ChunkManager.printTickets();
sender.addChatMessage(new ChatComponentText("Forced chunks logged to GregTech.log"));
}
case "pollution" -> {
ChunkCoordinates coordinates = sender.getPlayerCoordinates();
int amount = (strings.length < 2) ? GT_Mod.gregtechproxy.mPollutionSmogLimit
: Integer.parseInt(strings[1]);
GT_Pollution.addPollution(
sender.getEntityWorld()
.getChunkFromBlockCoords(coordinates.posX, coordinates.posZ),
amount);
}
case "global_energy_add" -> {
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username);
String EU_String = strings[2];
// Usage is /gt global_energy_add username EU
String EU_string_formatted = EnumChatFormatting.RED
+ GT_Utility.formatNumbers(new BigInteger(EU_String))
+ EnumChatFormatting.RESET;
if (addEUToGlobalEnergyMap(uuid, new BigInteger(EU_String))) sender.addChatMessage(
new ChatComponentText(
"Successfully added " + EU_string_formatted
+ "EU to the global energy network of "
+ formatted_username
+ "."));
else sender.addChatMessage(
new ChatComponentText(
"Failed to add " + EU_string_formatted
+ "EU to the global energy map of "
+ formatted_username
+ ". Insufficient energy in network. "));
sender.addChatMessage(
new ChatComponentText(
formatted_username + " currently has "
+ EnumChatFormatting.RED
+ GT_Utility.formatNumbers(new BigInteger(getUserEU(uuid).toString()))
+ EnumChatFormatting.RESET
+ "EU in their network."));
}
case "global_energy_set" -> {
// Usage is /gt global_energy_set username EU
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username);
String EU_String_0 = strings[2];
if ((new BigInteger(EU_String_0).compareTo(BigInteger.ZERO)) < 0) {
sender.addChatMessage(
new ChatComponentText("Cannot set a users energy network to a negative value."));
break;
}
setUserEU(uuid, new BigInteger(EU_String_0));
sender.addChatMessage(
new ChatComponentText(
"Successfully set " + formatted_username
+ "'s global energy network to "
+ EnumChatFormatting.RED
+ GT_Utility.formatNumbers(new BigInteger(EU_String_0))
+ EnumChatFormatting.RESET
+ "EU."));
}
case "global_energy_join" -> {
// Usage is /gt global_energy_join username_of_you username_to_join
String usernameSubject = strings[1];
String usernameTeam = strings[2];
String formattedUsernameSubject = EnumChatFormatting.BLUE + usernameSubject + EnumChatFormatting.RESET;
String formattedUsernameTeam = EnumChatFormatting.BLUE + usernameTeam + EnumChatFormatting.RESET;
UUID uuidSubject = SpaceProjectManager.getPlayerUUIDFromName(usernameSubject);
UUID uuidTeam = SpaceProjectManager.getLeader(SpaceProjectManager.getPlayerUUIDFromName(usernameTeam));
if (uuidSubject.equals(uuidTeam)) {
// leave team
SpaceProjectManager.putInTeam(uuidSubject, uuidSubject);
sender.addChatMessage(
new ChatComponentText(
"User " + formattedUsernameSubject + " has rejoined their own global energy network."));
break;
}
// join other's team
if (uuidSubject.equals(uuidTeam)) {
sender.addChatMessage(new ChatComponentText("They are already in the same network!"));
break;
}
SpaceProjectManager.putInTeam(uuidSubject, uuidTeam);
sender.addChatMessage(
new ChatComponentText(
"Success! " + formattedUsernameSubject + " has joined " + formattedUsernameTeam + "."));
sender.addChatMessage(
new ChatComponentText(
"To undo this simply join your own network again with /gt global_energy_join "
+ formattedUsernameSubject
+ " "
+ formattedUsernameSubject
+ "."));
}
case "global_energy_display" -> {
// Usage is /gt global_energy_display username.
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
UUID userUUID = SpaceProjectManager.getPlayerUUIDFromName(username);
if (!SpaceProjectManager.isInTeam(userUUID)) {
sender.addChatMessage(
new ChatComponentText("User " + formatted_username + " has no global energy network."));
break;
}
UUID teamUUID = SpaceProjectManager.getLeader(userUUID);
sender.addChatMessage(
new ChatComponentText(
"User " + formatted_username
+ " has "
+ EnumChatFormatting.RED
+ GT_Utility.formatNumbers(getUserEU(userUUID))
+ EnumChatFormatting.RESET
+ "EU in their network."));
if (!userUUID.equals(teamUUID)) sender.addChatMessage(
new ChatComponentText(
"User " + formatted_username
+ " is currently in network of "
+ EnumChatFormatting.BLUE
+ SpaceProjectManager.getPlayerNameFromUUID(teamUUID)
+ EnumChatFormatting.RESET
+ "."));
}
default -> {
sender
.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Invalid command/syntax detected."));
printHelp(sender);
}
}
}
}
|