Files
CustomNPC-Plus/src/main/java/noppes/npcs/CustomNpcs.java
T

497 lines
20 KiB
Java
Raw Normal View History

2018-09-13 12:03:28 -04:00
package noppes.npcs;
2024-02-15 17:54:28 -05:00
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
2018-09-13 12:03:28 -04:00
import cpw.mods.fml.common.Mod.EventHandler;
2024-02-15 17:54:28 -05:00
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
2018-09-13 12:03:28 -04:00
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
2025-01-28 13:39:46 -05:00
import cpw.mods.fml.relauncher.Side;
2025-12-20 01:10:26 +01:00
import cpw.mods.fml.relauncher.SideOnly;
2018-09-13 12:03:28 -04:00
import foxz.command.CommandNoppes;
2025-12-13 18:21:36 +01:00
import io.github.somehussar.janinoloader.api.IDynamicCompiler;
import io.github.somehussar.janinoloader.api.IDynamicCompilerBuilder;
2025-01-29 13:20:04 -05:00
import kamkeel.npcs.addon.AddonManager;
import kamkeel.npcs.command.CommandKamkeel;
import kamkeel.npcs.command.profile.CommandProfile;
2025-03-13 17:14:45 -04:00
import kamkeel.npcs.controllers.AttributeController;
2025-01-29 13:20:04 -05:00
import kamkeel.npcs.controllers.ProfileController;
2025-11-05 16:52:38 -05:00
import kamkeel.npcs.controllers.SyncController;
2026-01-24 02:35:26 -05:00
import kamkeel.npcs.controllers.TelegraphController;
2026-02-18 04:02:51 -05:00
import kamkeel.npcs.controllers.AbilityController;
2025-02-27 15:54:42 -05:00
import kamkeel.npcs.controllers.data.profile.CNPCData;
2025-01-29 13:20:04 -05:00
import kamkeel.npcs.developer.Developer;
2025-01-29 15:04:19 -05:00
import kamkeel.npcs.network.PacketHandler;
import kamkeel.npcs.util.BukkitUtil;
2018-09-13 12:03:28 -04:00
import net.minecraft.block.Block;
import net.minecraft.block.BlockIce;
import net.minecraft.block.BlockLeavesBase;
import net.minecraft.block.BlockVine;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.MinecraftForge;
2025-07-23 14:22:52 -04:00
import nikedemos.markovnames.generators.MarkovAncientGreek;
import nikedemos.markovnames.generators.MarkovAztec;
import nikedemos.markovnames.generators.MarkovCustomNPCsClassic;
import nikedemos.markovnames.generators.MarkovGenerator;
import nikedemos.markovnames.generators.MarkovJapanese;
import nikedemos.markovnames.generators.MarkovOldNorse;
import nikedemos.markovnames.generators.MarkovRoman;
import nikedemos.markovnames.generators.MarkovSaami;
import nikedemos.markovnames.generators.MarkovSlavic;
import nikedemos.markovnames.generators.MarkovSpanish;
import nikedemos.markovnames.generators.MarkovWelsh;
2023-07-19 11:17:11 -04:00
import noppes.npcs.compat.PixelmonHelper;
2023-01-07 00:21:08 -05:00
import noppes.npcs.config.ConfigMain;
2023-01-12 21:33:06 -05:00
import noppes.npcs.config.LoadConfiguration;
2023-01-07 18:07:23 -05:00
import noppes.npcs.config.legacy.LegacyConfig;
2025-07-23 14:22:52 -04:00
import noppes.npcs.controllers.AnimationController;
2026-01-23 21:53:12 -05:00
import noppes.npcs.controllers.AuctionController;
2025-07-23 14:22:52 -04:00
import noppes.npcs.controllers.BankController;
import noppes.npcs.controllers.ChunkController;
import noppes.npcs.controllers.CustomEffectController;
import noppes.npcs.controllers.DialogController;
import noppes.npcs.controllers.FactionController;
import noppes.npcs.controllers.GlobalDataController;
import noppes.npcs.controllers.LinkedItemController;
import noppes.npcs.controllers.LinkedNpcController;
import noppes.npcs.controllers.MagicController;
import noppes.npcs.controllers.PlayerDataController;
import noppes.npcs.controllers.QuestController;
import noppes.npcs.controllers.RecipeController;
import noppes.npcs.controllers.ScriptController;
2026-01-11 17:15:13 -05:00
import noppes.npcs.controllers.ScriptHookController;
2025-07-23 14:22:52 -04:00
import noppes.npcs.controllers.ServerCloneController;
import noppes.npcs.controllers.ServerTagMapController;
import noppes.npcs.controllers.SpawnController;
import noppes.npcs.controllers.TagController;
import noppes.npcs.controllers.TransportController;
2018-09-13 12:03:28 -04:00
import noppes.npcs.enchants.EnchantInterface;
2025-07-23 14:22:52 -04:00
import noppes.npcs.entity.EntityChairMount;
import noppes.npcs.entity.EntityCustomNpc;
import noppes.npcs.entity.EntityMagicProjectile;
import noppes.npcs.entity.EntityNPCGolem;
import noppes.npcs.entity.EntityNpcCrystal;
import noppes.npcs.entity.EntityNpcDragon;
import noppes.npcs.entity.EntityNpcPony;
import noppes.npcs.entity.EntityNpcSlime;
import noppes.npcs.entity.EntityProjectile;
2026-01-25 20:39:01 -05:00
import kamkeel.npcs.entity.EntityAbilityOrb;
import kamkeel.npcs.entity.EntityAbilityDisc;
import kamkeel.npcs.entity.EntityAbilityLaser;
import kamkeel.npcs.entity.EntityAbilityBeam;
import kamkeel.npcs.entity.EntityAbilitySweeper;
2026-02-12 13:55:56 -05:00
import kamkeel.npcs.entity.EntityAbilityZone;
import kamkeel.npcs.entity.EntityEnergyDome;
import kamkeel.npcs.entity.EntityEnergyPanel;
import kamkeel.npcs.entity.EntityEnergySlicer;
2025-07-23 14:22:52 -04:00
import noppes.npcs.entity.old.EntityNPCDwarfFemale;
import noppes.npcs.entity.old.EntityNPCDwarfMale;
import noppes.npcs.entity.old.EntityNPCElfFemale;
import noppes.npcs.entity.old.EntityNPCElfMale;
import noppes.npcs.entity.old.EntityNPCEnderman;
import noppes.npcs.entity.old.EntityNPCFurryFemale;
import noppes.npcs.entity.old.EntityNPCFurryMale;
import noppes.npcs.entity.old.EntityNPCHumanFemale;
import noppes.npcs.entity.old.EntityNPCHumanMale;
import noppes.npcs.entity.old.EntityNPCOrcFemale;
import noppes.npcs.entity.old.EntityNPCOrcMale;
import noppes.npcs.entity.old.EntityNPCVillager;
import noppes.npcs.entity.old.EntityNpcEnderchibi;
import noppes.npcs.entity.old.EntityNpcMonsterFemale;
import noppes.npcs.entity.old.EntityNpcMonsterMale;
import noppes.npcs.entity.old.EntityNpcNagaFemale;
import noppes.npcs.entity.old.EntityNpcNagaMale;
import noppes.npcs.entity.old.EntityNpcSkeleton;
import noppes.npcs.scripted.NpcAPI;
2025-12-20 01:10:26 +01:00
import somehussar.janino.AdvancedClassFilter;
import java.io.File;
2025-12-20 01:10:26 +01:00
import java.util.HashSet;
import java.util.Set;
2025-12-20 01:10:26 +01:00
import java.util.function.Consumer;
2018-09-13 12:03:28 -04:00
2026-02-16 01:49:57 -05:00
@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.11-beta3")
2018-09-13 12:03:28 -04:00
public class CustomNpcs {
@SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy")
public static CommonProxy proxy;
2023-01-07 00:21:08 -05:00
public static File Dir;
2018-09-13 12:03:28 -04:00
2023-01-07 00:21:08 -05:00
private static int NewEntityStartId = 0;
public static long ticks;
2018-09-13 12:03:28 -04:00
public static CustomNpcs instance;
public static boolean FreezeNPCs = false;
public static final MarkovGenerator[] MARKOV_GENERATOR = new MarkovGenerator[10];
2022-11-07 01:49:54 -05:00
public static boolean InitIgnore = false;
public static boolean TickIgnore = false;
public static boolean InteractIgnore = false;
public static boolean DialogIgnore = false;
public static boolean DamagedIgnore = false;
public static boolean KilledIgnore = false;
public static boolean AttackIgnore = false;
public static boolean TargetIgnore = false;
public static boolean CollideIgnore = false;
public static boolean KillsIgnore = false;
public static boolean DialogCloseIgnore = false;
public static boolean TimerIgnore = false;
2023-01-07 00:21:08 -05:00
public static String configPath;
2023-01-07 18:07:23 -05:00
public static String legacyPath;
public static boolean legacyExist;
public static LegacyConfig legacyConfig;
2023-01-07 00:21:08 -05:00
public static MinecraftServer Server;
2025-12-20 01:21:35 +01:00
private static IDynamicCompiler globalJaninoCompiler;
2025-12-20 01:10:26 +01:00
@SideOnly(Side.CLIENT)
private static IDynamicCompiler clientJaninoCompiler;
@SideOnly(Side.CLIENT)
2026-02-01 03:39:03 +01:00
private static Set<Consumer<AdvancedClassFilter>> clientClassFilterConsumer;
static {
if (FMLCommonHandler.instance().getEffectiveSide().isClient()) {
clientClassFilterConsumer = new HashSet<>();
}
}
2025-12-20 01:10:26 +01:00
@SideOnly(Side.CLIENT)
public static void addClassesToClientClassFilter(Consumer<AdvancedClassFilter> consumer) {
clientClassFilterConsumer.add(consumer);
}
2018-09-13 12:03:28 -04:00
public CustomNpcs() {
instance = this;
}
2025-12-13 18:21:36 +01:00
public static IDynamicCompiler getDynamicCompiler() {
2025-12-20 01:21:35 +01:00
if (globalJaninoCompiler == null) {
globalJaninoCompiler = IDynamicCompilerBuilder.createBuilder().getCompiler();
2025-12-13 18:21:36 +01:00
}
2025-12-20 01:21:35 +01:00
return globalJaninoCompiler;
2025-12-13 18:21:36 +01:00
}
2025-12-20 01:10:26 +01:00
@SideOnly(Side.CLIENT)
public static IDynamicCompiler getClientCompiler() {
if (clientJaninoCompiler == null) {
AdvancedClassFilter filter = new AdvancedClassFilter()
.addRegexes("noppes\\.npcs\\.api\\..*")
.banRegexes(".*ClassLoader.*",
2026-01-03 02:54:08 +01:00
".*File*.",
"java\\.lang\\.reflect\\..*");
2025-12-20 01:10:26 +01:00
for (Consumer<AdvancedClassFilter> consumer : clientClassFilterConsumer) {
consumer.accept(filter);
}
clientJaninoCompiler = IDynamicCompilerBuilder.createBuilder().setClassFilter(filter).getCompiler();
}
return clientJaninoCompiler;
}
2018-09-13 12:03:28 -04:00
@EventHandler
public void load(FMLPreInitializationEvent ev) {
2025-01-29 18:25:34 -05:00
PacketHandler.Instance = new PacketHandler();
2018-09-13 12:03:28 -04:00
MinecraftServer server = MinecraftServer.getServer();
String dir = "";
if (server != null) {
dir = new File(".").getAbsolutePath();
} else {
dir = Minecraft.getMinecraft().mcDataDir.getAbsolutePath();
}
Dir = new File(dir, "customnpcs");
Dir.mkdir();
2023-01-07 18:07:23 -05:00
configPath = ev.getModConfigurationDirectory() + File.separator + "CustomNpcPlus";
legacyPath = ev.getModConfigurationDirectory() + "/CustomNpcs.cfg";
File configDir = new File(configPath);
2025-03-13 17:14:45 -04:00
if (!configDir.exists()) {
2023-01-07 18:07:23 -05:00
// Convert Legacy Config to New Config if NO Config Folder Exists
File legacyFile = new File(legacyPath);
2025-03-13 17:14:45 -04:00
if (legacyFile.exists()) {
2023-02-28 03:32:35 -05:00
System.out.println("Loading Legacy Config");
2023-01-07 18:07:23 -05:00
legacyExist = true;
legacyConfig = new LegacyConfig();
legacyConfig.init();
}
}
configPath += File.separator;
2023-01-07 00:21:08 -05:00
LoadConfiguration.init(configPath);
2022-11-07 01:49:54 -05:00
2018-09-13 12:03:28 -04:00
EnchantInterface.load();
CustomItems.load();
2022-11-07 01:49:54 -05:00
2018-09-13 12:03:28 -04:00
proxy.load();
NetworkRegistry.INSTANCE.registerGuiHandler(this, proxy);
MinecraftForge.EVENT_BUS.register(new ServerEventsHandler());
2018-09-13 12:03:28 -04:00
MinecraftForge.EVENT_BUS.register(new ScriptController());
2026-01-11 17:15:13 -05:00
new ScriptHookController();
2018-09-13 12:03:28 -04:00
ScriptPlayerEventHandler scriptPlayerEventHandler = new ScriptPlayerEventHandler();
MinecraftForge.EVENT_BUS.register(scriptPlayerEventHandler);
FMLCommonHandler.instance().bus().register(scriptPlayerEventHandler);
2022-01-10 12:37:26 -06:00
ScriptForgeEventHandler forgeEventHandler = (new ScriptForgeEventHandler()).registerForgeEvents();
MinecraftForge.EVENT_BUS.register(forgeEventHandler);
FMLCommonHandler.instance().bus().register(forgeEventHandler);
ScriptItemEventHandler scriptItemEventHandler = new ScriptItemEventHandler();
MinecraftForge.EVENT_BUS.register(scriptItemEventHandler);
FMLCommonHandler.instance().bus().register(scriptItemEventHandler);
2022-11-07 01:49:54 -05:00
FMLCommonHandler.instance().bus().register(new ServerTickHandler());
2018-09-13 12:03:28 -04:00
registerNpc(EntityNPCHumanMale.class, "npchumanmale");
registerNpc(EntityNPCVillager.class, "npcvillager");
registerNpc(EntityNpcPony.class, "npcpony");
registerNpc(EntityNPCHumanFemale.class, "npchumanfemale");
registerNpc(EntityNPCDwarfMale.class, "npcdwarfmale");
registerNpc(EntityNPCFurryMale.class, "npcfurrymale");
registerNpc(EntityNpcMonsterMale.class, "npczombiemale");
registerNpc(EntityNpcMonsterFemale.class, "npczombiefemale");
registerNpc(EntityNpcSkeleton.class, "npcskeleton");
registerNpc(EntityNPCDwarfFemale.class, "npcdwarffemale");
registerNpc(EntityNPCFurryFemale.class, "npcfurryfemale");
registerNpc(EntityNPCOrcMale.class, "npcorcfmale");
registerNpc(EntityNPCOrcFemale.class, "npcorcfemale");
registerNpc(EntityNPCElfMale.class, "npcelfmale");
registerNpc(EntityNPCElfFemale.class, "npcelffemale");
registerNpc(EntityNpcCrystal.class, "npccrystal");
registerNpc(EntityNpcEnderchibi.class, "npcenderchibi");
registerNpc(EntityNpcNagaMale.class, "npcnagamale");
registerNpc(EntityNpcNagaFemale.class, "npcnagafemale");
registerNpc(EntityNpcSlime.class, "NpcSlime");
registerNpc(EntityNpcDragon.class, "NpcDragon");
registerNpc(EntityNPCEnderman.class, "npcEnderman");
registerNpc(EntityNPCGolem.class, "npcGolem");
2021-04-29 01:10:15 -04:00
registerNpc(EntityCustomNpc.class, "CustomNpc");
2018-09-13 12:03:28 -04:00
registerNewEntity(EntityChairMount.class, "CustomNpcChairMount", 64, 10, false);
registerNewEntity(EntityProjectile.class, "throwableitem", 64, 3, true);
registerNewEntity(EntityMagicProjectile.class, "magicprojectile", 64, 3, true);
2026-01-25 20:39:01 -05:00
registerNewEntity(EntityAbilityOrb.class, "abilityorb", 64, 3, true);
registerNewEntity(EntityAbilityDisc.class, "abilitydisc", 64, 3, true);
registerNewEntity(EntityAbilityLaser.class, "abilitylaser", 64, 3, true);
registerNewEntity(EntityAbilityBeam.class, "abilitybeam", 64, 3, true);
registerNewEntity(EntityAbilitySweeper.class, "abilitysweeper", 64, 3, true);
2026-02-12 13:55:56 -05:00
registerNewEntity(EntityAbilityZone.class, "abilityzone", 64, 3, true);
registerNewEntity(EntityEnergyDome.class, "energydome", 64, 3, true);
registerNewEntity(EntityEnergyPanel.class, "energypanel", 64, 3, true);
registerNewEntity(EntityEnergySlicer.class, "energyslicer", 64, 3, true);
2018-09-13 12:03:28 -04:00
new RecipeController();
2018-09-13 12:03:28 -04:00
ForgeChunkManager.setForcedChunkLoadingCallback(this, new ChunkController());
new CustomNpcsPermissions();
2023-05-16 12:39:55 -04:00
new Developer();
2022-11-07 01:49:54 -05:00
// Load Mod Support
2018-09-13 12:03:28 -04:00
PixelmonHelper.load();
new AddonManager();
2025-02-26 22:49:26 -05:00
new AttributeController();
2025-03-08 18:54:22 -05:00
new MagicController();
2018-09-13 12:03:28 -04:00
}
@EventHandler
public void load(FMLInitializationEvent ev) {
MARKOV_GENERATOR[0] = new MarkovRoman(3);
MARKOV_GENERATOR[1] = new MarkovJapanese(4);
MARKOV_GENERATOR[2] = new MarkovSlavic(3);
MARKOV_GENERATOR[3] = new MarkovWelsh(3);
MARKOV_GENERATOR[4] = new MarkovSaami(3);
MARKOV_GENERATOR[5] = new MarkovOldNorse(4);
MARKOV_GENERATOR[6] = new MarkovAncientGreek(3);
MARKOV_GENERATOR[7] = new MarkovAztec(3);
MARKOV_GENERATOR[8] = new MarkovCustomNPCsClassic(3);
MARKOV_GENERATOR[9] = new MarkovSpanish(3);
2025-02-06 12:26:09 -05:00
PacketHandler.Instance.registerChannels();
}
@EventHandler
public void loadComplete(FMLLoadCompleteEvent ev) {
proxy.buildPackageIndex();
}
2018-09-13 12:03:28 -04:00
@EventHandler
public void setAboutToStart(FMLServerAboutToStartEvent event) {
2025-12-20 01:21:35 +01:00
globalJaninoCompiler = null;
if (FMLCommonHandler.instance().getSide().isClient())
clientJaninoCompiler = null;
Server = event.getServer();
AnimationController.Instance.load();
2023-06-05 22:12:48 -04:00
ChunkController.Instance.clear();
FactionController.getInstance().load();
2025-02-03 16:59:06 -05:00
MagicController.getInstance().load();
2018-09-13 12:03:28 -04:00
new PlayerDataController();
new TagController();
2018-09-13 12:03:28 -04:00
new TransportController();
new GlobalDataController();
new SpawnController();
new LinkedNpcController();
2026-01-09 15:29:00 -05:00
AbilityController.Instance.load();
2026-01-24 02:35:26 -05:00
TelegraphController.init();
2025-12-20 01:21:35 +01:00
2025-02-16 04:54:21 -05:00
LinkedItemController.getInstance().load();
2025-02-15 19:37:25 -05:00
2025-02-12 01:46:42 -05:00
// Custom Effects
CustomEffectController.getInstance().load();
2025-01-23 16:10:01 -05:00
// Profile Controller
new ProfileController();
ProfileController.registerProfileType(new CNPCData());
2018-09-13 12:03:28 -04:00
ScriptController.Instance.loadStoredData();
ScriptController.Instance.loadForgeScripts();
2023-03-16 04:27:19 -05:00
ScriptController.Instance.loadGlobalNPCScripts();
ScriptController.Instance.loadPlayerScripts();
2018-09-13 12:03:28 -04:00
ScriptController.HasStart = false;
NpcAPI.clearCache();
2023-06-05 19:35:27 -04:00
PlayerDataController.Instance.clearCache();
2018-09-13 12:03:28 -04:00
Set<String> names = Block.blockRegistry.getKeys();
2025-03-13 17:14:45 -04:00
for (String name : names) {
2022-11-07 01:49:54 -05:00
Block block = (Block) Block.blockRegistry.getObject(name);
2025-03-13 17:14:45 -04:00
if (block instanceof BlockLeavesBase) {
2023-01-07 00:21:08 -05:00
block.setTickRandomly(ConfigMain.LeavesDecayEnabled);
2022-11-07 01:49:54 -05:00
}
2025-03-13 17:14:45 -04:00
if (block instanceof BlockVine) {
2023-01-07 00:21:08 -05:00
block.setTickRandomly(ConfigMain.VineGrowthEnabled);
2022-11-07 01:49:54 -05:00
}
2025-03-13 17:14:45 -04:00
if (block instanceof BlockIce) {
2023-01-07 00:21:08 -05:00
block.setTickRandomly(ConfigMain.IceMeltsEnabled);
2022-11-07 01:49:54 -05:00
}
2018-09-13 12:03:28 -04:00
}
}
2022-11-07 01:49:54 -05:00
2018-09-13 12:03:28 -04:00
//Loading items in the about to start event was corrupting items with a damage value
@EventHandler
public void started(FMLServerStartedEvent event) {
2023-06-05 22:12:48 -04:00
RecipeController.Instance.load();
2018-09-13 12:03:28 -04:00
new BankController();
2026-01-23 21:53:12 -05:00
new AuctionController();
DialogController.Instance.load();
2023-06-05 22:12:48 -04:00
QuestController.Instance.load();
2018-09-13 12:03:28 -04:00
ScriptController.HasStart = true;
ServerCloneController.Instance = new ServerCloneController();
2023-03-22 16:06:22 -04:00
ServerTagMapController.Instance = new ServerTagMapController();
2025-11-05 17:23:21 -05:00
SyncController.load();
// Initialize Bukkit integration (loads Vault and Permissions)
BukkitUtil.init();
CustomNpcsPermissions.Instance.init();
2018-09-13 12:03:28 -04:00
}
2022-11-07 01:49:54 -05:00
2025-01-29 15:04:19 -05:00
2018-09-13 12:03:28 -04:00
@EventHandler
2025-03-13 17:14:45 -04:00
public void stopped(FMLServerStoppedEvent event) {
2018-09-13 12:03:28 -04:00
ServerCloneController.Instance = null;
2023-06-05 19:35:27 -04:00
GlobalDataController.Instance.saveData();
ScriptController.Instance.saveForgeScripts();
ScriptController.Instance.savePlayerScripts();
2023-03-16 04:27:19 -05:00
ScriptController.Instance.saveGlobalNpcScripts();
2026-01-23 21:53:12 -05:00
// Save auction data synchronously on shutdown
if (AuctionController.Instance != null) {
AuctionController.Instance.save();
}
2026-02-18 04:02:51 -05:00
kamkeel.npcs.entity.EntityEnergyProjectile.clearAllProjectiles();
2025-12-20 01:21:35 +01:00
if (FMLCommonHandler.instance().getSide().isClient())
clientJaninoCompiler = null;
globalJaninoCompiler = null;
2018-09-13 12:03:28 -04:00
}
@EventHandler
public void serverstart(FMLServerStartingEvent event) {
event.registerServerCommand(new CommandNoppes());
2023-02-28 04:26:16 -05:00
event.registerServerCommand(new CommandKamkeel());
2025-03-13 17:14:45 -04:00
if (ConfigMain.ProfilesEnabled)
2025-02-18 22:22:40 -05:00
event.registerServerCommand(new CommandProfile());
2018-09-13 12:03:28 -04:00
}
private void registerNpc(Class<? extends Entity> cl, String name) {
EntityRegistry.registerModEntity(cl, name, NewEntityStartId++, this, 64, 3, true);
EntityList.stringToClassMapping.put(name, cl);
}
private void registerNewEntity(Class<? extends Entity> cl, String name, int range, int update, boolean velocity) {
EntityRegistry.registerModEntity(cl, name, NewEntityStartId++, this, range, update, velocity);
}
public static File getWorldSaveDirectory() {
MinecraftServer server = MinecraftServer.getServer();
File saves = new File(".");
if (server != null && !server.isDedicatedServer()) {
saves = new File(Minecraft.getMinecraft().mcDataDir, "saves");
}
if (server != null) {
File savedir = new File(new File(saves, server.getFolderName()), "customnpcs");
if (!savedir.exists()) {
savedir.mkdir();
}
return savedir;
}
return null;
}
public static File getWorldSaveDirectory(String s) {
try {
File dir = new File(".");
if (getServer() != null) {
if (!getServer().isDedicatedServer()) {
dir = new File(Minecraft.getMinecraft().mcDataDir, "saves");
}
dir = new File(new File(dir, getServer().getFolderName()), "customnpcs");
}
if (s != null) {
dir = new File(dir, s);
}
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
} catch (Exception var2) {
LogWriter.error("Error getting worldsave", var2);
return null;
}
}
2025-03-13 17:14:45 -04:00
public static MinecraftServer getServer() {
return MinecraftServer.getServer();
}
2025-01-28 13:39:46 -05:00
public static Side side() {
return FMLCommonHandler.instance().getEffectiveSide();
}
2024-02-15 17:54:28 -05:00
}