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

858 lines
30 KiB
Java
Raw Normal View History

package noppes.npcs.scripted;
import cpw.mods.fml.common.eventhandler.EventBus;
2022-12-18 15:54:14 -06:00
import foxz.command.ScriptedCommand;
2025-02-21 17:30:57 -05:00
import kamkeel.npcs.controllers.ProfileController;
import net.minecraft.block.Block;
2022-12-18 15:54:14 -06:00
import net.minecraft.command.CommandHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
2022-11-06 01:59:34 -05:00
import net.minecraft.entity.INpc;
2023-03-16 05:07:38 -05:00
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityTameable;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.*;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
2021-10-25 00:58:03 -05:00
import net.minecraft.util.EntityDamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
2022-06-29 00:06:38 -05:00
import net.minecraft.world.biome.BiomeGenBase;
import noppes.npcs.CustomNpcs;
import noppes.npcs.NoppesUtilServer;
2022-11-15 15:25:53 -05:00
import noppes.npcs.api.*;
2023-01-12 21:33:06 -05:00
import noppes.npcs.api.entity.ICustomNpc;
import noppes.npcs.api.entity.IEntity;
import noppes.npcs.api.entity.IPlayer;
import noppes.npcs.api.gui.ICustomGui;
import noppes.npcs.api.handler.*;
import noppes.npcs.api.handler.data.IAnimation;
import noppes.npcs.api.handler.data.IFrame;
import noppes.npcs.api.handler.data.IFramePart;
2023-01-12 21:33:06 -05:00
import noppes.npcs.api.handler.data.ISound;
import noppes.npcs.api.item.IItemStack;
import noppes.npcs.api.overlay.ICustomOverlay;
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.ConfigScript;
import noppes.npcs.constants.EnumAnimationPart;
import noppes.npcs.containers.ContainerNpcInterface;
2022-01-10 15:21:48 -06:00
import noppes.npcs.controllers.*;
2025-02-20 21:40:39 -05:00
import noppes.npcs.controllers.data.Animation;
import noppes.npcs.controllers.data.Frame;
import noppes.npcs.controllers.data.FramePart;
import noppes.npcs.controllers.data.SkinOverlay;
import noppes.npcs.entity.EntityCustomNpc;
import noppes.npcs.entity.EntityNPCInterface;
2023-03-16 02:51:40 -05:00
import noppes.npcs.entity.EntityProjectile;
2025-02-13 18:11:58 -06:00
import noppes.npcs.items.ItemLinked;
import noppes.npcs.items.ItemScripted;
import noppes.npcs.scripted.entity.*;
2022-01-12 04:44:08 -06:00
import noppes.npcs.scripted.gui.ScriptGui;
import noppes.npcs.scripted.item.*;
import noppes.npcs.scripted.overlay.ScriptOverlay;
2024-03-11 16:10:04 -04:00
import noppes.npcs.util.*;
2024-07-20 16:46:41 -05:00
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
2022-11-06 15:08:58 -06:00
import java.util.*;
2024-07-20 19:50:23 -05:00
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class NpcAPI extends AbstractNpcAPI {
private static final Map<String,Object> tempData = new HashMap<>();
private static final Map<Integer, ScriptWorld> worldCache = new LRUHashMap<>(10);
2023-06-02 23:58:04 -05:00
private static final CacheHashMap<ItemStack, CacheHashMap.CachedObject<ScriptItemStack>> scriptItemCache = new CacheHashMap<>(60*1000);
2022-12-14 17:53:57 -06:00
public static final HashMap<String,Object> engineObjects = new HashMap<>();
public static final EventBus EVENT_BUS = new EventBus();
private static AbstractNpcAPI instance = null;
2024-07-20 16:46:41 -05:00
private final static String API_USER_AGENT = "CNPC+API";
2024-07-20 19:50:23 -05:00
private static final ExecutorService executorService = Executors.newFixedThreadPool(10);
2024-07-20 16:46:41 -05:00
2023-05-30 01:27:34 -05:00
private NpcAPI() {
}
public static void clearCache() {
worldCache.clear();
scriptItemCache.clear();
}
public Object getTempData(String key){
return tempData.get(key);
}
public void setTempData(String key, Object value){
tempData.put(key, value);
}
public boolean hasTempData(String key){
return tempData.containsKey(key);
}
public void removeTempData(String key){
tempData.remove(key);
}
public void clearTempData(){
tempData.clear();
}
public String[] getTempDataKeys() {
return tempData.keySet().toArray(new String[0]);
}
public Object getStoredData(String key){
NBTTagCompound compound = ScriptController.Instance.compound;
if(!compound.hasKey(key))
return null;
NBTBase base = compound.getTag(key);
if(base instanceof NBTBase.NBTPrimitive)
return ((NBTBase.NBTPrimitive)base).func_150286_g();
return ((NBTTagString)base).func_150285_a_();
}
public void setStoredData(String key, Object value){
NBTTagCompound compound = ScriptController.Instance.compound;
if(value instanceof Number)
compound.setDouble(key, ((Number) value).doubleValue());
else if(value instanceof String)
compound.setString(key, (String)value);
ScriptController.Instance.shouldSave = true;
}
public boolean hasStoredData(String key){
return ScriptController.Instance.compound.hasKey(key);
}
public void removeStoredData(String key){
ScriptController.Instance.compound.removeTag(key);
ScriptController.Instance.shouldSave = true;
}
public void clearStoredData(){
ScriptController.Instance.compound = new NBTTagCompound();
ScriptController.Instance.shouldSave = true;
}
public String[] getStoredDataKeys() {
NBTTagCompound compound = ScriptController.Instance.compound;
if (compound != null) {
Set keySet = compound.func_150296_c();
List<String> list = new ArrayList<>();
for(Object o : keySet){
list.add((String) o);
}
String[] array = list.toArray(new String[list.size()]);
return array;
}
return new String[0];
}
2022-12-18 15:54:14 -06:00
public void registerICommand(ICommand command) {
((CommandHandler)CustomNpcs.getServer().getCommandManager()).registerCommand((ScriptedCommand) command);
}
public ICommand getICommand(String commandName, int priorityLevel) {
return new ScriptedCommand(commandName,priorityLevel);
}
2022-12-14 17:53:57 -06:00
public void addGlobalObject(String key, Object obj) {
NpcAPI.engineObjects.put(key,obj);
}
public void removeGlobalObject(String key) {
NpcAPI.engineObjects.remove(key);
}
2022-12-16 19:36:39 -06:00
public boolean hasGlobalObject(String key) {
return NpcAPI.engineObjects.containsKey(key);
}
2022-12-14 17:53:57 -06:00
public HashMap<String,Object> getEngineObjects() {
return NpcAPI.engineObjects;
}
2022-07-01 17:02:40 -05:00
public long sizeOfObject(Object obj) {
2024-03-11 16:10:04 -04:00
return SizeOfObjectUtil.sizeOfObject(obj);
2022-07-01 17:02:40 -05:00
}
2022-05-31 18:54:11 -05:00
public void stopServer() {
2022-11-06 01:59:34 -05:00
MinecraftServer.getServer().initiateShutdown();
}
public int getCurrentPlayerCount() {
return MinecraftServer.getServer().getConfigurationManager().getCurrentPlayerCount();
}
public int getMaxPlayers() {
return MinecraftServer.getServer().getConfigurationManager().getMaxPlayers();
}
public void kickAllPlayers() {
MinecraftServer.getServer().getConfigurationManager().removeAllPlayers();
}
public boolean isHardcore() {
return MinecraftServer.getServer().isHardcore();
}
public File getFile(String path) {
return MinecraftServer.getServer().getFile(path);
}
public String getServerOwner() {
return MinecraftServer.getServer().getServerOwner();
2022-05-31 18:54:11 -05:00
}
2022-01-10 15:21:48 -06:00
public IFactionHandler getFactions() {
this.checkWorld();
return FactionController.getInstance();
}
public IRecipeHandler getRecipes() {
this.checkWorld();
2023-06-05 22:12:48 -04:00
return RecipeController.Instance;
2022-01-10 15:21:48 -06:00
}
public IQuestHandler getQuests() {
this.checkWorld();
2023-06-05 22:12:48 -04:00
return QuestController.Instance;
2022-01-10 15:21:48 -06:00
}
public IDialogHandler getDialogs() {
2023-06-05 22:12:48 -04:00
return DialogController.Instance;
2022-01-10 15:21:48 -06:00
}
public ICloneHandler getClones() {
return ServerCloneController.Instance;
}
2023-06-05 22:12:48 -04:00
public INaturalSpawnsHandler getNaturalSpawns() { return SpawnController.Instance; }
2022-06-29 00:06:38 -05:00
2025-02-21 17:30:57 -05:00
public IProfileHandler getProfileHandler() { return ProfileController.Instance; }
public ICustomEffectHandler getCustomEffectHandler() { return CustomEffectController.Instance; }
2022-06-12 01:26:23 -05:00
public ITransportHandler getLocations() {
return TransportController.getInstance();
}
public IAnimationHandler getAnimations() {
this.checkWorld();
2023-06-05 22:12:48 -04:00
return AnimationController.Instance;
}
2022-06-29 00:06:38 -05:00
@Override
public String[] getAllBiomeNames() {
List<String> biomes = new ArrayList<>();
2022-06-29 00:06:38 -05:00
for (BiomeGenBase base : BiomeGenBase.getBiomeGenArray()) {
if (base != null && base.biomeName != null) {
biomes.add(base.biomeName);
}
}
return biomes.toArray(new String[]{});
}
public IEntity<?> getIEntity(Entity entity) {
if(entity == null)
return null;
if(entity instanceof EntityNPCInterface)
return ((EntityNPCInterface)entity).wrappedNPC;
else{
ScriptEntityData data = (ScriptEntityData) entity.getExtendedProperties("ScriptedObject");
boolean isDBC = false;
if(entity instanceof EntityPlayerMP) {
Set<?> keySet = entity.getEntityData().getCompoundTag("PlayerPersisted").func_150296_c();
for (Object o : keySet) {
String s = (String) o;
if (s.contains("jrmc")) {
isDBC = true;
break;
}
}
}
if (data == null || data.base instanceof ScriptDBCPlayer != isDBC) {
if (entity instanceof EntityPlayerMP) {
ScriptEntityData newData;
if (isDBC) {
newData = new ScriptEntityData(new ScriptDBCPlayer<>((EntityPlayerMP) entity));
} else {
newData = new ScriptEntityData(new ScriptPlayer<>((EntityPlayerMP) entity));
}
if (data != null) {
((ScriptEntity<?>) newData.base).copyTempData(data.base);
}
data = newData;
}
else if (PixelmonHelper.isPixelmon(entity))
return new ScriptPixelmon<EntityTameable>((EntityTameable) entity);
else if (entity instanceof EntityAnimal)
data = new ScriptEntityData(new ScriptAnimal<>((EntityAnimal) entity));
else if (entity instanceof EntityMob)
data = new ScriptEntityData(new ScriptMonster<>((EntityMob) entity));
else if (entity instanceof EntityVillager)
data = new ScriptEntityData(new ScriptVillager<>((EntityVillager) entity));
else if (entity instanceof EntityLiving)
data = new ScriptEntityData(new ScriptLiving<>((EntityLiving) entity));
else if (entity instanceof EntityLivingBase)
data = new ScriptEntityData(new ScriptLivingBase<>((EntityLivingBase) entity));
else if (entity instanceof EntityProjectile)
data = new ScriptEntityData(new ScriptProjectile<>((EntityProjectile) entity));
else if (entity instanceof EntityItem)
data = new ScriptEntityData(new ScriptEntityItem<>((EntityItem) entity));
else
data = new ScriptEntityData(new ScriptEntity<>(entity));
entity.registerExtendedProperties("ScriptedObject", data);
}
return data.base;
}
}
2022-11-06 01:59:34 -05:00
public INpc[] getChunkLoadingNPCs() {
ArrayList<INpc> list = new ArrayList<>();
2023-06-05 22:12:48 -04:00
Set<Entity> npcSet = ChunkController.Instance.tickets.keySet();
2022-11-06 01:59:34 -05:00
for (Entity entity : npcSet) {
if (entity instanceof EntityNPCInterface) {
list.add((INpc) NpcAPI.Instance().getIEntity(entity));
}
}
return list.toArray(new INpc[0]);
}
public IEntity<?>[] getLoadedEntities() {
ArrayList<IEntity<?>> list = new ArrayList<>();
2022-06-12 01:26:23 -05:00
for (IWorld world : worldCache.values()) {
for (Object obj : world.getMCWorld().loadedEntityList) {
list.add(NpcAPI.Instance().getIEntity((Entity) obj));
}
}
return list.toArray(new IEntity[0]);
}
public IBlock getIBlock(IWorld world, int x, int y, int z) {
Block block = world.getMCWorld().getBlock(x, y, z);
if(block == null || block.isAir(world.getMCWorld(), x, y, z))
return null;
return new ScriptBlock(world.getMCWorld(), world.getMCWorld().getBlock(x, y, z), new BlockPos(x,y,z));
}
public IBlock getIBlock(IWorld world, IPos pos) {
2023-05-31 23:59:11 -05:00
return pos == null ? null : this.getIBlock(world, pos.getX(),pos.getY(),pos.getZ());
}
public ITileEntity getITileEntity(IWorld world, IPos pos) {
2023-05-31 23:59:11 -05:00
if (pos == null) {
return null;
}
TileEntity tileEntity = world.getMCWorld().getTileEntity(pos.getX(), pos.getY(),pos.getZ());
return this.getITileEntity(tileEntity);
}
public ITileEntity getITileEntity(IWorld world, int x, int y, int z) {
TileEntity tileEntity = world.getMCWorld().getTileEntity(x,y,z);
return this.getITileEntity(tileEntity);
}
public ITileEntity getITileEntity(TileEntity tileEntity) {
return tileEntity == null ? null : new ScriptTileEntity<>(tileEntity);
}
public IPos getIPos(BlockPos pos) {
return new ScriptBlockPos(pos);
}
public IPos getIPos(double x, double y, double z) {
return this.getIPos(new BlockPos(x,y,z));
}
public IPos getIPos(int x, int y, int z) {
return this.getIPos((double) x, (double) y, (double) z);
}
public IPos getIPos(float x, float y, float z) {
return this.getIPos((double) x, (double) y, (double) z);
}
2023-06-03 14:32:43 -05:00
public IPos getIPos(long serializedPos) {
return this.getIPos(BlockPos.fromLong(serializedPos));
}
2022-11-06 15:08:58 -06:00
public IPos[] getAllInBox(IPos from, IPos to, boolean sortByDistance) {
ArrayList<IPos> list = new ArrayList<>();
2023-05-31 23:59:11 -05:00
if (from != null && to != null) {
Iterator<BlockPos> posIterable = BlockPos.getAllInBox(from.getMCPos(),to.getMCPos()).iterator();
posIterable.forEachRemaining(BlockPos -> list.add(this.getIPos(BlockPos)));
if (sortByDistance) {
list.sort(Comparator.comparingDouble(pos -> pos.distanceTo(from)));
}
2022-11-06 15:08:58 -06:00
}
return list.toArray(new IPos[0]);
}
public IPos[] getAllInBox(IPos from, IPos to) {
return this.getAllInBox(from,to,true);
}
public INbt getINbt(NBTTagCompound nbtTagCompound) {
return nbtTagCompound == null?new ScriptNbt(new NBTTagCompound()):new ScriptNbt(nbtTagCompound);
}
2022-01-10 15:21:48 -06:00
public INbt stringToNbt(String str) {
if (str != null && !str.isEmpty()) {
try {
return this.getINbt(NBTJsonUtil.Convert(str));
} catch (JsonException var3) {
throw new CustomNPCsException(var3, "Failed converting " + str);
2022-01-10 15:21:48 -06:00
}
} else {
throw new CustomNPCsException("Cant cast empty string to nbt");
2022-01-10 15:21:48 -06:00
}
}
public ICustomNpc<?> createNPC(IWorld world) {
if (world.getMCWorld().isRemote) {
return null;
} else {
EntityCustomNpc npc = new EntityCustomNpc(world.getMCWorld());
return npc.wrappedNPC;
}
}
public ICustomNpc<?> spawnNPC(IWorld world, int x, int y, int z) {
if (world.getMCWorld().isRemote) {
return null;
} else {
EntityCustomNpc npc = new EntityCustomNpc(world.getMCWorld());
npc.setPositionAndRotation((double)x + 0.5D, y, (double)z + 0.5D, 0.0F, 0.0F);
npc.setHealth(npc.getMaxHealth());
world.getMCWorld().spawnEntityInWorld(npc);
return npc.wrappedNPC;
}
}
public ICustomNpc<?> spawnNPC(IWorld world, IPos pos) {
2023-05-31 23:59:11 -05:00
if (pos == null) {
return null;
}
return this.spawnNPC(world, pos.getX(), pos.getY(), pos.getZ());
}
public static AbstractNpcAPI Instance() {
if (instance == null) {
instance = new NpcAPI();
}
return instance;
}
public EventBus events() {
return EVENT_BUS;
}
public IItemStack getIItemStack(ItemStack itemstack) {
if(itemstack == null)
return null;
2023-05-30 01:46:29 -05:00
synchronized (scriptItemCache) {
ScriptItemStack scriptStack;
if (scriptItemCache.containsKey(itemstack)) {
scriptStack = scriptItemCache.get(itemstack).getObject();
} else {
2025-02-15 19:37:25 -05:00
if (itemstack.getItem() instanceof ItemLinked) {
2025-02-13 18:11:58 -06:00
scriptStack = new ScriptLinkedItem(itemstack);
} else if (itemstack.getItem() instanceof ItemScripted) {
scriptStack = new ScriptCustomItem(itemstack);
} else if (itemstack.getItem() instanceof ItemArmor) {
scriptStack = new ScriptItemArmor(itemstack);
} else if (itemstack.getItem() instanceof ItemWritableBook || itemstack.getItem() instanceof ItemEditableBook || itemstack.getItem() == Items.written_book || itemstack.getItem() == Items.writable_book) {
scriptStack = new ScriptItemBook(itemstack);
} else if (itemstack.getItem() instanceof ItemBlock) {
scriptStack = new ScriptItemBlock(itemstack);
} else {
scriptStack = new ScriptItemStack(itemstack);
2023-05-30 01:46:29 -05:00
}
2023-05-30 01:33:18 -05:00
}
2023-05-30 01:25:20 -05:00
2025-02-17 16:02:56 -05:00
// Version Check Linked Item
2025-02-18 02:15:06 -05:00
// if(scriptStack instanceof ScriptLinkedItem && CustomNpcs.side() == Side.SERVER){
// ScriptLinkedItem scriptLinkedItem = (ScriptLinkedItem) scriptStack;
// LinkedItem linkedItem = LinkedItemController.getInstance().get(scriptLinkedItem.linkedItem.getId());
//
//
// }
return scriptStack;
}
}
2022-12-14 16:44:13 -06:00
public IItemStack createItemFromNBT(INbt nbt) {
return getIItemStack(ItemStack.loadItemStackFromNBT(nbt.getMCNBT()));
}
public IItemStack createItem(String id, int damage, int size) {
Item item = (Item) Item.itemRegistry.getObject(id);
if (item == null)
return null;
return getIItemStack(new ItemStack(item, size, damage));
}
public IWorld getIWorld(World world) {
ScriptWorld w = worldCache.get(world.provider.dimensionId);
if (w != null) {
w.world.provider.dimensionId = world.provider.dimensionId;
} else {
worldCache.put(world.provider.dimensionId, w = ScriptWorld.createNew(world.provider.dimensionId));
}
return w;
}
public IWorld getIWorld(int dimensionId) {
WorldServer[] var2 = CustomNpcs.getServer().worldServers;
for (WorldServer world : var2) {
if (world.provider.dimensionId == dimensionId) {
return this.getIWorld(world);
}
}
throw new CustomNPCsException("Unknown dimension id: " + dimensionId);
}
2024-02-12 04:10:38 -05:00
public IWorld getIWorldLoad(int dimensionId) {
try {
IWorld iWorld = this.getIWorld(dimensionId);
if(iWorld != null)
return iWorld;
}
catch (CustomNPCsException ignored){}
WorldServer worldServer = CustomNpcs.getServer().worldServerForDimension(dimensionId);
if (worldServer != null) {
return this.getIWorld(worldServer);
}
throw new CustomNPCsException("Unknown dimension id: " + dimensionId);
}
public IContainer getIContainer(IInventory inventory) {
return new ScriptContainer(inventory);
}
public IContainer getIContainer(Container container) {
return container instanceof ContainerNpcInterface ? ContainerNpcInterface.getOrCreateIContainer((ContainerNpcInterface)container) : new ScriptContainer(container);
}
private void checkWorld() {
if (CustomNpcs.getServer() == null || CustomNpcs.getServer().isServerStopped()) {
throw new CustomNPCsException("No world is loaded right now");
}
}
public IWorld[] getIWorlds() {
this.checkWorld();
IWorld[] worlds = new IWorld[CustomNpcs.getServer().worldServers.length];
for(int i = 0; i < CustomNpcs.getServer().worldServers.length; ++i) {
worlds[i] = this.getIWorld(CustomNpcs.getServer().worldServers[i]);
}
return worlds;
}
public File getGlobalDir() {
return CustomNpcs.Dir;
}
public File getWorldDir() {
return CustomNpcs.getWorldSaveDirectory();
}
public IDamageSource getIDamageSource(DamageSource damagesource) {
return new ScriptDamageSource(damagesource);
}
public IDamageSource getIDamageSource(IEntity<?> entity) {
if(entity.getType() == 1)//if player
return new ScriptDamageSource(new EntityDamageSource("player",entity.getMCEntity()));
else
return new ScriptDamageSource(new EntityDamageSource(entity.getTypeName(),entity.getMCEntity()));
2021-10-25 00:58:03 -05:00
}
public void executeCommand(IWorld world, String command) {
//if(!world.getMCWorld().isRemote)
NoppesUtilServer.runCommand(world.getMCWorld(), "API", command);
}
public String getRandomName(int dictionary, int gender) {
return CustomNpcs.MARKOV_GENERATOR[dictionary].fetch(gender);
}
2022-11-06 01:59:34 -05:00
/**
* @param username The username of the player to be returned
* @return The Player with name. Null is returned when the player isn't found
*/
public IPlayer<?> getPlayer(String username) {
EntityPlayerMP player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username);
return player == null ? null : (IPlayer<?>) NpcAPI.Instance().getIEntity(player);
}
public IPlayer<?>[] getAllServerPlayers(){
List<?> list = MinecraftServer.getServer().getConfigurationManager().playerEntityList;
IPlayer<?>[] arr = new IPlayer[list.size()];
for(int i = 0; i < list.size(); i++){
arr[i] = (IPlayer<?>) NpcAPI.Instance().getIEntity((EntityPlayerMP)list.get(i));
}
return arr;
}
2022-07-13 19:27:27 -05:00
public String[] getPlayerNames() {
2022-11-06 01:59:34 -05:00
return MinecraftServer.getServer().getConfigurationManager().getAllUsernames();
2022-07-13 19:27:27 -05:00
}
public void playSoundAtEntity(IEntity<?> entity, String sound, float volume, float pitch){
2022-05-03 23:09:21 -05:00
entity.getWorld().getMCWorld().playSoundAtEntity(entity.getMCEntity(), sound, volume, pitch);
}
public void playSoundToNearExcept(IPlayer<?> player, String sound, float volume, float pitch){
player.getWorld().getMCWorld().playSoundToNearExcept(player.getMCEntity(), sound, volume, pitch);
2022-05-03 23:09:21 -05:00
}
public String getMOTD()
{
return MinecraftServer.getServer().getMOTD();
}
public void setMOTD(String motd)
{
MinecraftServer.getServer().setMOTD(motd);
}
public IParticle createParticle(String directory){
return new ScriptParticle(directory);
}
2022-05-07 03:46:37 -05:00
@Deprecated
public IParticle createEntityParticle(String directory){
return new ScriptParticle(directory);
}
2022-07-13 19:27:27 -05:00
public ISound createSound(String directory) {
return new ScriptSound(directory);
}
public void playSound(int id, ISound sound) {
NoppesUtilServer.playSound(id, (ScriptSound) sound);
}
public void playSound(ISound sound) {
NoppesUtilServer.playSound((ScriptSound) sound);
}
2022-07-13 19:27:27 -05:00
public void stopSound(int id) {
NoppesUtilServer.stopSound(id);
}
public void pauseSounds() {
NoppesUtilServer.pauseSounds();
}
public void continueSounds() {
NoppesUtilServer.continueSounds();
}
public void stopSounds() {
NoppesUtilServer.stopSounds();
}
public int getServerTime() {
return MinecraftServer.getServer().getTickCounter();
}
2022-01-12 04:44:08 -06:00
2022-05-16 00:42:40 -05:00
public boolean arePlayerScriptsEnabled() {
2023-01-07 00:21:08 -05:00
return ConfigScript.GlobalPlayerScripts;
2022-05-16 00:42:40 -05:00
}
2022-05-16 00:42:40 -05:00
public boolean areForgeScriptsEnabled() {
2023-01-07 00:21:08 -05:00
return ConfigScript.GlobalForgeScripts;
2022-05-16 00:42:40 -05:00
}
2022-05-16 00:42:40 -05:00
public boolean areGlobalNPCScriptsEnabled() {
2023-01-07 00:21:08 -05:00
return ConfigScript.GlobalNPCScripts;
2022-05-16 00:42:40 -05:00
}
public void enablePlayerScripts(boolean enable) {
2023-01-07 00:21:08 -05:00
ConfigScript.GlobalPlayerScripts = enable;
2022-05-16 00:42:40 -05:00
}
2022-05-16 00:42:40 -05:00
public void enableForgeScripts(boolean enable) {
2023-01-07 00:21:08 -05:00
ConfigScript.GlobalForgeScripts = enable;
2022-05-16 00:42:40 -05:00
}
2022-05-16 00:42:40 -05:00
public void enableGlobalNPCScripts(boolean enable) {
2023-01-07 00:21:08 -05:00
ConfigScript.GlobalNPCScripts = enable;
2022-05-16 00:42:40 -05:00
}
public ICustomGui createCustomGui(int id, int width, int height, boolean pauseGame) {
return new ScriptGui(id, width, height, pauseGame);
}
public ICustomOverlay createCustomOverlay(int id) {
return new ScriptOverlay(id);
}
public ISkinOverlay createSkinOverlay(String texture) {
return new SkinOverlay(texture);
}
2022-12-20 09:21:39 -06:00
public String millisToTime(long millis) {
return NoppesUtilServer.millisToTime(millis);
}
public String ticksToTime(long ticks) {
return this.millisToTime(ticks * 50);
}
public IAnimation createAnimation(String name) {
return new Animation(-1, name);
2023-01-25 23:18:27 -06:00
}
public IAnimation createAnimation(String name, float speed, byte smooth) {
return new Animation(-1, name, speed, smooth);
}
public IFrame createFrame(int duration) {
return new Frame(duration);
}
public IFrame createFrame(int duration, float speed, byte smooth) {
return new Frame(duration,speed,smooth);
}
public IFramePart createPart(String name) {
try {
return new FramePart(EnumAnimationPart.valueOf(name));
} catch (IllegalArgumentException ignored) {
throw new CustomNPCsException("Invalid frame part name: " + name);
}
}
public IFramePart createPart(String name, float[] rotation, float[] pivot) {
if (rotation.length != 3 || pivot.length != 3) {
throw new CustomNPCsException("Rotation and pivot arrays for frame parts must have a length of 3.");
}
FramePart part = (FramePart) this.createPart(name);
part.setRotations(rotation);
part.setPivots(pivot);
return part;
}
public IFramePart createPart(String name, float[] rotation, float[] pivot, float speed, byte smooth) {
FramePart part = (FramePart) this.createPart(name,rotation,pivot);
part.setSpeed(speed);
part.setSmooth(smooth);
return part;
}
public IFramePart createPart(int partId) {
for (EnumAnimationPart part : EnumAnimationPart.values()) {
if (part.id == partId) {
return new FramePart(part);
}
}
throw new CustomNPCsException("Invalid frame part ID: " + partId);
}
public IFramePart createPart(int partId, float[] rotation, float[] pivot) {
if (rotation.length != 3 || pivot.length != 3) {
throw new CustomNPCsException("Rotation and pivot arrays for frame parts must have a length of 3.");
}
FramePart part = (FramePart) this.createPart(partId);
part.setRotations(rotation);
part.setPivots(pivot);
return part;
}
public IFramePart createPart(int partId, float[] rotation, float[] pivot, float speed, byte smooth) {
FramePart part = (FramePart) this.createPart(partId,rotation,pivot);
part.setSpeed(speed);
part.setSmooth(smooth);
return part;
}
2024-07-20 16:46:41 -05:00
2024-07-20 19:50:23 -05:00
public void postJsonHTTP(String url, String jsonPayload) {
this.postJsonHTTP(url, jsonPayload, API_USER_AGENT);
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
public void postJsonHTTP(String url, String jsonPayload, String userAgent) {
this.postHTTP(url, jsonPayload, "application/json", userAgent);
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
public void postHTTP(String url, String params, String contentType) {
this.postHTTP(url, params, contentType, API_USER_AGENT);
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
public void postHTTP(String url, String params, String contentType, String userAgent) {
executorService.submit(() -> {
try {
HttpURLConnection con = NpcAPI.getConnection("POST", url, userAgent, contentType);
// For POST only - set doOutput to true
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(params);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
} catch (Exception ignored) {
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
});
2024-07-20 16:46:41 -05:00
}
2024-07-20 19:50:23 -05:00
private static HttpURLConnection getConnection(String requestMethod, String url, String userAgent, String contentType) throws IOException {
2024-07-20 16:46:41 -05:00
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod(requestMethod);
con.setRequestProperty("User-Agent", userAgent);
//con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
if (!contentType.isEmpty()) {
con.setRequestProperty("Content-Type", contentType);
}
return con;
}
}