Configured
This commit is contained in:
@@ -63,6 +63,8 @@ dependencies {
|
||||
modImplementation include("eu.pb4:sgui:${project.sgui_version}")
|
||||
modImplementation include("xyz.nucleoid:server-translations-api:${project.server_translations_version}")
|
||||
|
||||
implementation include("com.electronwill.night-config:toml:${project.night_config_version}")
|
||||
|
||||
modCompileOnly "maven.modrinth:universal-graves:${project.universal_graves_version}"
|
||||
}
|
||||
|
||||
|
||||
@@ -20,4 +20,6 @@ org.gradle.jvmargs=-Xmx1G
|
||||
sgui_version=1.10.0+1.21.6
|
||||
server_translations_version=2.5.1+1.21.5
|
||||
|
||||
night_config_version=3.8.3
|
||||
|
||||
universal_graves_version=3.8.0+1.21.6
|
||||
|
||||
@@ -22,15 +22,16 @@ public class MinionMixinConfigPlugin implements IMixinConfigPlugin {
|
||||
@Override
|
||||
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
|
||||
if(mixinClassName.startsWith("io.github.skippyall.mixins.compat.universal_graves.")) {
|
||||
return FabricLoader.getInstance().isModLoaded("universal-graves");
|
||||
return MinionsConfig.get().compat.enableGravesCompat && FabricLoader.getInstance().isModLoaded("universal-graves");
|
||||
}
|
||||
if(mixinClassName.startsWith("io.github.skippyall.mixins.antimobcap.")) {
|
||||
return MinionsConfig.get().minion.enableMobCapHacks;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
|
||||
|
||||
}
|
||||
public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {}
|
||||
|
||||
@Override
|
||||
public List<String> getMixins() {
|
||||
@@ -38,12 +39,8 @@ public class MinionMixinConfigPlugin implements IMixinConfigPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
|
||||
|
||||
}
|
||||
public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {}
|
||||
|
||||
@Override
|
||||
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
|
||||
|
||||
}
|
||||
public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ public class Minions implements ModInitializer {
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
MinionsConfig.get();
|
||||
|
||||
MinionRegistration.register();
|
||||
|
||||
PolymerUtil.register();
|
||||
@@ -31,9 +33,7 @@ public class Minions implements ModInitializer {
|
||||
});
|
||||
});
|
||||
|
||||
CommandRegistrationCallback.EVENT.register((commandDispatcher, commandRegistryAccess, registrationEnvironment) -> {
|
||||
MinionsCommand.register(commandDispatcher);
|
||||
});
|
||||
CommandRegistrationCallback.EVENT.register(MinionsCommand::register);
|
||||
|
||||
/*ServerBlockEntityEvents.BLOCK_ENTITY_LOAD.register((blockEntity, world) -> {
|
||||
if(blockEntity instanceof MinionTriggerBlockEntity) {
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package io.github.skippyall.minions;
|
||||
|
||||
import com.electronwill.nightconfig.core.CommentedConfig;
|
||||
import com.electronwill.nightconfig.core.io.ParsingException;
|
||||
import com.electronwill.nightconfig.core.io.WritingException;
|
||||
import com.electronwill.nightconfig.core.io.WritingMode;
|
||||
import com.electronwill.nightconfig.core.serde.ObjectDeserializer;
|
||||
import com.electronwill.nightconfig.core.serde.ObjectSerializer;
|
||||
import com.electronwill.nightconfig.core.serde.SerdeException;
|
||||
import com.electronwill.nightconfig.core.serde.annotations.SerdeComment;
|
||||
import com.electronwill.nightconfig.core.serde.annotations.SerdeSkipDeserializingIf;
|
||||
import com.electronwill.nightconfig.toml.TomlFormat;
|
||||
import com.electronwill.nightconfig.toml.TomlParser;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static com.electronwill.nightconfig.core.serde.annotations.SerdeSkipDeserializingIf.SkipDeIf.IS_MISSING;
|
||||
|
||||
public class MinionsConfig {
|
||||
private static MinionsConfig INSTANCE;
|
||||
|
||||
@SerdeSkipDeserializingIf(IS_MISSING)
|
||||
public Minion minion = new Minion();
|
||||
|
||||
public static class Minion {
|
||||
@SerdeComment("The prefix for all minion names")
|
||||
@SerdeSkipDeserializingIf(IS_MISSING)
|
||||
public String minionPrefix = "+";
|
||||
|
||||
@SerdeComment("Makes minions not raise the mob cap if they can't spawn mobs.")
|
||||
@SerdeComment("Might cause incompatibilities.")
|
||||
@SerdeSkipDeserializingIf(IS_MISSING)
|
||||
public boolean enableMobCapHacks = true;
|
||||
}
|
||||
|
||||
@SerdeSkipDeserializingIf(IS_MISSING)
|
||||
public Compat compat = new Compat();
|
||||
|
||||
public static class Compat {
|
||||
@SerdeComment("Enables compat with Universal Graves, which allows everyone to pick up graves from minions")
|
||||
@SerdeSkipDeserializingIf(IS_MISSING)
|
||||
public boolean enableGravesCompat = true;
|
||||
}
|
||||
|
||||
private static Path getPath() {
|
||||
return FabricLoader.getInstance().getConfigDir().resolve(Minions.MOD_ID + ".toml");
|
||||
}
|
||||
|
||||
public static MinionsConfig get() {
|
||||
if(INSTANCE == null) {
|
||||
loadConfig();
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public static void loadConfig() {
|
||||
System.out.println("loading");
|
||||
try {
|
||||
CommentedConfig config = new TomlParser().parse(getPath(), (file, configFormat) -> {
|
||||
CommentedConfig defaultConfig = ObjectSerializer.standard().serializeFields(new MinionsConfig(), TomlFormat::newConfig);
|
||||
configFormat.createWriter().write(defaultConfig, file, WritingMode.REPLACE);
|
||||
return true;
|
||||
});
|
||||
|
||||
INSTANCE = ObjectDeserializer.standard().deserializeFields(config, MinionsConfig::new);
|
||||
} catch (SerdeException | ParsingException | WritingException e) {
|
||||
System.out.println("[minions] Error while reading config");
|
||||
e.printStackTrace();
|
||||
INSTANCE = new MinionsConfig();
|
||||
}
|
||||
}
|
||||
|
||||
/*public static void saveConfig() {
|
||||
try {
|
||||
CommentedConfig config = ObjectSerializer.standard().serializeFields(INSTANCE, TomlFormat::newConfig);
|
||||
new TomlWriter().write(config, getPath(), WritingMode.REPLACE);
|
||||
} catch (SerdeException | ParsingException | WritingException e) {
|
||||
System.out.println("[minions] Error while writing config");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
@@ -24,7 +24,7 @@ public class MinionArgument {
|
||||
|
||||
public static MinionData parse(MinecraftServer server, String argument) throws CommandSyntaxException {
|
||||
Optional<MinionData> data = Optional.empty();
|
||||
if(argument.startsWith(MinionProfileUtils.PREFIX)) {
|
||||
if(argument.startsWith(MinionProfileUtils.getPrefix())) {
|
||||
data = MinionPersistentState.get(server).getMinionWithName(argument);
|
||||
} else {
|
||||
try {
|
||||
|
||||
@@ -1,19 +1,26 @@
|
||||
package io.github.skippyall.minions.command;
|
||||
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import io.github.skippyall.minions.MinionsConfig;
|
||||
import net.minecraft.command.CommandRegistryAccess;
|
||||
import net.minecraft.server.command.CommandManager;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
|
||||
import static net.minecraft.server.command.CommandManager.literal;
|
||||
|
||||
public class MinionsCommand {
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
|
||||
dispatcher.register(
|
||||
literal("minions")
|
||||
public static void register(CommandDispatcher<ServerCommandSource> dispatcher, CommandRegistryAccess access, CommandManager.RegistrationEnvironment environment) {
|
||||
LiteralArgumentBuilder<ServerCommandSource> builder = literal("minions")
|
||||
.then(SpawnSubcommand.SPAWN)
|
||||
.then(MobCapDebugSubcommand.MOB_CAP_DEBUG)
|
||||
.then(ListSubcommand.LIST)
|
||||
.then(ListSubcommand.LIST);
|
||||
|
||||
if(MinionsConfig.get().minion.enableMobCapHacks) {
|
||||
builder.then(MobCapDebugSubcommand.MOB_CAP_DEBUG);
|
||||
}
|
||||
|
||||
dispatcher.register(
|
||||
builder
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ package io.github.skippyall.minions.command;
|
||||
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor;
|
||||
import io.github.skippyall.minions.mixins.antimobcap.ServerChunkManagerAccessor;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.world.ChunkLevelManager;
|
||||
|
||||
@@ -89,7 +89,7 @@ public class MinionLookGui extends SimpleGui {
|
||||
public void openRenameGui(ServerPlayerEntity player, ItemStack minionItem) {
|
||||
TextInput.inputSync(player, Text.translatable("minions.gui.look.rename.title"), "Minion", name -> MinionProfileUtils.checkMinionNameWithoutPrefix(player.getServer(), name))
|
||||
.thenAccept(name -> {
|
||||
MinionItem.setData(player.getServer(), getData().withName(MinionProfileUtils.PREFIX + name), minionItem);
|
||||
MinionItem.setData(player.getServer(), getData().withName(MinionProfileUtils.getPrefix() + name), minionItem);
|
||||
open();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.github.skippyall.minions.minion;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.PropertyMap;
|
||||
import com.mojang.brigadier.StringReader;
|
||||
import io.github.skippyall.minions.MinionsConfig;
|
||||
import io.github.skippyall.minions.gui.input.Result;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.text.Text;
|
||||
@@ -13,7 +14,9 @@ import java.util.UUID;
|
||||
import static io.github.skippyall.minions.Minions.LOGGER;
|
||||
|
||||
public class MinionProfileUtils {
|
||||
public static final String PREFIX = "+";
|
||||
public static String getPrefix() {
|
||||
return MinionsConfig.get().minion.minionPrefix;
|
||||
}
|
||||
|
||||
public static GameProfile makeNewMinionProfile(UUID uuidMinion, String username, PropertyMap skin) {
|
||||
if(uuidMinion == null) {
|
||||
@@ -35,15 +38,15 @@ public class MinionProfileUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if((PREFIX + name).length() > 16) {
|
||||
if((getPrefix() + name).length() > 16) {
|
||||
return new Result.Error<>(Text.translatable("minions.generic.name.too_long"));
|
||||
}
|
||||
|
||||
if(!StringHelper.isValidPlayerName(PREFIX + name)) {
|
||||
if(!StringHelper.isValidPlayerName(getPrefix() + name)) {
|
||||
return new Result.Error<>(Text.translatable("minions.generic.name.invalid"));
|
||||
}
|
||||
|
||||
if(MinionPersistentState.get(server).isMinionNameTaken(PREFIX + name)) {
|
||||
if(MinionPersistentState.get(server).isMinionNameTaken(getPrefix() + name)) {
|
||||
return new Result.Error<>(Text.translatable("minions.generic.name.taken"));
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package io.github.skippyall.minions.mixinhelper;
|
||||
package io.github.skippyall.minions.mixinhelper.antimobcap;
|
||||
|
||||
public interface ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor {
|
||||
void minions$markAsMinionless();
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package io.github.skippyall.minions.mixinhelper;
|
||||
package io.github.skippyall.minions.mixinhelper.antimobcap;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectSet;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
+2
-3
@@ -1,13 +1,12 @@
|
||||
package io.github.skippyall.minions.mixins.antimobcap;
|
||||
|
||||
import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ByteMap;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectSet;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ChunkLevelManager;
|
||||
import net.minecraft.server.world.ChunkTicketManager;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package io.github.skippyall.minions.mixins.antimobcap;
|
||||
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectSet;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
|
||||
+2
-3
@@ -1,9 +1,8 @@
|
||||
package io.github.skippyall.minions.mixins.antimobcap;
|
||||
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.ChunkLevelManagerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManager$DistanceFromNearestPlayerTrackerAccessor;
|
||||
import io.github.skippyall.minions.mixinhelper.antimobcap.ChunkLevelManagerAccessor;
|
||||
import net.minecraft.server.world.ChunkLevelManager;
|
||||
import net.minecraft.server.world.ChunkTicketManager;
|
||||
import net.minecraft.server.world.ServerChunkManager;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
"item.minions.minion": "Minion",
|
||||
"item.minions.basic_upgrade_base": "Basic Upgrade Base",
|
||||
"item.minions.advanced_upgrade_base": "Advanced Upgrade Base",
|
||||
"item.minions.reference": "Reference",
|
||||
"item.minions.clipboard": "Clipboard",
|
||||
|
||||
"block.minions.minion_trigger": "Minion Trigger",
|
||||
|
||||
|
||||
Reference in New Issue
Block a user