Skip to content
This repository was archived by the owner on Jun 22, 2022. It is now read-only.

Commit 19a8225

Browse files
Merge pull request #100 from CodeUtilities/feature/fix-import-file
Make /importfile use UTF-8 and unregister the heads menu.
2 parents 5ad49d6 + abded4a commit 19a8225

File tree

3 files changed

+127
-144
lines changed

3 files changed

+127
-144
lines changed

src/main/java/io/github/codeutilities/CodeUtilities.java

Lines changed: 41 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,14 @@
88
import io.github.codeutilities.mod.config.internal.ConfigFile;
99
import io.github.codeutilities.mod.config.internal.ConfigInstruction;
1010
import io.github.codeutilities.mod.config.internal.gson.ConfigSerializer;
11-
import io.github.codeutilities.mod.config.internal.gson.types.BooleanSerializer;
12-
import io.github.codeutilities.mod.config.internal.gson.types.DoubleSerializer;
13-
import io.github.codeutilities.mod.config.internal.gson.types.DynamicStringSerializer;
14-
import io.github.codeutilities.mod.config.internal.gson.types.EnumSerializer;
15-
import io.github.codeutilities.mod.config.internal.gson.types.FloatSerializer;
16-
import io.github.codeutilities.mod.config.internal.gson.types.IntegerSerializer;
17-
import io.github.codeutilities.mod.config.internal.gson.types.LongSerializer;
18-
import io.github.codeutilities.mod.config.internal.gson.types.SoundSerializer;
19-
import io.github.codeutilities.mod.config.internal.gson.types.StringSerializer;
11+
import io.github.codeutilities.mod.config.internal.gson.types.*;
2012
import io.github.codeutilities.mod.config.internal.gson.types.list.StringListSerializer;
2113
import io.github.codeutilities.mod.config.structure.ConfigManager;
22-
import io.github.codeutilities.mod.config.types.BooleanSetting;
23-
import io.github.codeutilities.mod.config.types.DoubleSetting;
24-
import io.github.codeutilities.mod.config.types.DynamicStringSetting;
25-
import io.github.codeutilities.mod.config.types.EnumSetting;
26-
import io.github.codeutilities.mod.config.types.FloatSetting;
27-
import io.github.codeutilities.mod.config.types.IntegerSetting;
28-
import io.github.codeutilities.mod.config.types.LongSetting;
29-
import io.github.codeutilities.mod.config.types.SoundSetting;
30-
import io.github.codeutilities.mod.config.types.StringSetting;
14+
import io.github.codeutilities.mod.config.types.*;
3115
import io.github.codeutilities.mod.config.types.list.StringListSetting;
3216
import io.github.codeutilities.mod.events.EventHandler;
3317
import io.github.codeutilities.mod.events.interfaces.OtherEvents;
3418
import io.github.codeutilities.mod.features.TemplatePeeker;
35-
import io.github.codeutilities.mod.features.commands.HeadsMenu;
3619
import io.github.codeutilities.mod.features.discordrpc.DFDiscordRPC;
3720
import io.github.codeutilities.mod.features.social.cosmetics.CosmeticHandler;
3821
import io.github.codeutilities.mod.features.social.tab.Client;
@@ -42,14 +25,6 @@
4225
import io.github.codeutilities.sys.networking.State;
4326
import io.github.codeutilities.sys.networking.websocket.SocketHandler;
4427
import io.github.codeutilities.sys.util.LimitedHashmap;
45-
import java.io.IOException;
46-
import java.nio.charset.Charset;
47-
import java.nio.file.Path;
48-
import java.util.Random;
49-
import java.util.concurrent.ExecutorService;
50-
import java.util.concurrent.Executors;
51-
import java.util.regex.Matcher;
52-
import java.util.regex.Pattern;
5328
import net.fabricmc.api.ModInitializer;
5429
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
5530
import net.fabricmc.loader.api.FabricLoader;
@@ -60,35 +35,42 @@
6035
import org.apache.logging.log4j.LogManager;
6136
import org.apache.logging.log4j.Logger;
6237

38+
import java.io.IOException;
39+
import java.nio.charset.Charset;
40+
import java.nio.file.Path;
41+
import java.util.Random;
42+
import java.util.concurrent.ExecutorService;
43+
import java.util.concurrent.Executors;
44+
import java.util.regex.Matcher;
45+
import java.util.regex.Pattern;
46+
6347
public class CodeUtilities implements ModInitializer {
6448

6549
public static final String MOD_ID = "codeutilities";
6650
public static final String MOD_NAME = "CodeUtilities";
67-
public static String MOD_VERSION;
6851
public static final boolean BETA = false; // todo: we're changing how "betas" work so this will need to be changed.
69-
7052
public static final Logger LOGGER = LogManager.getLogger();
7153
public static final Random RANDOM = new Random();
7254
public static final Gson GSON = new GsonBuilder()
73-
.registerTypeAdapter(ConfigInstruction.class, new ConfigSerializer())
74-
.registerTypeAdapter(BooleanSetting.class, new BooleanSerializer())
75-
.registerTypeAdapter(IntegerSetting.class, new IntegerSerializer())
76-
.registerTypeAdapter(DoubleSetting.class, new DoubleSerializer())
77-
.registerTypeAdapter(FloatSetting.class, new FloatSerializer())
78-
.registerTypeAdapter(LongSetting.class, new LongSerializer())
79-
.registerTypeAdapter(StringSetting.class, new StringSerializer())
80-
.registerTypeAdapter(StringListSetting.class, new StringListSerializer())
81-
.registerTypeAdapter(EnumSetting.class, new EnumSerializer())
82-
.registerTypeAdapter(DynamicStringSetting.class, new DynamicStringSerializer())
83-
.registerTypeAdapter(SoundSetting.class, new SoundSerializer())
84-
.setPrettyPrinting()
85-
.create();
55+
.registerTypeAdapter(ConfigInstruction.class, new ConfigSerializer())
56+
.registerTypeAdapter(BooleanSetting.class, new BooleanSerializer())
57+
.registerTypeAdapter(IntegerSetting.class, new IntegerSerializer())
58+
.registerTypeAdapter(DoubleSetting.class, new DoubleSerializer())
59+
.registerTypeAdapter(FloatSetting.class, new FloatSerializer())
60+
.registerTypeAdapter(LongSetting.class, new LongSerializer())
61+
.registerTypeAdapter(StringSetting.class, new StringSerializer())
62+
.registerTypeAdapter(StringListSetting.class, new StringListSerializer())
63+
.registerTypeAdapter(EnumSetting.class, new EnumSerializer())
64+
.registerTypeAdapter(DynamicStringSetting.class, new DynamicStringSerializer())
65+
.registerTypeAdapter(SoundSetting.class, new SoundSerializer())
66+
.setPrettyPrinting()
67+
.create();
8668
public static final JsonParser JSON_PARSER = new JsonParser();
8769
public static final MinecraftClient MC = MinecraftClient.getInstance();
8870
public static final ExecutorService EXECUTOR = Executors.newCachedThreadPool();
8971
private static final Path optionsTxtPath = FabricLoader.getInstance().getGameDir()
90-
.resolve("options.txt");
91-
72+
.resolve("options.txt");
73+
public static String MOD_VERSION;
9274
public static String PLAYER_NAME = null;
9375
public static String PLAYER_UUID = null;
9476
public static String JEREMASTER_UUID = "6c669475-3026-4603-b3e7-52c97681ad3a";
@@ -115,6 +97,19 @@ public static void log(String message) {
11597
log(Level.INFO, message);
11698
}
11799

100+
public static void onClose() {
101+
LOGGER.info("Closing...");
102+
try {
103+
ConfigFile.getInstance().save();
104+
TemplateStorageHandler.getInstance().save();
105+
CosmeticHandler.INSTANCE.shutdownExecutorService();
106+
} catch (Exception err) {
107+
LOGGER.error("Error");
108+
err.printStackTrace();
109+
}
110+
LOGGER.info("Closed.");
111+
}
112+
118113
@Override
119114
public void onInitialize() {
120115
MOD_VERSION = FabricLoader.getInstance().getModContainer(MOD_ID).get().getMetadata().getVersion().getFriendlyString();
@@ -139,7 +134,7 @@ public void onInitialize() {
139134
initializer.add(new ConfigFile());
140135
initializer.add(new ConfigManager());
141136
initializer.add(new TemplateStorageHandler());
142-
initializer.add(new HeadsMenu());
137+
// initializer.add(new HeadsMenu());
143138
initializer.add(new DFDiscordRPC());
144139
initializer.add(new Client());
145140
initializer.add(new ActionDump());
@@ -154,22 +149,9 @@ public void onInitialize() {
154149
MC.send(CosmeticHandler.INSTANCE::load);
155150

156151
ClientTickEvents.START_CLIENT_TICK
157-
.register(client -> OtherEvents.TICK.invoker().tick(client));
152+
.register(client -> OtherEvents.TICK.invoker().tick(client));
158153

159154
log(Level.INFO, "Initialized successfully!");
160155
}
161156

162-
public static void onClose() {
163-
LOGGER.info("Closing...");
164-
try {
165-
ConfigFile.getInstance().save();
166-
TemplateStorageHandler.getInstance().save();
167-
CosmeticHandler.INSTANCE.shutdownExecutorService();
168-
} catch (Exception err) {
169-
LOGGER.error("Error");
170-
err.printStackTrace();
171-
}
172-
LOGGER.info("Closed.");
173-
}
174-
175157
}

src/main/java/io/github/codeutilities/mod/commands/CommandHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void load() {
5757
new UnpackCommand(),
5858
new ItemdataCommand(),
5959
new UuidCommand(),
60-
new HeadsCommand(),
60+
// new HeadsCommand(),
6161
new ColorsCommand(),
6262
new ColorCommand(),
6363
new EditItemCommand(),

src/main/java/io/github/codeutilities/mod/commands/impl/item/ImportFileCommand.java

Lines changed: 85 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -11,96 +11,97 @@
1111
import io.github.codeutilities.sys.player.chat.ChatType;
1212
import io.github.codeutilities.sys.player.chat.ChatUtil;
1313
import io.github.codeutilities.sys.util.ItemUtil;
14-
import java.awt.Dialog;
15-
import java.awt.FileDialog;
16-
import java.awt.Frame;
14+
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
15+
import net.minecraft.client.MinecraftClient;
16+
import net.minecraft.item.ItemStack;
17+
import net.minecraft.item.Items;
18+
19+
import java.awt.*;
1720
import java.io.File;
1821
import java.io.IOException;
1922
import java.nio.charset.StandardCharsets;
2023
import java.util.ArrayList;
2124
import java.util.List;
2225
import java.util.Scanner;
23-
import net.fabricmc.fabric.api.client.command.v1.FabricClientCommandSource;
24-
import net.minecraft.client.MinecraftClient;
25-
import net.minecraft.item.ItemStack;
26-
import net.minecraft.item.Items;
2726

2827
public class ImportFileCommand extends Command {
2928

3029
@Override
3130
public void register(MinecraftClient mc, CommandDispatcher<FabricClientCommandSource> cd) {
3231
cd.register(ArgBuilder.literal("importfile")
33-
.executes(ctx -> {
34-
if (!isCreative(mc)) return -1;
35-
36-
ChatUtil.sendMessage("Opening File Picker", ChatType.INFO_BLUE);
37-
CodeUtilities.EXECUTOR.submit(() -> {
38-
try {
39-
FileDialog fd = new FileDialog((Dialog) null, "Choose a text file", FileDialog.LOAD);
40-
fd.setMultipleMode(true);
41-
fd.setVisible(true);
42-
File[] files = fd.getFiles();
43-
fd.dispose();
44-
if (files == null || files.length==0) {
45-
ChatUtil.sendMessage("You didnt choose a file!",ChatType.FAIL);
46-
return;
47-
}
48-
49-
int valid = 0;
50-
files:
51-
for (File f : files) {
52-
if (files.length != 1) ChatUtil.sendMessage("Loading file: " + f.getName(),ChatType.INFO_BLUE);
53-
Scanner sc = new Scanner(f);
32+
.executes(ctx -> {
33+
if (!isCreative(mc)) return -1;
34+
35+
ChatUtil.sendMessage("Opening File Picker", ChatType.INFO_BLUE);
36+
CodeUtilities.EXECUTOR.submit(() -> {
37+
try {
38+
FileDialog fd = new FileDialog((Dialog) null, "Choose a text file", FileDialog.LOAD);
39+
fd.setMultipleMode(true);
40+
fd.setVisible(true);
41+
File[] files = fd.getFiles();
42+
fd.dispose();
43+
if (files == null || files.length == 0) {
44+
ChatUtil.sendMessage("You didnt choose a file!", ChatType.FAIL);
45+
return;
46+
}
5447

55-
List<String> lines = new ArrayList<>();
48+
int valid = 0;
49+
files:
50+
for (File f : files) {
51+
if (files.length != 1)
52+
ChatUtil.sendMessage("Loading file: " + f.getName(), ChatType.INFO_BLUE);
53+
Scanner sc = new Scanner(f, "utf-8");
54+
55+
List<String> lines = new ArrayList<>();
56+
57+
while (sc.hasNextLine()) {
58+
String line = sc.nextLine();
59+
if (line.length() > 2000) {
60+
ChatUtil.sendMessage("Line " + (lines.size() + 1) + " is too long! (" + line.length() + " > 2000)", ChatType.FAIL);
61+
continue files;
62+
}
63+
lines.add(line);
64+
if (lines.size() > 10000) {
65+
ChatUtil.sendMessage("File contains contains too many lines! (Max: 10000)", ChatType.FAIL);
66+
continue files;
67+
}
68+
}
5669

57-
while (sc.hasNextLine()) {
58-
String line = sc.nextLine();
59-
if (line.length()>2000) {
60-
ChatUtil.sendMessage("Line " + (lines.size()+1) + " is too long! (" + line.length() + " > 2000)",ChatType.FAIL);
61-
continue files;
70+
List<JsonObject> blocks = new ArrayList<>();
71+
List<String> current = new ArrayList<>();
72+
73+
boolean first = true;
74+
for (String line : lines) {
75+
current.add(line);
76+
if (current.size() >= 26) {
77+
blocks.add(block(current, first));
78+
first = false;
79+
current = new ArrayList<>();
80+
}
6281
}
63-
lines.add(line);
64-
if (lines.size() > 10000) {
65-
ChatUtil.sendMessage("File contains contains too many lines! (Max: 10000)",ChatType.FAIL);
66-
continue files;
82+
if (current.size() != 0) blocks.add(block(current, first));
83+
84+
String template = template(blocks);
85+
if (template.getBytes().length > 65536) {//i have no idea what the actual limit is it just seems to be close to this
86+
ChatUtil.sendMessage("Your file is too large!", ChatType.FAIL);
87+
} else {
88+
ItemStack item = new ItemStack(Items.ENDER_CHEST);
89+
TemplateUtils.applyRawTemplateNBT(item, f.getName(), "CodeUtilities", template);
90+
ItemUtil.giveCreativeItem(item, files.length == 1);
91+
if (files.length != 1) Thread.sleep(500);
92+
valid++;
6793
}
6894
}
95+
if (files.length != 1 && valid > 0)
96+
ChatUtil.sendMessage("Loaded " + valid + " files!", ChatType.SUCCESS);
6997

70-
List<JsonObject> blocks = new ArrayList<>();
71-
List<String> current = new ArrayList<>();
72-
73-
boolean first = true;
74-
for (String line : lines) {
75-
current.add(line);
76-
if (current.size()>=26) {
77-
blocks.add(block(current,first));
78-
first = false;
79-
current = new ArrayList<>();
80-
}
81-
}
82-
if (current.size() != 0) blocks.add(block(current,first));
83-
84-
String template = template(blocks);
85-
if (template.getBytes().length > 65536) {//i have no idea what the actual limit is it just seems to be close to this
86-
ChatUtil.sendMessage("Your file is too large!",ChatType.FAIL);
87-
} else {
88-
ItemStack item = new ItemStack(Items.ENDER_CHEST);
89-
TemplateUtils.applyRawTemplateNBT(item,f.getName(),"CodeUtilities",template);
90-
ItemUtil.giveCreativeItem(item,files.length==1);
91-
if (files.length!=1) Thread.sleep(500);
92-
valid++;
93-
}
98+
} catch (Exception err) {
99+
err.printStackTrace();
100+
ChatUtil.sendMessage("Unexpected Error.", ChatType.FAIL);
94101
}
95-
if (files.length!=1 && valid>0) ChatUtil.sendMessage("Loaded " + valid + " files!",ChatType.SUCCESS);
96-
97-
} catch (Exception err) {
98-
err.printStackTrace();
99-
ChatUtil.sendMessage("Unexpected Error.",ChatType.FAIL);
100-
}
101-
});
102-
return 1;
103-
})
102+
});
103+
return 1;
104+
})
104105
);
105106
}
106107

@@ -111,7 +112,7 @@ private String template(List<JsonObject> iblocks) throws IOException {
111112
blocks.add(block);
112113
}
113114
JsonObject root = new JsonObject();
114-
root.add("blocks",blocks);
115+
root.add("blocks", blocks);
115116
byte[] b64 = CompressionUtil.toBase64(CompressionUtil.toGZIP(root.toString().getBytes(StandardCharsets.UTF_8)));
116117
return new String(b64);
117118
}
@@ -121,27 +122,27 @@ private JsonObject block(List<String> texts, boolean first) {
121122
JsonArray items = new JsonArray();
122123
items.add(var);
123124
for (String text : texts) {
124-
items.add(textItem(text,items.size()));
125+
items.add(textItem(text, items.size()));
125126
}
126127
JsonObject args = new JsonObject();
127-
args.add("items",items);
128+
args.add("items", items);
128129
JsonObject root = new JsonObject();
129-
root.add("args",args);
130-
root.addProperty("id","block");
131-
root.addProperty("block","set_var");
132-
root.addProperty("action",first ? "CreateList" : "AppendValue");
130+
root.add("args", args);
131+
root.addProperty("id", "block");
132+
root.addProperty("block", "set_var");
133+
root.addProperty("action", first ? "CreateList" : "AppendValue");
133134
return root;
134135
}
135136

136-
private JsonObject textItem(String text,int slot) {
137+
private JsonObject textItem(String text, int slot) {
137138
JsonObject data = new JsonObject();
138-
data.addProperty("name",text);
139+
data.addProperty("name", text);
139140
JsonObject item = new JsonObject();
140-
item.addProperty("id","txt");
141-
item.add("data",data);
141+
item.addProperty("id", "txt");
142+
item.add("data", data);
142143
JsonObject root = new JsonObject();
143-
root.add("item",item);
144-
root.addProperty("slot",slot);
144+
root.add("item", item);
145+
root.addProperty("slot", slot);
145146
return root;
146147
}
147148

0 commit comments

Comments
 (0)