Skip to content

Commit c2cd1ef

Browse files
Merge pull request #26 from XTerPL/XTer-4
Fixes and Additions
2 parents db319b6 + c6e1a01 commit c2cd1ef

37 files changed

+1385
-218
lines changed

src/main/java/io/github/techstreet/dfscript/DFScript.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
55
import io.github.techstreet.dfscript.commands.CommandManager;
6+
import io.github.techstreet.dfscript.commands.arguments.StringFuncArgumentType;
7+
import io.github.techstreet.dfscript.commands.arguments.serializers.StringFuncArgumentSerializer;
68
import io.github.techstreet.dfscript.features.AuthHandler;
79
import io.github.techstreet.dfscript.features.UpdateAlerts;
810
import io.github.techstreet.dfscript.loader.Loader;
@@ -27,9 +29,13 @@
2729
import io.github.techstreet.dfscript.util.chat.ChatType;
2830
import io.github.techstreet.dfscript.util.chat.ChatUtil;
2931
import net.fabricmc.api.ModInitializer;
32+
import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry;
3033
import net.fabricmc.loader.api.FabricLoader;
3134
import net.minecraft.client.MinecraftClient;
3235
import net.minecraft.client.util.Session;
36+
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer;
37+
import net.minecraft.command.argument.serialize.StringArgumentSerializer;
38+
import net.minecraft.util.Identifier;
3339
import org.apache.commons.codec.binary.Base64;
3440
import org.apache.commons.lang3.RandomStringUtils;
3541
import org.apache.logging.log4j.LogManager;
@@ -66,6 +72,8 @@ public void onInitialize() {
6672

6773
MOD_VERSION = FabricLoader.getInstance().getModContainer(MOD_ID).get().getMetadata().getVersion().getFriendlyString();
6874

75+
ArgumentTypeRegistry.registerArgumentType(new Identifier("tutorial", "uuid"), StringFuncArgumentType.class, new StringFuncArgumentSerializer());
76+
6977
Loader loader = Loader.getInstance();
7078
loader.load(new CommandManager());
7179
loader.load(new AuthHandler());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.github.techstreet.dfscript.commands.arguments;
2+
3+
import io.github.techstreet.dfscript.script.Script;
4+
import io.github.techstreet.dfscript.script.ScriptManager;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.function.Function;
9+
10+
public enum StringFuncArgumentFunctions {
11+
SCRIPTS((v) -> {
12+
List<String> possible = new ArrayList<>();
13+
for (Script s : ScriptManager.getInstance().getScripts()) {
14+
possible.add(s.getName().replaceAll(" ", "_"));
15+
}
16+
return possible;
17+
});
18+
19+
StringFuncArgumentFunctions(Function<Void, List<String>> func) {
20+
this.func = func;
21+
}
22+
23+
public Function<Void, List<String>> getFunction() {
24+
return func;
25+
}
26+
27+
Function<Void, List<String>> func;
28+
}

src/main/java/io/github/techstreet/dfscript/commands/arguments/StringFuncArgumentType.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
import java.util.List;
1010
import java.util.concurrent.CompletableFuture;
1111
import java.util.function.Function;
12+
1213
import net.minecraft.command.CommandSource;
1314

1415
public class StringFuncArgumentType implements ArgumentType<String> {
1516

16-
Function<Void,List<String>> func;
17+
StringFuncArgumentFunctions func;
1718
boolean greedy;
1819

19-
public StringFuncArgumentType(Function<Void, List<String>> func, boolean greedy) {
20+
public StringFuncArgumentType(StringFuncArgumentFunctions func, boolean greedy) {
2021
this.func = func;
2122
this.greedy = greedy;
2223
}
@@ -25,7 +26,7 @@ public StringFuncArgumentType(Function<Void, List<String>> func, boolean greedy)
2526
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context,
2627
SuggestionsBuilder builder) {
2728

28-
List<String> suggestions = func.apply(null);
29+
List<String> suggestions = func.getFunction().apply(null);
2930

3031
if (context.getSource() instanceof CommandSource) {
3132
return CommandSource.suggestMatching(suggestions, builder);
@@ -46,4 +47,13 @@ public String parse(StringReader reader) throws CommandSyntaxException {
4647

4748
return reader.getString().substring(i, reader.getCursor());
4849
}
50+
51+
public StringFuncArgumentFunctions getFunction()
52+
{
53+
return func;
54+
}
55+
56+
public boolean isGreedy() {
57+
return greedy;
58+
}
4959
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.github.techstreet.dfscript.commands.arguments.serializers;
2+
3+
import com.google.gson.JsonObject;
4+
import com.mojang.brigadier.arguments.StringArgumentType;
5+
import io.github.techstreet.dfscript.commands.arguments.StringFuncArgumentFunctions;
6+
import io.github.techstreet.dfscript.commands.arguments.StringFuncArgumentType;
7+
import net.minecraft.command.CommandRegistryAccess;
8+
import net.minecraft.command.argument.serialize.ArgumentSerializer;
9+
import net.minecraft.network.PacketByteBuf;
10+
11+
import java.util.List;
12+
import java.util.function.Function;
13+
14+
public class StringFuncArgumentSerializer implements ArgumentSerializer<StringFuncArgumentType, StringFuncArgumentSerializer.StringFuncArgumentProperties> {
15+
16+
@Override
17+
public void writePacket(StringFuncArgumentProperties properties, PacketByteBuf buf) {
18+
buf.writeBoolean(properties.greedy);
19+
buf.writeEnumConstant(properties.func);
20+
}
21+
22+
@Override
23+
public StringFuncArgumentProperties fromPacket(PacketByteBuf buf) {
24+
boolean greedy = buf.readBoolean();
25+
StringFuncArgumentFunctions func = buf.readEnumConstant(StringFuncArgumentFunctions.class);
26+
27+
return new StringFuncArgumentProperties(greedy, func);
28+
}
29+
30+
@Override
31+
public void writeJson(StringFuncArgumentProperties properties, JsonObject json) {
32+
json.addProperty("greedy", properties.greedy);
33+
34+
json.addProperty("function", properties.func.name());
35+
}
36+
37+
@Override
38+
public StringFuncArgumentProperties getArgumentTypeProperties(StringFuncArgumentType argumentType) {
39+
return new StringFuncArgumentProperties(argumentType.isGreedy(), argumentType.getFunction());
40+
}
41+
42+
public final class StringFuncArgumentProperties implements ArgumentTypeProperties<StringFuncArgumentType> {
43+
44+
boolean greedy;
45+
StringFuncArgumentFunctions func;
46+
47+
public StringFuncArgumentProperties(boolean greedy, StringFuncArgumentFunctions func)
48+
{
49+
this.greedy = greedy;
50+
this.func = func;
51+
}
52+
53+
@Override
54+
public StringFuncArgumentType createType(CommandRegistryAccess commandRegistryAccess) {
55+
return new StringFuncArgumentType(func, greedy);
56+
}
57+
58+
@Override
59+
public ArgumentSerializer<StringFuncArgumentType, ?> getSerializer() {
60+
return StringFuncArgumentSerializer.this;
61+
}
62+
}
63+
}

src/main/java/io/github/techstreet/dfscript/commands/misc/ScriptsCommand.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.Map.Entry;
1616
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
1717

18+
import static io.github.techstreet.dfscript.commands.arguments.StringFuncArgumentFunctions.SCRIPTS;
19+
1820
public class ScriptsCommand implements Command {
1921

2022
@Override
@@ -33,13 +35,7 @@ public void register(CommandDispatcher<FabricClientCommandSource> cd) {
3335
})
3436
)
3537
.then(literal("vars")
36-
.then(argument("script", new StringFuncArgumentType((v) -> {
37-
List<String> possible = new ArrayList<>();
38-
for (Script s : ScriptManager.getInstance().getScripts()) {
39-
possible.add(s.getName().replaceAll(" ", "_"));
40-
}
41-
return possible;
42-
}, false)
38+
.then(argument("script", new StringFuncArgumentType(SCRIPTS, false)
4339
)
4440
.executes(ctx -> {
4541
listVars(ctx.getArgument("script", String.class), "");

src/main/java/io/github/techstreet/dfscript/mixin/player/MLocalPlayer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private void chat(String message, Text preview, CallbackInfo ci) {
2626

2727
@Inject(method = "sendCommand", at = @At("HEAD"), cancellable = true)
2828
private void command(String command, CallbackInfoReturnable<Boolean> ci) {
29-
SendChatEvent event = new SendChatEvent(command);
29+
SendChatEvent event = new SendChatEvent("/"+command);
3030
EventManager.getInstance().dispatch(event);
3131
if (event.isCancelled()) {
3232
ci.cancel();
@@ -35,7 +35,7 @@ private void command(String command, CallbackInfoReturnable<Boolean> ci) {
3535

3636
@Inject(method = "sendCommandInternal", at = @At("HEAD"), cancellable = true)
3737
private void commandInterval(String command, @Nullable Text preview, CallbackInfo ci) {
38-
SendChatEvent event = new SendChatEvent(command);
38+
SendChatEvent event = new SendChatEvent("/"+command);
3939
EventManager.getInstance().dispatch(event);
4040
if (event.isCancelled()) {
4141
ci.cancel();

src/main/java/io/github/techstreet/dfscript/screen/CScreen.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,22 @@ public boolean charTyped(char ch, int keyCode) {
6565
return super.charTyped(ch, keyCode);
6666
}
6767

68+
@Override
6869
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
6970
for (CWidget cWidget : widgets) {
7071
cWidget.keyPressed(keyCode, scanCode, modifiers);
7172
}
7273

7374
return super.keyPressed(keyCode, scanCode, modifiers);
7475
}
76+
@Override
77+
public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
78+
for (CWidget cWidget : widgets) {
79+
cWidget.keyReleased(keyCode, scanCode, modifiers);
80+
}
81+
82+
return super.keyReleased(keyCode, scanCode, modifiers);
83+
}
7584

7685
@Override
7786
public boolean mouseClicked(double mouseX, double mouseY, int button) {

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddActionScreen.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.github.techstreet.dfscript.script.Script;
77
import io.github.techstreet.dfscript.script.action.ScriptAction;
88
import io.github.techstreet.dfscript.script.action.ScriptActionCategory;
9+
import io.github.techstreet.dfscript.script.action.ScriptActionCategoryExtra;
910
import io.github.techstreet.dfscript.script.action.ScriptActionType;
1011
import io.github.techstreet.dfscript.script.event.ScriptEvent;
1112
import io.github.techstreet.dfscript.script.event.ScriptEventType;
@@ -36,6 +37,23 @@ public ScriptAddActionScreen(Script script, int insertIndex, ScriptActionCategor
3637
});
3738
widgets.add(item);
3839
x += 10;
40+
if (x >= size - 10) {
41+
x = 3;
42+
y += 10;
43+
}
44+
}
45+
}
46+
47+
if (category != null)
48+
{
49+
for(ScriptActionCategoryExtra extra : category.getExtras()) {
50+
CItem item = new CItem(x, y, extra.getIcon());
51+
item.setClickListener((btn) -> {
52+
script.getParts().add(insertIndex, extra.getPart());
53+
DFScript.MC.setScreen(new ScriptEditScreen(script));
54+
});
55+
widgets.add(item);
56+
x += 10;
3957
if (x >= size-10) {
4058
x = 3;
4159
y += 10;
@@ -70,6 +88,7 @@ private static int size(ScriptActionCategory category) {
7088
if (category == null) {
7189
amount = ScriptEventType.values().length;
7290
} else {
91+
amount += category.getExtras().size();
7392
for (ScriptActionType type : ScriptActionType.values()) {
7493
if (type.getCategory() == category) {
7594
amount++;

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddSettingScreen.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
import io.github.techstreet.dfscript.screen.widget.CItem;
66
import io.github.techstreet.dfscript.script.Script;
77
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
8+
import io.github.techstreet.dfscript.script.options.ScriptOption;
89
import io.github.techstreet.dfscript.script.options.ScriptOptionEnum;
910
import io.github.techstreet.dfscript.util.chat.ChatUtil;
11+
12+
import java.util.ArrayList;
13+
1014
public class ScriptAddSettingScreen extends CScreen {
1115
private static final int size;
1216

@@ -23,19 +27,25 @@ public ScriptAddSettingScreen(Script script, int pos) {
2327
int x = 3;
2428
int y = 3;
2529

26-
for(ScriptOptionEnum option : ScriptOptionEnum.values())
27-
{
30+
for(ScriptOptionEnum option : ScriptOptionEnum.values()) {
2831
CItem citem = new CItem(x, y, option.getIcon());
2932

30-
citem.setClickListener((a) -> {
31-
try {
32-
script.addOption(pos, new ScriptNamedOption(option.getOptionType().getConstructor().newInstance(), script.getUnnamedOption()));
33-
} catch (Exception e) {
34-
ChatUtil.error(String.valueOf(e.getCause()));
35-
}
33+
if(option.getExtraTypes() == 0) {
34+
citem.setClickListener((a) -> {
35+
try {
36+
script.addOption(pos, new ScriptNamedOption(ScriptOption.instantiate(option, new ArrayList<>()), script.getUnnamedOption()));
37+
} catch (Exception e) {
38+
ChatUtil.error(String.valueOf(e.getCause()));
39+
}
3640

37-
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
38-
});
41+
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
42+
});
43+
}
44+
else {
45+
citem.setClickListener((a) -> {
46+
DFScript.MC.setScreen(new ScriptAddSettingSubtypeScreen(script, option, pos));
47+
});
48+
}
3949

4050
widgets.add(citem);
4151

0 commit comments

Comments
 (0)