forked from BRNSystems/RegexingHoppers
feat: add readme and add 3 commands for pen test regex
This commit is contained in:
parent
fd53a7b3cb
commit
45de93c38c
71
README.md
Normal file
71
README.md
Normal file
@ -0,0 +1,71 @@
|
||||
# RegexingHoppers
|
||||
|
||||
RegexingHoppers is a Minecraft mod that enhances the functionality of hoppers by allowing the use of regular expressions (regex) to filter items passing through them. This mod adds a new layer of customization and control to item sorting and transportation systems in Minecraft.
|
||||
|
||||
## Features
|
||||
|
||||
- Use custom names for hoppers as regex patterns to filter items
|
||||
- Three new commands for testing and managing regex patterns
|
||||
- Configurable permission levels for commands
|
||||
|
||||
## Installation
|
||||
|
||||
1. Make sure you have Fabric Loader installed
|
||||
2. Download the latest version of RegexingHoppers from the releases page
|
||||
3. Place the downloaded .jar file in your Minecraft mods folder
|
||||
4. Launch Minecraft with the Fabric profile
|
||||
|
||||
## Usage
|
||||
|
||||
### Regex Filtering
|
||||
|
||||
To use regex filtering on a hopper:
|
||||
|
||||
1. Rename the hopper using an anvil with your desired regex pattern
|
||||
2. Place the renamed hopper in your item system
|
||||
3. Items matching the regex pattern will be allowed through, while others will be filtered out
|
||||
|
||||
### Commands
|
||||
|
||||
RegexingHoppers adds the following commands:
|
||||
|
||||
1. `/regexhoppers test <regex>`: Test a regex pattern against all item names
|
||||
2. `/regexhoppers list <regex>`: List all items matching the given regex pattern
|
||||
3. `/regexhoppers hand`: Display the name of the item in your main hand
|
||||
|
||||
By default, all players can use these commands. You can adjust the permission levels in the configuration file.
|
||||
|
||||
## Configuration
|
||||
|
||||
The mod includes a configuration file (`regexhoppers.json`) located in the `config` folder. You can adjust the permission levels required for each command:
|
||||
|
||||
```json
|
||||
{
|
||||
"permissions": [
|
||||
{
|
||||
"name": "regexhoppers.command.test",
|
||||
"level": 0
|
||||
},
|
||||
{
|
||||
"name": "regexhoppers.command.list",
|
||||
"level": 0
|
||||
},
|
||||
{
|
||||
"name": "regexhoppers.command.hand",
|
||||
"level": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Adjust the `level` value for each command to set the required permission level. A level of 0 allows all players to use the command.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter any issues or have any questions, please open an issue on our GitHub repository.
|
||||
|
||||
Happy filtering!
|
@ -6,6 +6,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import systems.brn.regexinghoppers.commands.RegexHoppersCommands;
|
||||
import systems.brn.regexinghoppers.config.ModConfig;
|
||||
|
||||
public class RegexingHoppers implements ModInitializer {
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger("RegexingHoppers");
|
||||
@ -15,6 +16,7 @@ public class RegexingHoppers implements ModInitializer {
|
||||
// This code runs as soon as Minecraft is in a mod-load-ready state.
|
||||
// However, some things (like resources) may still be uninitialized.
|
||||
// Proceed with mild caution.
|
||||
ModConfig.getInstance();
|
||||
LOGGER.debug("RegexingHoppers initialized!");
|
||||
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
|
||||
RegexHoppersCommands.register(dispatcher);
|
||||
|
@ -3,10 +3,13 @@ package systems.brn.regexinghoppers.commands;
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import systems.brn.regexinghoppers.config.ModConfig;
|
||||
import systems.brn.regexinghoppers.util.Tools;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.registry.Registries;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
|
||||
@ -22,12 +25,17 @@ public class RegexHoppersCommands {
|
||||
// TODO: Add config file for permissions system
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
|
||||
dispatcher.register(literal("regexhoppers")
|
||||
.then(literal("match")
|
||||
.then(literal("test")
|
||||
.requires(source -> source.hasPermissionLevel(ModConfig.getInstance().getTestPermission().level))
|
||||
.then(argument("regex", StringArgumentType.greedyString())
|
||||
.executes(context -> executeMatch(context.getSource(), StringArgumentType.getString(context, "regex")))))
|
||||
.then(literal("list")
|
||||
.requires(source -> source.hasPermissionLevel(ModConfig.getInstance().getListPermission().level))
|
||||
.then(argument("regex", StringArgumentType.greedyString())
|
||||
.executes(context -> executeList(context.getSource(), StringArgumentType.getString(context, "regex"))))));
|
||||
.executes(context -> executeList(context.getSource(), StringArgumentType.getString(context, "regex")))))
|
||||
.then(literal("hand")
|
||||
.requires(source -> source.hasPermissionLevel(ModConfig.getInstance().getHandPermission().level))
|
||||
.executes(context -> executeHand(context.getSource()))));
|
||||
}
|
||||
|
||||
private static int executeMatch(ServerCommandSource source, final String regexString) {
|
||||
@ -68,10 +76,23 @@ public class RegexHoppersCommands {
|
||||
final int total = count;
|
||||
final String totalAllMatchs = allMatchs;
|
||||
|
||||
source.sendFeedback(() -> Text.literal("Full match list: \n" + totalAllMatchs + regexString + " match with " + total + " items: \n"), false);
|
||||
source.sendFeedback(() -> Text.literal("Full match list: \n" + totalAllMatchs + regexString + " match with " + total + " items\n"), false);
|
||||
return 1;
|
||||
} catch (PatternSyntaxException e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private static int executeHand(ServerCommandSource source) {
|
||||
ServerPlayerEntity player = source.getPlayer();
|
||||
if (player != null) {
|
||||
ItemStack heldItem = player.getMainHandStack();
|
||||
if(heldItem != null) {
|
||||
source.sendFeedback(() -> Text.literal("Your main hand contain: '" + Tools.getNameOf(heldItem.getItem()) + "'" ), false);
|
||||
return 1;
|
||||
}
|
||||
source.sendFeedback(() -> Text.literal("No item found"), false);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package systems.brn.regexinghoppers.config;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ModConfig {
|
||||
private static final String CONFIG_FILE = "regexhoppers.json";
|
||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
private static String[] permissionsName = {
|
||||
"regexhoppers.command.test",
|
||||
"regexhoppers.command.list",
|
||||
"regexhoppers.command.hand"
|
||||
};
|
||||
|
||||
public ArrayList<PermissionEntry> permissions;
|
||||
|
||||
private static ModConfig INSTANCE;
|
||||
|
||||
public static ModConfig getInstance() {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = load();
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
private static ModConfig load() {
|
||||
Path configPath = FabricLoader.getInstance().getConfigDir().resolve(CONFIG_FILE);
|
||||
if (configPath.toFile().exists()) {
|
||||
try (Reader reader = new FileReader(configPath.toFile())) {
|
||||
ModConfig mconfig = GSON.fromJson(reader, ModConfig.class);
|
||||
mconfig.checkConfigFile();
|
||||
return mconfig;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
ModConfig config = new ModConfig();
|
||||
config.save();
|
||||
return config;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
// Should only run on the first time to generate the config file, or if file isn't loadable / broken
|
||||
this.permissions = new ArrayList<>();
|
||||
for (String permission : permissionsName) {
|
||||
this.permissions.add(new PermissionEntry(permission, 0));
|
||||
}
|
||||
|
||||
Path configPath = FabricLoader.getInstance().getConfigDir().resolve(CONFIG_FILE);
|
||||
try (Writer writer = new FileWriter(configPath.toFile())) {
|
||||
GSON.toJson(this, writer);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkConfigFile() {
|
||||
if (this.permissions.size() < permissionsName.length) {
|
||||
this.save();
|
||||
}
|
||||
}
|
||||
|
||||
private PermissionEntry getIndex(int index) {
|
||||
this.checkConfigFile();
|
||||
return this.permissions.get(index);
|
||||
}
|
||||
|
||||
public PermissionEntry getTestPermission() {
|
||||
return this.getIndex(0);
|
||||
}
|
||||
|
||||
public PermissionEntry getListPermission() {
|
||||
return this.permissions.get(1);
|
||||
}
|
||||
|
||||
public PermissionEntry getHandPermission() {
|
||||
return this.permissions.get(2);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package systems.brn.regexinghoppers.config;
|
||||
|
||||
public class PermissionEntry {
|
||||
public String name;
|
||||
public int level;
|
||||
|
||||
public PermissionEntry(String name, int level) {
|
||||
this.name = name;
|
||||
this.level = level;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user