add metadata
ci/woodpecker/push/jfmod Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2023-03-12 21:34:52 +01:00
parent 0aa1b38e93
commit b4b592509b
Signed by: Johannes
GPG Key ID: E76429612C2929F4
8 changed files with 42 additions and 11 deletions

1
.woodpecker.yml Normal file
View File

@ -0,0 +1 @@
#link https://pages.frohnmeyer-wds.de/scripts/jfmod.yml

35
README.md Normal file
View File

@ -0,0 +1,35 @@
Better-Whitelist provides a basic whitelist system for your server that you can adapt to your use case.
The mod is required both on the server and any clients connecting to the server.
The whitelist is configured using [μScript](https://git.frohnmeyer-wds.de/Johannes/java-commons/src/branch/master/muscript), but you don't have to be good at programming to use this mod.
A config file with some additional details will be created when you first start your server with the mod.
A simple config for Better-Whitelist could look as follows (please note that you'd probably have to add exceptions for client-side mods with optional server-side components when using this):
```
sharedMods = mods::values()::filter({ v -> v.environment != 'server' })::map({ v -> { id = v.id, version = v.version } })
// ensure the client has the correct version of every non-serverside mod on the server
assert(challenge({ arg ->
arg::allMatch({ v -> mods::values()::anyMatch({ m -> v.id == m.id & v.version == m.version }) })
}, sharedMods))
// ensure the client has no additional mods that would be required on the server
assert(challenge({ arg ->
clientSideMods = mods::values()::filter({ v -> v.environment != 'client' })
clientSideMods::allMatch({ v -> arg::anyMatch({ m -> v.id == m.id & v.version == m.version }) })
}, sharedMods))
// filter resource packs for X-Ray packs
bannedWords = listOf('xray', 'x-ray', 'cheat')
assert(!challenge({ ->
resourcePacks::map({ pack -> pack.name || ' ' || pack.displayName || ' ' || pack.description })
})::anyMatch({ v -> bannedWords::anyMatch({ word -> v::contains(word) }) }))
```
The following things are available to your scripts:
- All methods from the μScript standard library
- `resourcePacks` (client only): a list of resource packs, each of which has a `name`, `displayName` and `description`
- `println('message')` (both): a function for debugging
- `mods` (both): a list of loaded mods with the same fields as the result of `mod()`
- `mod('id')` (both): information about a specific mod (or null): `id`, `name`, `description`, `authors` (list of strings), `contributors` (list of strings), `version`, `environment` (either `client`, `server` or `*`), `license`, `contact` (same as FMJ), `depends` (list of strings)
- `assert(bool)` (server): assert that something is true and kick the player if it's not (optionally, add a message as the second parameter)
- `challenge({->closure}, additional arguments...)` (server): send a closure to the client to be executed there. The arguments may contain other closures.
- `user` (server): information about the user trying to log in, namely their `id` and `name`

View File

@ -8,10 +8,9 @@ dependencies {
modImplementation(fabricApi.module("fabric-networking-api-v1", prop("fabric_version"))) modImplementation(fabricApi.module("fabric-networking-api-v1", prop("fabric_version")))
modImplementation(fabricApi.module("fabric-command-api-v2", prop("fabric_version"))) modImplementation(fabricApi.module("fabric-command-api-v2", prop("fabric_version")))
include(modImplementation("io.gitlab.jfronny:muscript:${prop("muscript_version")}")!!) include(modImplementation("io.gitlab.jfronny:muscript:${prop("muscript_version")}")!!)
modImplementation("io.gitlab.jfronny.libjf:libjf-config-core-v1:${prop("libjf_version")}") modImplementation("io.gitlab.jfronny.libjf:libjf-base:${prop("libjf_version")}")
// Dev env // Dev env
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-config-ui-tiny-v1:${prop("libjf_version")}")
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${prop("libjf_version")}") modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${prop("libjf_version")}")
modLocalRuntime("com.terraformersmc:modmenu:${prop("modmenu_version")}") modLocalRuntime("com.terraformersmc:modmenu:${prop("modmenu_version")}")
} }

View File

@ -6,12 +6,8 @@ loader_version=0.14.17
maven_group=io.gitlab.jfronny maven_group=io.gitlab.jfronny
archives_base_name=better-whitelist archives_base_name=better-whitelist
#modrinth_id=google-chat modrinth_id=better-whitelist
#modrinth_required_dependencies=libjf modrinth_required_dependencies=libjf, fabric-api
#modrinth_optional_dependencies=modmenu
#curseforge_id=574331
#curseforge_required_dependencies=libjf
#curseforge_optional_dependencies=modmenu
libjf_version=3.5.0-SNAPSHOT libjf_version=3.5.0-SNAPSHOT
fabric_version=0.75.3+1.19.4 fabric_version=0.75.3+1.19.4

View File

@ -1 +0,0 @@
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

View File

@ -38,7 +38,7 @@ public class BetterWhitelistClient implements ClientModInitializer {
int paramSize = buf.readInt(); int paramSize = buf.readInt();
List<Dynamic<?>> params = new LinkedList<>(); List<Dynamic<?>> params = new LinkedList<>();
for (int i = 0; i < paramSize; i++) { for (int i = 0; i < paramSize; i++) {
params.add(Dynamic.deserialize(buf.readString())); params.add(Parser.parse(buf.readString()).asDynamicExpr().get(fork));
} }
String resultString = Dynamic.serialize(script.call(DFinal.of(params))); String resultString = Dynamic.serialize(script.call(DFinal.of(params)));
BetterWhitelist.LOG.info("Sending result: " + resultString); BetterWhitelist.LOG.info("Sending result: " + resultString);

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@ -32,6 +32,7 @@
"fabricloader": ">=0.14.17", "fabricloader": ">=0.14.17",
"minecraft": "*", "minecraft": "*",
"fabric-networking-api-v1": "*", "fabric-networking-api-v1": "*",
"fabric-command-api-v2": "*" "fabric-command-api-v2": "*",
"libjf-base": "*"
} }
} }