Skip to content

Commit 9f315e4

Browse files
committed
trims but with powers
1 parent efccb54 commit 9f315e4

25 files changed

Lines changed: 491 additions & 57 deletions

build.gradle

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,20 @@ repositories {
1818
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
1919
// for more information about repositories.
2020

21-
maven { url 'https://jitpack.io' }
21+
maven {
22+
name = 'Ladysnake Mods'
23+
url = 'https://maven.ladysnake.org/releases'
24+
}
25+
maven {
26+
url "https://jitpack.io"
27+
}
28+
maven {
29+
url "https://maven.shedaniel.me/"
30+
}
31+
maven {
32+
url "https://maven.terraformersmc.com/"
33+
}
34+
// idk i just copied what origins needs and got rid of stuff that didnt appear
2235
}
2336

2437
loom {
@@ -34,6 +47,8 @@ dependencies {
3447
// Fabric API. This is technically optional, but you probably want it anyway.
3548
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
3649

50+
// apoli, mixin extras
51+
include(modApi("com.github.apace100:apoli:${project.apoli_version}"))
3752
include(implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-fabric:${project.mixinextrasver}")))
3853
}
3954

gradle.properties

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ yarn_mappings=1.20.1+build.10
99
loader_version=0.14.21
1010

1111
# Mod Properties
12-
mod_version=0.2.0
12+
mod_version=0.3.0
1313
maven_group=net.diamonddev
1414
archives_base_name=simpletrims
1515

1616
# Dependencies
1717
fabric_version=0.86.0+1.20.1
18-
mixinextrasver=0.2.0-beta.9
18+
mixinextrasver=0.2.0-beta.9
19+
apoli_version=2.9.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package net.diamonddev.iliterallyonlyneedonelibgeneticsthingandtheresnowayimjijjingitforthatsohereitis;
2+
3+
import com.mojang.brigadier.StringReader;
4+
import com.mojang.brigadier.arguments.ArgumentType;
5+
import com.mojang.brigadier.context.CommandContext;
6+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
7+
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
8+
import com.mojang.brigadier.suggestion.Suggestions;
9+
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
10+
import net.minecraft.command.CommandSource;
11+
import net.minecraft.item.trim.ArmorTrimMaterial;
12+
import net.minecraft.item.trim.ArmorTrimPattern;
13+
import net.minecraft.registry.entry.RegistryEntry;
14+
15+
import java.util.ArrayList;
16+
import java.util.HashMap;
17+
import java.util.Optional;
18+
import java.util.concurrent.CompletableFuture;
19+
20+
public abstract class StringArrayListArgType implements ArgumentType<String> { // Originally from diamonddevv/ddv-games
21+
22+
private static SimpleCommandExceptionType COMMAND_EXCEPTION;
23+
24+
public abstract ArrayList<String> getArray();
25+
26+
public static final char[] acceptableChars = { // Mostly Generated with a Python Script -> https://github.com/diamonddevv/ddv-games/blob/1.19/datautils/camelCaseCharGen.py
27+
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', // Integers
28+
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', // Uppercase
29+
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', // Lowercase
30+
'_', '-', '.', '/', ':' // Symbols
31+
};
32+
33+
@Override
34+
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
35+
return CommandSource.suggestMatching(getArray(), builder);
36+
}
37+
38+
@Override
39+
public String parse(StringReader reader) throws CommandSyntaxException {
40+
int i = reader.getCursor();
41+
42+
while (reader.canRead() && validateChar(reader.peek())) {
43+
reader.skip();
44+
}
45+
46+
return reader.getString().substring(i, reader.getCursor());
47+
}
48+
49+
private static boolean validateChar(char c) {
50+
for (char test : acceptableChars) {
51+
if (test == c) {
52+
return true;
53+
}
54+
}
55+
return false;
56+
}
57+
58+
}

src/main/java/net/diamonddev/simpletrims/SimpleTrimsClient.java renamed to src/main/java/net/diamonddev/simpletrims/client/SimpleTrimsClient.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package net.diamonddev.simpletrims;
1+
package net.diamonddev.simpletrims.client;
22

3-
import net.diamonddev.simpletrims.data.PaletteEncoderDecoder;
4-
import net.diamonddev.simpletrims.network.SendAssetNamesToPalettePaths;
5-
import net.diamonddev.simpletrims.network.SendEncodedPalettes;
6-
import net.diamonddev.simpletrims.network.SendQuietReload;
7-
import net.diamonddev.simpletrims.network.SendTranslations;
3+
import net.diamonddev.simpletrims.common.data.PaletteEncoderDecoder;
4+
import net.diamonddev.simpletrims.common.network.SendAssetNamesToPalettePaths;
5+
import net.diamonddev.simpletrims.common.network.SendEncodedPalettes;
6+
import net.diamonddev.simpletrims.common.network.SendQuietReload;
7+
import net.diamonddev.simpletrims.common.network.SendTranslations;
88
import net.fabricmc.api.ClientModInitializer;
99
import net.fabricmc.api.EnvType;
1010
import net.fabricmc.api.Environment;

src/main/java/net/diamonddev/simpletrims/SimpleTrims.java renamed to src/main/java/net/diamonddev/simpletrims/common/SimpleTrims.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package net.diamonddev.simpletrims;
1+
package net.diamonddev.simpletrims.common;
22

3-
import net.diamonddev.simpletrims.data.SimpleTrimsDataLoader;
3+
import net.diamonddev.simpletrims.common.command.CmdInit;
4+
import net.diamonddev.simpletrims.common.data.SimpleTrimsDataLoader;
45
import net.fabricmc.api.ModInitializer;
56
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
67
import net.minecraft.resource.ResourceType;
@@ -19,20 +20,30 @@ public class SimpleTrims implements ModInitializer {
1920

2021
public static final SimpleTrimsDataLoader TRIM_DATA = new SimpleTrimsDataLoader();
2122

22-
private static final String[] MESSAGES = new String[] {
23+
private static final String[] GOOFY_MESSAGES = new String[] {
2324
"the design is very human",
2425
"don't try to send textures over packets worst mistake of my life",
25-
"this solves a very specific problem no one probably ever had",
26+
"this solves a very specific problem no one probably ever had",
2627
"what the hell is an encoded palette",
27-
"simple the trim"
28+
"niinku viulunkieli ?!",
29+
"now with apoli!",
30+
"trims but simpler",
31+
"simple the trim",
32+
"you're welcome, i fixed the extra space",
33+
//"try /trim!",
34+
"also try terraria!",
35+
"so i added some more of these",
36+
"try adding an emissive trim!",
37+
"@diamonddevv (discord, twitter) was here"
2838
};
2939

3040

3141
@Override
3242
public void onInitialize() {
3343
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(TRIM_DATA);
44+
// CmdInit.register(); // todo: fix ig lol
3445

35-
LOGGER.info("{} (initialized)", MESSAGES[new Random().nextInt(MESSAGES.length)]);
46+
LOGGER.info("{} (initialized simpletrims)", getGoofyMessage());
3647
}
3748

3849
public static Identifier id(String path) {
@@ -44,4 +55,8 @@ public static boolean testRegex(String input, String pattern) {
4455
Matcher matcher = compiledPattern.matcher(input);
4556
return matcher.matches();
4657
}
58+
59+
private static String getGoofyMessage() {
60+
return GOOFY_MESSAGES[new Random().nextInt(GOOFY_MESSAGES.length)];
61+
}
4762
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.diamonddev.simpletrims.common.command;
2+
3+
import com.mojang.brigadier.context.CommandContext;
4+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
5+
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
6+
import net.diamonddev.iliterallyonlyneedonelibgeneticsthingandtheresnowayimjijjingitforthatsohereitis.StringArrayListArgType;
7+
import net.minecraft.server.command.ServerCommandSource;
8+
import net.minecraft.text.Text;
9+
import net.minecraft.util.Identifier;
10+
11+
import java.util.ArrayList;
12+
13+
public class ArmorTrimMaterialArgument extends StringArrayListArgType {
14+
15+
private static final DynamicCommandExceptionType INVALID_EXCEPTION =
16+
new DynamicCommandExceptionType((id) -> Text.literal("Trim Material " + id + " was not found in register!"));
17+
18+
private ArmorTrimMaterialArgument() {}
19+
public static ArmorTrimMaterialArgument material() {return new ArmorTrimMaterialArgument();}
20+
21+
public static Identifier get(CommandContext<ServerCommandSource> context, String arg) throws CommandSyntaxException {
22+
String name = context.getArgument(arg, String.class);
23+
Identifier id = null;
24+
for (String str : CmdInit.MATERIAL.keySet()) {
25+
if (str.matches(name)) {
26+
id = new Identifier(str);
27+
}
28+
}
29+
30+
if (id == null) {
31+
throw INVALID_EXCEPTION.create(name);
32+
} else return id;
33+
}
34+
35+
@Override
36+
public ArrayList<String> getArray() {
37+
return new ArrayList<>(CmdInit.MATERIAL.keySet());
38+
}
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.diamonddev.simpletrims.common.command;
2+
3+
import com.mojang.brigadier.context.CommandContext;
4+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
5+
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
6+
import net.diamonddev.iliterallyonlyneedonelibgeneticsthingandtheresnowayimjijjingitforthatsohereitis.StringArrayListArgType;
7+
import net.minecraft.server.command.ServerCommandSource;
8+
import net.minecraft.text.Text;
9+
import net.minecraft.util.Identifier;
10+
11+
import java.util.ArrayList;
12+
13+
public class ArmorTrimPatternArgument extends StringArrayListArgType {
14+
15+
private static final DynamicCommandExceptionType INVALID_EXCEPTION =
16+
new DynamicCommandExceptionType((id) -> Text.literal("Trim Pattern " + id + " was not found in register!"));
17+
18+
private ArmorTrimPatternArgument() {}
19+
public static ArmorTrimPatternArgument pattern() {return new ArmorTrimPatternArgument();}
20+
21+
public static Identifier get(CommandContext<ServerCommandSource> context, String arg) throws CommandSyntaxException {
22+
String name = context.getArgument(arg, String.class);
23+
Identifier id = null;
24+
for (String str : CmdInit.PATTERN.keySet()) {
25+
if (str.matches(name)) {
26+
id = new Identifier(str);
27+
}
28+
}
29+
30+
if (id == null) {
31+
throw INVALID_EXCEPTION.create(name);
32+
} else return id;
33+
}
34+
35+
@Override
36+
public ArrayList<String> getArray() {
37+
return new ArrayList<>(CmdInit.PATTERN.keySet());
38+
}
39+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package net.diamonddev.simpletrims.common.command;
2+
3+
import net.diamonddev.simpletrims.common.SimpleTrims;
4+
import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry;
5+
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
6+
import net.fabricmc.fabric.api.event.registry.DynamicRegistrySetupCallback;
7+
import net.minecraft.command.argument.serialize.ConstantArgumentSerializer;
8+
import net.minecraft.item.trim.ArmorTrimMaterial;
9+
import net.minecraft.item.trim.ArmorTrimMaterials;
10+
import net.minecraft.item.trim.ArmorTrimPattern;
11+
import net.minecraft.item.trim.ArmorTrimPatterns;
12+
import net.minecraft.registry.DynamicRegistryManager;
13+
import net.minecraft.registry.RegistryKeys;
14+
import net.minecraft.registry.entry.RegistryEntry;
15+
import org.jetbrains.annotations.Nullable;
16+
17+
import java.util.HashMap;
18+
import java.util.Optional;
19+
20+
public class CmdInit {
21+
@Nullable
22+
private static DynamicRegistryManager DRM = null;
23+
24+
public static HashMap<String, Optional<RegistryEntry.Reference<ArmorTrimPattern>>> PATTERN = new HashMap<>();
25+
public static HashMap<String, Optional<RegistryEntry.Reference<ArmorTrimMaterial>>> MATERIAL = new HashMap<>();
26+
27+
28+
public static void register() {
29+
// callbacks
30+
DynamicRegistrySetupCallback.EVENT.register(registryView -> {
31+
DynamicRegistryManager drm = registryView.asDynamicRegistryManager();
32+
DRM = drm;
33+
34+
registryView.registerEntryAdded(RegistryKeys.TRIM_PATTERN, (rawId, id, object) -> {
35+
PATTERN.put(id.toString(), ArmorTrimPatterns.get(drm, object.templateItem().value().getDefaultStack()));
36+
});
37+
38+
registryView.registerEntryAdded(RegistryKeys.TRIM_MATERIAL, (rawId, id, object) -> {
39+
MATERIAL.put(id.toString(), ArmorTrimMaterials.get(drm, object.ingredient().value().getDefaultStack()));
40+
});
41+
});
42+
43+
// arg types
44+
ArgumentTypeRegistry.registerArgumentType(SimpleTrims.id("pattern_arg"), ArmorTrimPatternArgument.class, ConstantArgumentSerializer.of(ArmorTrimPatternArgument::pattern));
45+
ArgumentTypeRegistry.registerArgumentType(SimpleTrims.id("material_arg"), ArmorTrimMaterialArgument.class, ConstantArgumentSerializer.of(ArmorTrimMaterialArgument::material));
46+
47+
// command
48+
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
49+
TrimCommand.register(dispatcher, DRM); // oh boy this has no potential to go wrong at all!
50+
});
51+
}
52+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package net.diamonddev.simpletrims.common.command;
2+
3+
import com.mojang.brigadier.CommandDispatcher;
4+
import com.mojang.brigadier.LiteralMessage;
5+
import com.mojang.brigadier.context.CommandContext;
6+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
7+
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
8+
import net.minecraft.command.argument.EntityArgumentType;
9+
import net.minecraft.item.ItemStack;
10+
import net.minecraft.item.trim.ArmorTrim;
11+
import net.minecraft.registry.DynamicRegistryManager;
12+
import net.minecraft.registry.tag.ItemTags;
13+
import net.minecraft.server.command.ServerCommandSource;
14+
import net.minecraft.server.network.ServerPlayerEntity;
15+
import net.minecraft.util.Hand;
16+
import org.jetbrains.annotations.Nullable;
17+
18+
import java.util.Collection;
19+
20+
import static net.minecraft.server.command.CommandManager.argument;
21+
import static net.minecraft.server.command.CommandManager.literal;
22+
23+
public class TrimCommand {
24+
public static final DynamicCommandExceptionType IDK_BRO_IT_FAILED = new DynamicCommandExceptionType(obj ->
25+
new LiteralMessage("Failed to apply trim? pattern -> " + ((String[])obj)[0] + ", material -> " + ((String[])obj)[1]));
26+
27+
public static void register(CommandDispatcher<ServerCommandSource> dispatcher, @Nullable DynamicRegistryManager DRM) {
28+
dispatcher.register(
29+
literal("trim").requires(src -> src.hasPermissionLevel(4))
30+
.then(argument("players", EntityArgumentType.players())
31+
.then(argument("pattern", ArmorTrimPatternArgument.pattern())
32+
.then(argument("material", ArmorTrimMaterialArgument.material())
33+
.executes(ctx -> executeTrimHandheldArmor(ctx, DRM))
34+
)
35+
)
36+
)
37+
);
38+
}
39+
40+
private static int executeTrimHandheldArmor(CommandContext<ServerCommandSource> context, @Nullable DynamicRegistryManager DRM) throws CommandSyntaxException {
41+
Collection<ServerPlayerEntity> spes = EntityArgumentType.getPlayers(context, "players");
42+
var pattern = CmdInit.PATTERN.get(ArmorTrimPatternArgument.get(context, "pattern").toString());
43+
var material = CmdInit.MATERIAL.get(ArmorTrimMaterialArgument.get(context, "material").toString());
44+
45+
if (pattern.isPresent() && material.isPresent()) {
46+
spes.forEach(player -> {
47+
ItemStack mainstack = player.getStackInHand(Hand.MAIN_HAND).copy();
48+
if (mainstack.isIn(ItemTags.TRIMMABLE_ARMOR)) {
49+
ArmorTrim trim = new ArmorTrim(material.get(), pattern.get());
50+
if (ArmorTrim.apply(DRM, mainstack, trim)) {
51+
player.setStackInHand(Hand.MAIN_HAND, mainstack);
52+
};
53+
}
54+
});
55+
return 1;
56+
}
57+
58+
throw IDK_BRO_IT_FAILED.create(new String[] {
59+
ArmorTrimPatternArgument.get(context, "pattern").toString(),
60+
ArmorTrimMaterialArgument.get(context, "material").toString()
61+
});
62+
}
63+
}

src/main/java/net/diamonddev/simpletrims/data/PaletteEncoderDecoder.java renamed to src/main/java/net/diamonddev/simpletrims/common/data/PaletteEncoderDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.diamonddev.simpletrims.data;
1+
package net.diamonddev.simpletrims.common.data;
22

33
import net.minecraft.client.texture.NativeImage;
44
import net.minecraft.util.Identifier;

0 commit comments

Comments
 (0)