2021-09-30 21:44:30 -05:00
|
|
|
//
|
|
|
|
|
// Source code recreated from a .class file by IntelliJ IDEA
|
|
|
|
|
// (powered by FernFlower decompiler)
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
package noppes.npcs.scripted.wrapper;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.util.Map;
|
2021-10-19 16:59:09 -05:00
|
|
|
import java.util.UUID;
|
2021-09-30 21:44:30 -05:00
|
|
|
|
2021-10-19 16:59:09 -05:00
|
|
|
import com.mojang.authlib.GameProfile;
|
2021-09-30 21:44:30 -05:00
|
|
|
import cpw.mods.fml.common.eventhandler.EventBus;
|
|
|
|
|
import net.minecraft.entity.Entity;
|
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2021-10-18 06:33:39 -05:00
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
2021-09-30 21:44:30 -05:00
|
|
|
import net.minecraft.inventory.Container;
|
|
|
|
|
import net.minecraft.inventory.IInventory;
|
|
|
|
|
import net.minecraft.item.Item;
|
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
|
import net.minecraft.util.DamageSource;
|
|
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
|
import net.minecraft.world.WorldServer;
|
|
|
|
|
import net.minecraftforge.common.util.FakePlayer;
|
|
|
|
|
import noppes.npcs.CustomNpcs;
|
|
|
|
|
import noppes.npcs.NoppesUtilServer;
|
2021-10-19 19:49:43 -05:00
|
|
|
import noppes.npcs.client.EntityUtil;
|
2021-09-30 21:44:30 -05:00
|
|
|
import noppes.npcs.scripted.*;
|
|
|
|
|
import noppes.npcs.containers.ContainerNpcInterface;
|
|
|
|
|
import noppes.npcs.entity.EntityCustomNpc;
|
|
|
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
2021-10-18 06:33:39 -05:00
|
|
|
import noppes.npcs.scripted.entity.ScriptPlayer;
|
|
|
|
|
import noppes.npcs.scripted.interfaces.*;
|
2021-09-30 21:44:30 -05:00
|
|
|
import noppes.npcs.util.LRUHashMap;
|
|
|
|
|
|
|
|
|
|
public class WrapperNpcAPI extends NpcAPI {
|
|
|
|
|
private static final Map<Integer, ScriptWorld> worldCache = new LRUHashMap(10);
|
|
|
|
|
public static final EventBus EVENT_BUS = new EventBus();
|
|
|
|
|
private static NpcAPI instance = null;
|
|
|
|
|
|
|
|
|
|
public WrapperNpcAPI() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void clearCache() {
|
|
|
|
|
worldCache.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEntity getIEntity(Entity entity) {
|
|
|
|
|
if (entity != null && !entity.worldObj.isRemote) {
|
2021-10-20 20:27:42 -05:00
|
|
|
return (entity instanceof EntityNPCInterface ? ((EntityNPCInterface)entity).wrappedNPC : entity instanceof EntityPlayerMP ? getIPlayer((EntityPlayerMP) entity) : WrapperEntityData.get(entity));
|
2021-09-30 21:44:30 -05:00
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 06:33:39 -05:00
|
|
|
public IPlayer getIPlayer(EntityPlayerMP player) {
|
|
|
|
|
if (player != null && !player.worldObj.isRemote) {
|
|
|
|
|
return new ScriptPlayer(player);
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-12 02:57:32 -05:00
|
|
|
public IBlock getIBlock(World world, BlockPos pos) {
|
|
|
|
|
return new ScriptBlock(world, world.getBlock(pos.getX(),pos.getY(),pos.getZ()), pos);
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 06:33:39 -05:00
|
|
|
public IBlock getIBlock(World world, int x, int y, int z) {
|
|
|
|
|
return new ScriptBlock(world, world.getBlock(x, y, z), new BlockPos(x,y,z));
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-12 03:23:56 -05:00
|
|
|
public INbt getINbt(NBTTagCompound compound) {
|
|
|
|
|
return compound == null?new ScriptNbt(new NBTTagCompound()):new ScriptNbt(compound);
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-30 21:44:30 -05:00
|
|
|
public ICustomNpc createNPC(World world) {
|
|
|
|
|
if (world.isRemote) {
|
|
|
|
|
return null;
|
|
|
|
|
} else {
|
|
|
|
|
EntityCustomNpc npc = new EntityCustomNpc(world);
|
|
|
|
|
return npc.wrappedNPC;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ICustomNpc spawnNPC(World world, int x, int y, int z) {
|
|
|
|
|
if (world.isRemote) {
|
|
|
|
|
return null;
|
|
|
|
|
} else {
|
|
|
|
|
EntityCustomNpc npc = new EntityCustomNpc(world);
|
|
|
|
|
npc.setPositionAndRotation((double)x + 0.5D, (double)y, (double)z + 0.5D, 0.0F, 0.0F);
|
|
|
|
|
npc.setHealth(npc.getMaxHealth());
|
|
|
|
|
world.spawnEntityInWorld(npc);
|
|
|
|
|
return npc.wrappedNPC;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static NpcAPI Instance() {
|
|
|
|
|
if (instance == null) {
|
|
|
|
|
instance = new WrapperNpcAPI();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return instance;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public EventBus events() {
|
|
|
|
|
return EVENT_BUS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IItemStack getIItemStack(ItemStack itemstack) {
|
|
|
|
|
return (IItemStack)(itemstack != null && itemstack.stackSize > 0 ? new ScriptItemStack(itemstack) : new ScriptItemStack(new ItemStack(Item.getItemById(0))));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IWorld getIWorld(WorldServer world) {
|
|
|
|
|
ScriptWorld w = (ScriptWorld)worldCache.get(world.provider.dimensionId);
|
|
|
|
|
if (w != null) {
|
|
|
|
|
w.world = world;
|
|
|
|
|
return w;
|
|
|
|
|
} else {
|
|
|
|
|
worldCache.put(world.provider.dimensionId, w = ScriptWorld.createNew(world));
|
|
|
|
|
return w;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IWorld getIWorld(int dimensionId) {
|
|
|
|
|
WorldServer[] var2 = CustomNpcs.getServer().worldServers;
|
|
|
|
|
int var3 = var2.length;
|
|
|
|
|
|
|
|
|
|
for(int var4 = 0; var4 < var3; ++var4) {
|
|
|
|
|
WorldServer world = var2[var4];
|
|
|
|
|
if (world.provider.dimensionId == dimensionId) {
|
|
|
|
|
return this.getIWorld(world);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw new CustomNPCsException("Unknown dimension id: " + dimensionId, new Object[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IContainer getIContainer(IInventory inventory) {
|
|
|
|
|
return new ScriptContainer(inventory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IContainer getIContainer(Container container) {
|
|
|
|
|
return (IContainer)(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", new Object[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-19 19:49:43 -05:00
|
|
|
public void executeCommand(IWorld world, String command) {
|
|
|
|
|
//if(!world.getMCWorld().isRemote)
|
|
|
|
|
NoppesUtilServer.runCommand(world.getMCWorld(), "API", command);
|
2021-09-30 21:44:30 -05:00
|
|
|
}
|
|
|
|
|
public String getRandomName(int dictionary, int gender) {
|
|
|
|
|
return CustomNpcs.MARKOV_GENERATOR[dictionary].fetch(gender);
|
|
|
|
|
}
|
|
|
|
|
}
|