2022-03-23 03:54:06 -05:00
|
|
|
package noppes.npcs.controllers.data;
|
|
|
|
|
|
2026-01-22 20:05:07 +02:00
|
|
|
import kamkeel.npcs.network.packets.request.script.GlobalNPCScriptPacket;
|
2022-03-23 03:54:06 -05:00
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
2026-02-04 16:16:43 -05:00
|
|
|
import noppes.npcs.CustomNpcs;
|
2023-01-12 21:33:06 -05:00
|
|
|
import noppes.npcs.api.entity.ICustomNpc;
|
2026-01-22 20:05:07 +02:00
|
|
|
import noppes.npcs.constants.ScriptContext;
|
2022-03-23 03:54:06 -05:00
|
|
|
import noppes.npcs.controllers.ScriptController;
|
|
|
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
2022-05-11 22:08:31 -05:00
|
|
|
import noppes.npcs.scripted.NpcAPI;
|
2026-01-22 14:27:48 -05:00
|
|
|
import noppes.npcs.util.ScriptToStringHelper;
|
2022-03-23 03:54:06 -05:00
|
|
|
|
2026-01-22 14:27:48 -05:00
|
|
|
public class GlobalNPCDataScript extends MultiScriptHandler {
|
2022-03-23 03:54:06 -05:00
|
|
|
private EntityNPCInterface npc;
|
|
|
|
|
private ICustomNpc npcAPI;
|
2023-02-21 12:45:48 -06:00
|
|
|
private long lastNpcUpdate = -1L;
|
2022-03-23 03:54:06 -05:00
|
|
|
|
2023-03-16 04:27:19 -05:00
|
|
|
public GlobalNPCDataScript(EntityNPCInterface npc) {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (npc != null) {
|
2022-03-23 03:54:06 -05:00
|
|
|
this.npc = npc;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2026-01-22 14:27:48 -05:00
|
|
|
@Override
|
|
|
|
|
protected boolean canRunScripts() {
|
|
|
|
|
return isEnabled();
|
2022-03-23 03:54:06 -05:00
|
|
|
}
|
|
|
|
|
|
2023-07-13 13:56:32 -05:00
|
|
|
public boolean isEnabled() {
|
2026-02-04 16:16:43 -05:00
|
|
|
return CustomNpcs.proxy.isGlobalNPCScripts() && this.enabled && ScriptController.HasStart && this.scripts.size() > 0;
|
2023-07-13 13:56:32 -05:00
|
|
|
}
|
|
|
|
|
|
2026-01-22 20:05:07 +02:00
|
|
|
@Override
|
|
|
|
|
public ScriptContext getContext() {
|
|
|
|
|
return ScriptContext.NPC;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
2026-01-22 14:27:48 -05:00
|
|
|
protected boolean needsReInit() {
|
|
|
|
|
return ScriptController.Instance.lastLoaded > lastInited || ScriptController.Instance.lastGlobalNpcUpdate > lastNpcUpdate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void reInitScripts() {
|
|
|
|
|
super.reInitScripts();
|
|
|
|
|
lastNpcUpdate = ScriptController.Instance.lastGlobalNpcUpdate;
|
2026-01-22 20:05:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void requestData() {
|
|
|
|
|
GlobalNPCScriptPacket.Get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void sendSavePacket(int index, int totalCount, NBTTagCompound nbt) {
|
|
|
|
|
GlobalNPCScriptPacket.Save(index, totalCount, nbt);
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-13 13:56:32 -05:00
|
|
|
@Override
|
2022-03-23 03:54:06 -05:00
|
|
|
public boolean isClient() {
|
2026-01-22 14:27:48 -05:00
|
|
|
return this.npc != null && this.npc.isClientWorld();
|
2022-03-23 03:54:06 -05:00
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2026-01-22 14:27:48 -05:00
|
|
|
@Override
|
2022-03-23 03:54:06 -05:00
|
|
|
public String noticeString() {
|
2025-03-13 17:14:45 -04:00
|
|
|
if (this.npc == null) {
|
2022-03-23 03:54:06 -05:00
|
|
|
return "Global script";
|
|
|
|
|
} else {
|
|
|
|
|
BlockPos pos = new BlockPos(this.npc);
|
2026-01-22 14:27:48 -05:00
|
|
|
return ScriptToStringHelper.toStringHelper(this.npc).add("x", pos.getX()).add("y", pos.getY()).add("z", pos.getZ()).toString();
|
2022-03-23 03:54:06 -05:00
|
|
|
}
|
|
|
|
|
}
|
2025-03-13 17:14:45 -04:00
|
|
|
|
2022-03-23 03:54:06 -05:00
|
|
|
public ICustomNpc getNpc() {
|
|
|
|
|
if (this.npcAPI == null) {
|
2022-05-11 22:08:31 -05:00
|
|
|
this.npcAPI = (ICustomNpc) NpcAPI.Instance().getIEntity(this.npc);
|
2022-03-23 03:54:06 -05:00
|
|
|
}
|
|
|
|
|
return this.npcAPI;
|
|
|
|
|
}
|
|
|
|
|
}
|