mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-13 00:47:50 +00:00
117 files changed
+8726
-440
No files matched your search
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module external.linked.project.id="CustomNPC-Plus-1.21" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="com.yourname.modid" external.system.module.version="1.2.1" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/api/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/api/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Gradle: :forgeSrc:1.7.10-10.13.4.1614-1.7.10" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.minecraft:launchwrapper:1.12" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.code.findbugs:jsr305:1.3.9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.ow2.asm:asm-debug-all:5.0.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.typesafe.akka:akka-actor_2.11:2.3.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.typesafe:config:1.2.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-actors-migration_2.11:1.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-compiler:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-library:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-parser-combinators_2.11:1.0.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-reflect:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-swing_2.11:1.0.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-xml_2.11:1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.sf.jopt-simple:jopt-simple:4.5" level="project" />
|
||||
<orderEntry type="library" name="Gradle: lzma:lzma:0.0.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.mojang:realms:1.3.5" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.commons:commons-compress:1.8.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpclient:4.3.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: commons-logging:commons-logging:1.1.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.httpcomponents:httpcore:4.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: java3d:vecmath:1.3.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.sf.trove4j:trove4j:3.0.3" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.ibm.icu:icu4j-core-mojang:51.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.paulscode:codecjorbis:20101023" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.paulscode:codecwav:20101023" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.paulscode:libraryjavasound:20101123" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.paulscode:librarylwjglopenal:20100824" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.paulscode:soundsystem:20120107" level="project" />
|
||||
<orderEntry type="library" name="Gradle: io.netty:netty-all:4.0.10.Final" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.guava:guava:17.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.commons:commons-lang3:3.3.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: commons-io:commons-io:2.4" level="project" />
|
||||
<orderEntry type="library" name="Gradle: commons-codec:commons-codec:1.9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.jinput:jinput:2.0.5" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.jutils:jutils:1.0.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.2.4" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.mojang:authlib:1.5.16" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-api:2.0-beta9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.apache.logging.log4j:log4j-core:2.0-beta9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.lwjgl.lwjgl:lwjgl:2.9.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.lwjgl.lwjgl:lwjgl_util:2.9.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch:5.16" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang:scala-actors:2.11.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang.modules:scala-xml_2.11:1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.scala-lang.modules:scala-parser-combinators_2.11:1.0.1" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:2.0.5:natives-linux" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:2.0.5:natives-windows" level="project" />
|
||||
<orderEntry type="library" name="Gradle: net.java.jinput:jinput-platform:2.0.5:natives-osx" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch-platform:5.16:natives-windows-32" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch-platform:5.16:natives-windows-64" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch-platform:5.16:natives-osx" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch-external-platform:4.5:natives-windows-32" level="project" />
|
||||
<orderEntry type="library" name="Gradle: tv.twitch:twitch-external-platform:4.5:natives-windows-64" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.lwjgl.lwjgl:lwjgl-platform:2.9.1:natives-windows" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.lwjgl.lwjgl:lwjgl-platform:2.9.1:natives-linux" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.lwjgl.lwjgl:lwjgl-platform:2.9.1:natives-osx" level="project" />
|
||||
<orderEntry type="module-library" scope="RUNTIME">
|
||||
<library name="Gradle: C__Users_luisc__gradle_caches_minecraft_net_minecraftforge_forge_1_7_10_10_13_4_1614_1_7_10_start">
|
||||
<CLASSES>
|
||||
<root url="file://$USER_HOME$/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.4.1614-1.7.10/start" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="guava-31.0.1-jre" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -26,6 +26,9 @@ minecraft {
|
||||
runDir = "eclipse"
|
||||
}
|
||||
|
||||
sourceCompatibility = 1.8
|
||||
targetCompatibility = 1.8
|
||||
|
||||
dependencies {
|
||||
// you may put jars on which you depend on in ./libs
|
||||
// or you may define them like so..
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.google.common.collect.AbstractIterator;
|
||||
import java.util.Iterator;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.util.Vec3i;
|
||||
|
||||
@@ -13,7 +12,7 @@ import net.minecraft.util.Vec3i;
|
||||
public class BlockPos extends Vec3i{
|
||||
/** The BlockPos with all coordinates 0 */
|
||||
public static final BlockPos ORIGIN = new BlockPos(0, 0, 0);
|
||||
private static final int NUM_X_BITS = 1 + MathHelper.calculateLogBaseTwo(MathHelper.roundUpToPowerOfTwo(30000000));
|
||||
private static final int NUM_X_BITS = 1 + 25;//MathHelper.calculateLogBaseTwo(MathHelper.roundUpToPowerOfTwo(30000000));
|
||||
private static final int NUM_Z_BITS = NUM_X_BITS;
|
||||
private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS;
|
||||
private static final int Y_SHIFT = 0 + NUM_Z_BITS;
|
||||
|
||||
@@ -5,7 +5,9 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.stats.Achievement;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import noppes.npcs.blocks.tiles.TileNpcContainer;
|
||||
import noppes.npcs.constants.EnumGuiType;
|
||||
import noppes.npcs.containers.ContainerCarpentryBench;
|
||||
@@ -28,8 +30,11 @@ import noppes.npcs.containers.ContainerNPCTraderSetup;
|
||||
import noppes.npcs.containers.ContainerNpcItemGiver;
|
||||
import noppes.npcs.containers.ContainerNpcQuestReward;
|
||||
import noppes.npcs.containers.ContainerNpcQuestTypeItem;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import cpw.mods.fml.common.network.IGuiHandler;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
|
||||
public class CommonProxy implements IGuiHandler {
|
||||
|
||||
@@ -41,6 +46,10 @@ public class CommonProxy implements IGuiHandler {
|
||||
CustomNpcs.ChannelPlayer.register(new PacketHandlerPlayer());
|
||||
}
|
||||
|
||||
public PlayerData getPlayerData(EntityPlayer player) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
if(ID > EnumGuiType.values().length)
|
||||
@@ -55,31 +64,31 @@ public class CommonProxy implements IGuiHandler {
|
||||
|
||||
if(gui == EnumGuiType.PlayerBankSmall)
|
||||
return new ContainerNPCBankSmall(player, x , y);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.PlayerBankUnlock)
|
||||
return new ContainerNPCBankUnlock(player, x , y);
|
||||
|
||||
if(gui == EnumGuiType.PlayerBankUprade)
|
||||
return new ContainerNPCBankUpgrade(player, x , y);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.PlayerBankLarge)
|
||||
return new ContainerNPCBankLarge(player, x , y);
|
||||
|
||||
if(gui == EnumGuiType.PlayerFollowerHire)
|
||||
return new ContainerNPCFollowerHire(npc, player);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.PlayerFollower)
|
||||
return new ContainerNPCFollower(npc, player);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.PlayerTrader)
|
||||
return new ContainerNPCTrader(npc, player);
|
||||
|
||||
if(gui == EnumGuiType.PlayerAnvil)
|
||||
return new ContainerCarpentryBench(player.inventory, player.worldObj, x, y, z);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.SetupItemGiver)
|
||||
return new ContainerNpcItemGiver(npc, player);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.SetupTrader)
|
||||
return new ContainerNPCTraderSetup(npc, player);
|
||||
|
||||
@@ -88,10 +97,10 @@ public class CommonProxy implements IGuiHandler {
|
||||
|
||||
if(gui == EnumGuiType.QuestReward)
|
||||
return new ContainerNpcQuestReward(player);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.QuestItem)
|
||||
return new ContainerNpcQuestTypeItem(player);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.ManageRecipes)
|
||||
return new ContainerManageRecipes(player,x);
|
||||
|
||||
@@ -103,13 +112,13 @@ public class CommonProxy implements IGuiHandler {
|
||||
|
||||
if(gui == EnumGuiType.Crate)
|
||||
return new ContainerCrate(player.inventory, (TileNpcContainer)player.worldObj.getTileEntity(x, y, z));
|
||||
|
||||
|
||||
if(gui == EnumGuiType.PlayerMailman)
|
||||
return new ContainerMail(player, x == 1, y == 1);
|
||||
|
||||
|
||||
if(gui == EnumGuiType.CompanionInv)
|
||||
return new ContainerNPCCompanion(npc, player);
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -129,19 +138,21 @@ public class CommonProxy implements IGuiHandler {
|
||||
|
||||
|
||||
public void openGui(int i, int j, int k, EnumGuiType gui, EntityPlayer player) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void openGui(EntityPlayer player, Object guiscreen) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void spawnParticle(EntityLivingBase player, String string, Object... ob) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
|
||||
}
|
||||
|
||||
public FakePlayer getCommandPlayer(IWorld world) { return null; }
|
||||
|
||||
public boolean hasClient() {
|
||||
return false;
|
||||
}
|
||||
@@ -152,7 +163,7 @@ public class CommonProxy implements IGuiHandler {
|
||||
|
||||
public void registerItem(Item item) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
|
||||
}
|
||||
|
||||
public ModelBiped getSkirtModel() {
|
||||
@@ -160,8 +171,15 @@ public class CommonProxy implements IGuiHandler {
|
||||
}
|
||||
|
||||
public void spawnParticle(String particle, double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float scale) {
|
||||
|
||||
double motionX, double motionY, double motionZ, float scale) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public String getAchievementDesc(Achievement achievement) {
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean isGUIOpen(){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,7 @@ 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.wrapper.WrapperNpcAPI;
|
||||
|
||||
@Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.2.1")
|
||||
public class CustomNpcs {
|
||||
@@ -175,6 +176,9 @@ public class CustomNpcs {
|
||||
MinecraftForge.EVENT_BUS.register(new ServerEventsHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new ScriptController());
|
||||
|
||||
ScriptPlayerEventHandler scriptPlayerEventHandler = new ScriptPlayerEventHandler();
|
||||
MinecraftForge.EVENT_BUS.register(scriptPlayerEventHandler);
|
||||
FMLCommonHandler.instance().bus().register(scriptPlayerEventHandler.registerForgeEvents());
|
||||
FMLCommonHandler.instance().bus().register(new ServerTickHandler());
|
||||
|
||||
registerNpc(EntityNPCHumanMale.class, "npchumanmale");
|
||||
@@ -244,7 +248,10 @@ public class CustomNpcs {
|
||||
new SpawnController();
|
||||
new LinkedNpcController();
|
||||
ScriptController.Instance.loadStoredData();
|
||||
ScriptController.Instance.loadForgeScripts();
|
||||
ScriptController.Instance.loadPlayerScripts();
|
||||
ScriptController.HasStart = false;
|
||||
WrapperNpcAPI.clearCache();
|
||||
|
||||
Set<String> names = Block.blockRegistry.getKeys();
|
||||
for(String name : names){
|
||||
@@ -308,4 +315,33 @@ public class CustomNpcs {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
public static MinecraftServer getServer(){
|
||||
return MinecraftServer.getServer();
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,15 @@
|
||||
package noppes.npcs;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.nbt.NBTUtil;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.StringUtils;
|
||||
@@ -43,6 +50,8 @@ public class DataDisplay {
|
||||
|
||||
public byte showBossBar = 0;
|
||||
|
||||
public ArrayList<UUID> invisibleToList = new ArrayList<>();
|
||||
|
||||
public DataDisplay(EntityNPCInterface npc){
|
||||
this.npc = npc;
|
||||
|
||||
@@ -112,6 +121,13 @@ public class DataDisplay {
|
||||
nbttagcompound.setBoolean("NoLivingAnimation", disableLivingAnimation);
|
||||
nbttagcompound.setByte("BossBar", showBossBar);
|
||||
|
||||
NBTTagList list = new NBTTagList();
|
||||
for(UUID uuid : invisibleToList){
|
||||
list.appendTag(new NBTTagString(uuid.toString()));
|
||||
}
|
||||
|
||||
nbttagcompound.setTag("InvisibleToList", list);
|
||||
|
||||
return nbttagcompound;
|
||||
}
|
||||
public void readToNBT(NBTTagCompound nbttagcompound) {
|
||||
@@ -152,6 +168,13 @@ public class DataDisplay {
|
||||
disableLivingAnimation = nbttagcompound.getBoolean("NoLivingAnimation");
|
||||
showBossBar = nbttagcompound.getByte("BossBar");
|
||||
|
||||
invisibleToList.clear();
|
||||
NBTTagList tagList = (NBTTagList)nbttagcompound.getTag("InvisibleToList");
|
||||
for(int i = 0; i < tagList.tagCount(); i++){
|
||||
String nbtTagString = tagList.getStringTagAt(i);
|
||||
invisibleToList.add(UUID.fromString(nbtTagString));
|
||||
}
|
||||
|
||||
if(prevSkinType != skinType || !texture.equals(prevTexture))
|
||||
npc.textureLocation = null;
|
||||
npc.textureGlowLocation = null;
|
||||
|
||||
@@ -15,12 +15,14 @@ import noppes.npcs.controllers.ScriptContainer;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.ScriptEvent;
|
||||
import noppes.npcs.scripted.ScriptNpc;
|
||||
import noppes.npcs.scripted.event.ScriptEvent;
|
||||
import noppes.npcs.scripted.entity.ScriptNpc;
|
||||
import noppes.npcs.scripted.ScriptWorld;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.constants.JobType;
|
||||
import noppes.npcs.scripted.constants.RoleType;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
import noppes.npcs.scripted.wrapper.WrapperNpcAPI;
|
||||
|
||||
public class DataScript {
|
||||
public Map<Integer,ScriptContainer> scripts = new HashMap<Integer,ScriptContainer>();
|
||||
@@ -33,7 +35,7 @@ public class DataScript {
|
||||
public boolean enabled = false;
|
||||
|
||||
public ScriptNpc dummyNpc;
|
||||
public ScriptWorld dummyWorld;
|
||||
public IWorld dummyWorld;
|
||||
public boolean clientNeedsUpdate = false;
|
||||
public boolean aiNeedsUpdate = false;
|
||||
public boolean hasInited = false;
|
||||
@@ -113,11 +115,7 @@ public class DataScript {
|
||||
|
||||
return callScript(script);
|
||||
}
|
||||
|
||||
public boolean isEnabled(){
|
||||
return enabled && ScriptController.HasStart && !npc.worldObj.isRemote && !scripts.isEmpty();
|
||||
}
|
||||
|
||||
|
||||
private boolean callScript(ScriptContainer script){
|
||||
ScriptEngine engine = script.engine;
|
||||
engine.put("npc", dummyNpc);
|
||||
@@ -125,11 +123,12 @@ public class DataScript {
|
||||
ScriptEvent result = (ScriptEvent) engine.get("event");
|
||||
if(result == null)
|
||||
engine.put("event", result = new ScriptEvent());
|
||||
engine.put("API", new WrapperNpcAPI());
|
||||
engine.put("EntityType", entities);
|
||||
engine.put("RoleType", roles);
|
||||
engine.put("JobType", jobs);
|
||||
script.run(engine);
|
||||
|
||||
|
||||
if(clientNeedsUpdate){
|
||||
npc.updateClient = true;
|
||||
clientNeedsUpdate = false;
|
||||
@@ -140,6 +139,10 @@ public class DataScript {
|
||||
}
|
||||
return result.isCancelled();
|
||||
}
|
||||
|
||||
public boolean isEnabled(){
|
||||
return enabled && ScriptController.HasStart && !npc.worldObj.isRemote && !scripts.isEmpty();
|
||||
}
|
||||
|
||||
public void setWorld(World world) {
|
||||
if(world instanceof WorldServer)
|
||||
|
||||
@@ -0,0 +1,313 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.item.EntityXPOrb;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.event.entity.EntityEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.controllers.data.ForgeDataScript;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.*;
|
||||
import noppes.npcs.scripted.event.*;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.ChatEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.ContainerOpen;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.DamagedEntityEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.KeyPressedEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.LoginEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.LogoutEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.PickUpEvent;
|
||||
import noppes.npcs.scripted.event.PlayerEvent.DropEvent;
|
||||
import noppes.npcs.scripted.interfaces.IEntity;
|
||||
import noppes.npcs.scripted.interfaces.IItemStack;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
import noppes.npcs.scripted.wrapper.WrapperNpcAPI;
|
||||
import noppes.npcs.constants.EnumScriptType;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class EventHooks {
|
||||
public EventHooks() {
|
||||
}
|
||||
|
||||
public static void onNPCTimer(EntityNPCInterface npc, int id) {
|
||||
NpcEvent.TimerEvent event = new NpcEvent.TimerEvent(npc.wrappedNPC, id);
|
||||
ScriptEventTimer scriptEvent = new ScriptEventTimer(id);
|
||||
npc.script.callScript(EnumScriptType.TIMER, "event", scriptEvent);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerInit(PlayerDataScript handler) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.InitEvent event = new noppes.npcs.scripted.event.PlayerEvent.InitEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.INIT, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerTick(PlayerDataScript handler) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.UpdateEvent event = new noppes.npcs.scripted.event.PlayerEvent.UpdateEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.TICK, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerInteract(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.InteractEvent event) {
|
||||
handler.callScript(EnumScriptType.INTERACT, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onStartUsingItem(PlayerDataScript handler, int duration, ItemStack item){
|
||||
PlayerEvent.StartUsingItem event = new PlayerEvent.StartUsingItem(handler.getPlayer(), item, duration);
|
||||
handler.callScript(EnumScriptType.START_USING_ITEM, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onUsingItem(PlayerDataScript handler, int duration, ItemStack item){
|
||||
PlayerEvent.UsingItem event = new PlayerEvent.UsingItem(handler.getPlayer(), item, duration);
|
||||
handler.callScript(EnumScriptType.USING_ITEM, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onStopUsingItem(PlayerDataScript handler, int duration, ItemStack item){
|
||||
PlayerEvent.StopUsingItem event = new PlayerEvent.StopUsingItem(handler.getPlayer(), item, duration);
|
||||
handler.callScript(EnumScriptType.STOP_USING_ITEM, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onFinishUsingItem(PlayerDataScript handler, int duration, ItemStack item){
|
||||
PlayerEvent.FinishUsingItem event = new PlayerEvent.FinishUsingItem(handler.getPlayer(), item, duration);
|
||||
handler.callScript(EnumScriptType.FINISH_USING_ITEM, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerDropItems(PlayerDataScript handler, ArrayList<EntityItem> entityItems) {
|
||||
IItemStack[] items = new IItemStack[entityItems.size()];
|
||||
for(int i = 0; i < entityItems.size(); i++){ items[i] = NpcAPI.Instance().getIItemStack(entityItems.get(i).getEntityItem()); }
|
||||
|
||||
DropEvent event = new DropEvent(handler.getPlayer(), items);
|
||||
handler.callScript(EnumScriptType.DROP, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerPickupXP(PlayerDataScript handler, EntityXPOrb orb) {
|
||||
PlayerEvent.PickupXPEvent event = new PlayerEvent.PickupXPEvent(handler.getPlayer(), orb);
|
||||
handler.callScript(EnumScriptType.PICKUP_XP, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerToss(PlayerDataScript handler, EntityItem entityItem) {
|
||||
PlayerEvent.TossEvent event = new PlayerEvent.TossEvent(handler.getPlayer(), NpcAPI.Instance().getIItemStack(entityItem.getEntityItem()));
|
||||
handler.callScript(EnumScriptType.TOSS, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerPickUp(PlayerDataScript handler, EntityItem entityItem) {
|
||||
PickUpEvent event = new PickUpEvent(handler.getPlayer(), new ScriptItemStack(entityItem.getEntityItem()));//NpcAPI.Instance().getIItemStack(entityItem.getEntityItem()));
|
||||
handler.callScript(EnumScriptType.PICKUP, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerContainerOpen(PlayerDataScript handler, Container container) {
|
||||
ContainerOpen event = new ContainerOpen(handler.getPlayer(), NpcAPI.Instance().getIContainer(container));
|
||||
handler.callScript(EnumScriptType.CONTAINER_OPEN, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerUseHoe(PlayerDataScript handler, ItemStack hoe, int x, int y, int z) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.UseHoe event = new noppes.npcs.scripted.event.PlayerEvent.UseHoe(handler.getPlayer(), hoe, x, y, z);
|
||||
handler.callScript(EnumScriptType.USE_HOE, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerSleep(PlayerDataScript handler, int x, int y, int z) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.Sleep event = new noppes.npcs.scripted.event.PlayerEvent.Sleep(handler.getPlayer(), x, y, z);
|
||||
handler.callScript(EnumScriptType.SLEEP, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerWakeUp(PlayerDataScript handler, boolean setSpawn) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.WakeUp event = new noppes.npcs.scripted.event.PlayerEvent.WakeUp(handler.getPlayer(), setSpawn);
|
||||
handler.callScript(EnumScriptType.WAKE_UP, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerDeath(PlayerDataScript handler, DamageSource source, Entity entity) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.DiedEvent event = new noppes.npcs.scripted.event.PlayerEvent.DiedEvent(handler.getPlayer(), source, entity);
|
||||
handler.callScript(EnumScriptType.KILLED, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerKills(PlayerDataScript handler, EntityLivingBase entityLiving) {
|
||||
noppes.npcs.scripted.event.PlayerEvent.KilledEntityEvent event = new noppes.npcs.scripted.event.PlayerEvent.KilledEntityEvent(handler.getPlayer(), entityLiving);
|
||||
handler.callScript(EnumScriptType.KILLS, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerDamaged(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.DamagedEvent event) {
|
||||
handler.callScript(EnumScriptType.DAMAGED, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerLightning(PlayerDataScript handler) {
|
||||
PlayerEvent.LightningEvent event = new PlayerEvent.LightningEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.LIGHTNING, event, "event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerSound(PlayerDataScript handler, String name, float pitch, float volume) {
|
||||
PlayerEvent.SoundEvent event = new PlayerEvent.SoundEvent(handler.getPlayer(), name, pitch, volume);
|
||||
handler.callScript(EnumScriptType.PLAYSOUND, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerFall(PlayerDataScript handler, float distance) {
|
||||
PlayerEvent.FallEvent event = new PlayerEvent.FallEvent(handler.getPlayer(),distance);
|
||||
handler.callScript(EnumScriptType.FALL, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerJump(PlayerDataScript handler) {
|
||||
PlayerEvent.JumpEvent event = new PlayerEvent.JumpEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.JUMP, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerLogin(PlayerDataScript handler) {
|
||||
LoginEvent event = new LoginEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.LOGIN, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerAchievement(PlayerDataScript handler, String description) {
|
||||
PlayerEvent.Achievement event = new PlayerEvent.Achievement(handler.getPlayer(), description);
|
||||
handler.callScript(EnumScriptType.ACHIEVEMENT, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerFillBucket(PlayerDataScript handler, ItemStack current, ItemStack result) {
|
||||
PlayerEvent.FillBucket event = new PlayerEvent.FillBucket(handler.getPlayer(), current, result);
|
||||
handler.callScript(EnumScriptType.FILL_BUCKET, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerBonemeal(PlayerDataScript handler, int x, int y, int z, World world) {
|
||||
PlayerEvent.Bonemeal event = new PlayerEvent.Bonemeal(handler.getPlayer(), x, y, z, world);
|
||||
handler.callScript(EnumScriptType.BONEMEAL, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerRespawn(PlayerDataScript handler) {
|
||||
PlayerEvent.RespawnEvent event = new PlayerEvent.RespawnEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.RESPAWN, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerLogout(PlayerDataScript handler) {
|
||||
LogoutEvent event = new LogoutEvent(handler.getPlayer());
|
||||
handler.callScript(EnumScriptType.LOGOUT, event, "event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerChat(PlayerDataScript handler, ChatEvent event) {
|
||||
handler.callScript(EnumScriptType.CHAT, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerBowCharge(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent event) {
|
||||
handler.callScript(EnumScriptType.RANGED_CHARGE, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerRanged(PlayerDataScript handler, noppes.npcs.scripted.event.PlayerEvent.RangedLaunchedEvent event) {
|
||||
handler.callScript(EnumScriptType.RANGED_LAUNCHED, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerDamagedEntity(PlayerDataScript handler, DamagedEntityEvent event) {
|
||||
handler.callScript(EnumScriptType.DAMAGED_ENTITY, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerChangeDim(PlayerDataScript handler, int fromDim, int toDim) {
|
||||
PlayerEvent.ChangedDimension event = new PlayerEvent.ChangedDimension(handler.getPlayer(), fromDim, toDim);
|
||||
handler.callScript(EnumScriptType.CHANGED_DIM, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerMouseClicked(EntityPlayerMP player, int button, int mouseWheel, boolean buttonDown) {
|
||||
PlayerDataScript handler = PlayerData.get(player).scriptData;
|
||||
PlayerEvent.MouseClickedEvent event = new PlayerEvent.MouseClickedEvent(handler.getPlayer(), button, mouseWheel, buttonDown);
|
||||
handler.callScript(EnumScriptType.MOUSE_CLICKED, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerKeyPressed(EntityPlayerMP player, int button, boolean isCtrlPressed, boolean isShiftPressed, boolean isAltPressed, boolean isMetaPressed, boolean buttonDown) {
|
||||
PlayerDataScript handler = PlayerData.get(player).scriptData;
|
||||
KeyPressedEvent event = new KeyPressedEvent(handler.getPlayer(), button, isCtrlPressed, isAltPressed, isShiftPressed, isMetaPressed, buttonDown);
|
||||
handler.callScript(EnumScriptType.KEY_PRESSED, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onPlayerTimer(PlayerData data, int id) {
|
||||
PlayerDataScript handler = data.scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.TimerEvent event = new noppes.npcs.scripted.event.PlayerEvent.TimerEvent(handler.getPlayer(), id);
|
||||
handler.callScript(EnumScriptType.TIMER, event,"event", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static boolean onPlayerBreak(PlayerDataScript handler, PlayerEvent.BreakEvent event) {
|
||||
handler.callScript(EnumScriptType.BREAK_BLOCK, event,"event", event);
|
||||
return WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onForgeEntityEvent(EntityEvent event) {
|
||||
IEntity e = NpcAPI.Instance().getIEntity(event.entity);
|
||||
onForgeEvent(new noppes.npcs.scripted.event.ForgeEvent.EntityEvent(event, e), event);
|
||||
}
|
||||
|
||||
public static void onForgeWorldEvent(WorldEvent event) {
|
||||
if(ScriptController.Instance.forgeScripts.isEnabled()) {
|
||||
IWorld e = NpcAPI.Instance().getIWorld((WorldServer)event.world);
|
||||
onForgeEvent(new noppes.npcs.scripted.event.ForgeEvent.WorldEvent(event, e), event);
|
||||
}
|
||||
}
|
||||
|
||||
public static void onForgeInit(ForgeDataScript handler) {
|
||||
noppes.npcs.scripted.event.ForgeEvent.InitEvent event = new noppes.npcs.scripted.event.ForgeEvent.InitEvent();
|
||||
handler.callScript("init", event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(event);
|
||||
}
|
||||
|
||||
public static void onForgeEvent(ForgeEvent ev, Event event) {
|
||||
ForgeDataScript handler = ScriptController.Instance.forgeScripts;
|
||||
if(handler.isEnabled()) {
|
||||
String eventName = event.getClass().getName();
|
||||
int i = eventName.lastIndexOf(".");
|
||||
eventName = StringUtils.uncapitalize(eventName.substring(i + 1).replace("$", ""));
|
||||
if(event.isCancelable()) {
|
||||
ev.setCanceled(event.isCanceled());
|
||||
}
|
||||
|
||||
handler.callScript(eventName, event);
|
||||
WrapperNpcAPI.EVENT_BUS.post(ev);
|
||||
if(event.isCancelable()) {
|
||||
event.setCanceled(ev.isCanceled());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.*;
|
||||
import javax.script.Compilable;
|
||||
import javax.script.CompiledScript;
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.constants.EnumScriptType;
|
||||
import noppes.npcs.controllers.IScriptHandler;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
|
||||
public class EventScriptContainer {
|
||||
public static EventScriptContainer Current;
|
||||
//public String type = "init";
|
||||
private static String CurrentType;
|
||||
public String fullscript = "";
|
||||
public String script = "";
|
||||
public TreeMap<Long, String> console = new TreeMap();
|
||||
private HashSet<String> unknownFunctions = new HashSet();
|
||||
public boolean errored = false;
|
||||
public List<String> scripts = new ArrayList();
|
||||
public long lastCreated = 0L;
|
||||
private String currentScriptLanguage = null;
|
||||
public ScriptEngine engine = null;
|
||||
private IScriptHandler handler = null;
|
||||
private CompiledScript compScript = null;
|
||||
private boolean init = false;
|
||||
|
||||
public EventScriptContainer(IScriptHandler handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
this.script = compound.getString("Script");
|
||||
//this.type = compound.getString("Type");
|
||||
this.console = NBTTags.GetLongStringMap(compound.getTagList("Console", 10));
|
||||
this.scripts = NBTTags.getStringList(compound.getTagList("ScriptList", 10));
|
||||
this.lastCreated = 0L;
|
||||
}
|
||||
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
|
||||
compound.setString("Script", this.script);
|
||||
//compound.setString("Type", this.type);
|
||||
compound.setTag("Console", NBTTags.NBTLongStringMap(this.console));
|
||||
compound.setTag("ScriptList", NBTTags.nbtStringList(this.scripts));
|
||||
return compound;
|
||||
}
|
||||
|
||||
private String getFullCode() {
|
||||
if(!this.init) {
|
||||
this.fullscript = this.script;
|
||||
if(!this.fullscript.isEmpty()) {
|
||||
this.fullscript = this.fullscript + "\n";
|
||||
}
|
||||
|
||||
Iterator var1 = this.scripts.iterator();
|
||||
|
||||
while(var1.hasNext()) {
|
||||
String loc = (String)var1.next();
|
||||
String code = (String)ScriptController.Instance.scripts.get(loc);
|
||||
if(code != null && !code.isEmpty()) {
|
||||
this.fullscript = this.fullscript + code + "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.fullscript;
|
||||
}
|
||||
|
||||
/*public void run(ScriptEngine engine){
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
engine.getContext().setWriter(pw);
|
||||
engine.getContext().setErrorWriter(pw);
|
||||
try {
|
||||
if(compScript == null && engine instanceof Compilable)
|
||||
compScript = ((Compilable)engine).compile(getFullCode());
|
||||
|
||||
if(compScript != null){
|
||||
compScript.eval(engine.getContext());
|
||||
}
|
||||
else
|
||||
engine.eval(getFullCode());
|
||||
|
||||
} catch (Exception e) {
|
||||
errored = true;
|
||||
appandConsole(e.getMessage());
|
||||
}
|
||||
appandConsole(sw.getBuffer().toString().trim());
|
||||
}*/
|
||||
|
||||
public void run(EnumScriptType type, Event event) {
|
||||
this.run((String)type.function, (Object)event);
|
||||
}
|
||||
|
||||
public void run(String type, Object event) {
|
||||
if (!this.errored && this.hasCode() && !this.unknownFunctions.contains(type)) {
|
||||
this.setEngine(this.handler.getLanguage());
|
||||
if (this.engine != null) {
|
||||
if (ScriptController.Instance.lastLoaded > this.lastCreated) {
|
||||
this.lastCreated = ScriptController.Instance.lastLoaded;
|
||||
this.init = false;
|
||||
}
|
||||
|
||||
String var3 = "lock";
|
||||
synchronized("lock") {
|
||||
Current = this;
|
||||
CurrentType = type;
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
this.engine.getContext().setWriter(pw);
|
||||
this.engine.getContext().setErrorWriter(pw);
|
||||
|
||||
try {
|
||||
if (!this.init) {
|
||||
this.engine.eval(this.getFullCode());
|
||||
this.init = true;
|
||||
}
|
||||
|
||||
((Invocable)this.engine).invokeFunction(type, new Object[]{event});
|
||||
} catch (NoSuchMethodException var13) {
|
||||
this.unknownFunctions.add(type);
|
||||
} catch (Throwable var14) {
|
||||
this.errored = true;
|
||||
var14.printStackTrace(pw);
|
||||
} finally {
|
||||
this.appandConsole(sw.getBuffer().toString().trim());
|
||||
pw.close();
|
||||
Current = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void appandConsole(String message) {
|
||||
if (message != null && !message.isEmpty()) {
|
||||
long time = System.currentTimeMillis();
|
||||
if (this.console.containsKey(time)) {
|
||||
message = (String)this.console.get(time) + "\n" + message;
|
||||
}
|
||||
|
||||
this.console.put(time, message);
|
||||
|
||||
while(this.console.size() > 40) {
|
||||
this.console.remove(this.console.firstKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasCode() {
|
||||
return !this.getFullCode().isEmpty();
|
||||
}
|
||||
|
||||
public void setEngine(String scriptLanguage) {
|
||||
if(currentScriptLanguage != null && currentScriptLanguage.equals(scriptLanguage))
|
||||
return;
|
||||
engine = ScriptController.Instance.getEngineByName(scriptLanguage.toLowerCase());
|
||||
currentScriptLanguage = scriptLanguage;
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,9 @@ public class ModelPartData {
|
||||
public String texture;
|
||||
public byte type = 0;
|
||||
public boolean playerTexture;
|
||||
|
||||
|
||||
private ResourceLocation location;
|
||||
|
||||
|
||||
public ModelPartData(){
|
||||
playerTexture = true;
|
||||
}
|
||||
@@ -29,7 +29,7 @@ public class ModelPartData {
|
||||
compound.setBoolean("PlayerTexture", playerTexture);
|
||||
return compound;
|
||||
}
|
||||
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound){
|
||||
type = compound.getByte("Type");
|
||||
color = compound.getInteger("Color");
|
||||
@@ -37,13 +37,13 @@ public class ModelPartData {
|
||||
playerTexture = compound.getBoolean("PlayerTexture");
|
||||
location = null;
|
||||
}
|
||||
|
||||
|
||||
public ResourceLocation getResource(){
|
||||
if(texture.isEmpty())
|
||||
return null;
|
||||
if(location != null)
|
||||
return location;
|
||||
location = new ResourceLocation(texture);
|
||||
location = new ResourceLocation(texture);
|
||||
return location;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class ModelPartData {
|
||||
playerTexture = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String toString(){
|
||||
return "Color: " + color + " Type: " + type;
|
||||
}
|
||||
@@ -67,9 +67,9 @@ public class ModelPartData {
|
||||
public String getColor() {
|
||||
String str = Integer.toHexString(color);
|
||||
|
||||
while(str.length() < 6)
|
||||
str = "0" + str;
|
||||
|
||||
return str;
|
||||
while(str.length() < 6)
|
||||
str = "0" + str;
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,13 @@
|
||||
package noppes.npcs;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
import java.util.*;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagDouble;
|
||||
import net.minecraft.nbt.NBTTagInt;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import noppes.npcs.controllers.IScriptHandler;
|
||||
|
||||
public class NBTTags {
|
||||
|
||||
@@ -383,4 +378,60 @@ public class NBTTags {
|
||||
return compound;
|
||||
}
|
||||
|
||||
public static TreeMap<Long, String> GetLongStringMap(NBTTagList tagList) {
|
||||
TreeMap list = new TreeMap();
|
||||
|
||||
for(int i = 0; i < tagList.tagCount(); ++i) {
|
||||
NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i);
|
||||
list.put(Long.valueOf(nbttagcompound.getLong("Long")), nbttagcompound.getString("String"));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public static NBTTagList NBTLongStringMap(Map<Long, String> map) {
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
if(map == null) {
|
||||
return nbttaglist;
|
||||
} else {
|
||||
Iterator var2 = map.keySet().iterator();
|
||||
|
||||
while(var2.hasNext()) {
|
||||
long slot = ((Long)var2.next()).longValue();
|
||||
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
||||
nbttagcompound.setLong("Long", slot);
|
||||
nbttagcompound.setString("String", (String) map.get(Long.valueOf(slot)));
|
||||
nbttaglist.appendTag(nbttagcompound);
|
||||
}
|
||||
|
||||
return nbttaglist;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<EventScriptContainer> GetScript(NBTTagList list, IScriptHandler handler) {
|
||||
ArrayList scripts = new ArrayList();
|
||||
|
||||
for(int i = 0; i < list.tagCount(); ++i) {
|
||||
NBTTagCompound compoundd = list.getCompoundTagAt(i);
|
||||
EventScriptContainer script = new EventScriptContainer(handler);
|
||||
script.readFromNBT(compoundd);
|
||||
scripts.add(script);
|
||||
}
|
||||
|
||||
return scripts;
|
||||
}
|
||||
|
||||
public static NBTTagList NBTScript(List<EventScriptContainer> scripts) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
Iterator var2 = scripts.iterator();
|
||||
|
||||
while(var2.hasNext()) {
|
||||
EventScriptContainer script = (EventScriptContainer)var2.next();
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
script.writeToNBT(compound);
|
||||
list.appendTag(compound);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -110,6 +110,28 @@ public class NoppesUtilPlayer {
|
||||
}
|
||||
player.worldObj.updateEntityWithOptionalForce(player, false);
|
||||
}
|
||||
|
||||
public static void teleportPlayer(EntityPlayerMP player, double posX, double posY, double posZ, float yaw, float pitch, int dimension){
|
||||
if(player.dimension != dimension){
|
||||
int dim = player.dimension;
|
||||
MinecraftServer server = MinecraftServer.getServer();
|
||||
WorldServer wor = server.worldServerForDimension(dimension);
|
||||
if(wor == null){
|
||||
player.addChatMessage(new ChatComponentText("Broken transporter. Dimenion does not exist"));
|
||||
return;
|
||||
}
|
||||
player.setLocationAndAngles(posX, posY, posZ, yaw, pitch);
|
||||
server.getConfigurationManager().transferPlayerToDimension(player, dimension, new CustomTeleporter(wor));
|
||||
player.playerNetServerHandler.setPlayerLocation(posX, posY, posZ, yaw, pitch);
|
||||
|
||||
if(!wor.playerEntities.contains(player))
|
||||
wor.spawnEntityInWorld(player);
|
||||
}
|
||||
else{
|
||||
player.playerNetServerHandler.setPlayerLocation(posX, posY, posZ, yaw, pitch);
|
||||
}
|
||||
player.worldObj.updateEntityWithOptionalForce(player, false);
|
||||
}
|
||||
|
||||
private static void followerBuy(RoleFollower role,IInventory currencyInv,EntityPlayerMP player, EntityNPCInterface npc){
|
||||
ItemStack currency = currencyInv.getStackInSlot(0);
|
||||
@@ -375,5 +397,7 @@ public class NoppesUtilPlayer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void isGUIOpen(EntityPlayerMP player){
|
||||
Server.sendData(player, EnumPacketClient.ISGUIOPEN);
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.command.server.CommandBlockLogic;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
@@ -21,6 +22,8 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.entity.projectile.EntityArrow;
|
||||
import net.minecraft.entity.projectile.EntityThrowable;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -31,8 +34,8 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityCommandBlock;
|
||||
import net.minecraft.tileentity.TileEntityMobSpawner;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import noppes.npcs.constants.EnumGuiType;
|
||||
import noppes.npcs.constants.EnumPacketClient;
|
||||
@@ -69,7 +72,7 @@ import noppes.npcs.controllers.TransportLocation;
|
||||
import noppes.npcs.entity.EntityDialogNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.RoleTransporter;
|
||||
import noppes.npcs.scripted.ScriptEventDialog;
|
||||
import noppes.npcs.scripted.event.ScriptEventDialog;
|
||||
|
||||
public class NoppesUtilServer {
|
||||
private static HashMap<String,Quest> editingQuests = new HashMap<String,Quest>();
|
||||
@@ -216,6 +219,19 @@ public class NoppesUtilServer {
|
||||
logic.func_145754_b("@"+name);
|
||||
logic.func_145755_a(executer.worldObj);
|
||||
}
|
||||
|
||||
public static void runCommand(World world, String name, String command) {
|
||||
TileEntityCommandBlock tile = new TileEntityCommandBlock();
|
||||
tile.setWorldObj(world.provider.worldObj);
|
||||
tile.xCoord = 0;
|
||||
tile.yCoord = 0;
|
||||
tile.zCoord = 0;
|
||||
|
||||
CommandBlockLogic logic = tile.func_145993_a();
|
||||
logic.func_145752_a(command);
|
||||
logic.func_145754_b("@"+name);
|
||||
logic.func_145755_a(world);
|
||||
}
|
||||
|
||||
public static void consumeItemStack(int i, EntityPlayer player){
|
||||
ItemStack item = player.inventory.getCurrentItem();
|
||||
@@ -291,6 +307,22 @@ public class NoppesUtilServer {
|
||||
Server.sendAssociatedData(entity, EnumPacketClient.PARTICLE, entity.posX, entity.posY, entity.posZ, entity.height, entity.width, entity.yOffset, particle);
|
||||
}
|
||||
|
||||
public static void spawnScriptedParticle(Entity entity, String directory, int HEXcolor, int amount, int maxAge,
|
||||
double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float gravity,
|
||||
float scale1, float scale2, float scaleRate, int scaleRateStart,
|
||||
float alpha1, float alpha2, float alphaRate, int alphaRateStart,
|
||||
int entityID
|
||||
){
|
||||
Server.sendAssociatedData(entity, EnumPacketClient.SCRIPTED_PARTICLE,
|
||||
directory, HEXcolor, amount, maxAge,
|
||||
x, y, z,
|
||||
motionX, motionY, motionZ, gravity,
|
||||
scale1, scale2, scaleRate, scaleRateStart,
|
||||
alpha1, alpha2, alphaRate, alphaRateStart,
|
||||
entityID
|
||||
);
|
||||
}
|
||||
|
||||
public static void deleteNpc(EntityNPCInterface npc,EntityPlayer player) {
|
||||
Server.sendAssociatedData(npc, EnumPacketClient.DELETE_NPC, npc.getEntityId());
|
||||
@@ -658,4 +690,25 @@ public class NoppesUtilServer {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Entity GetDamageSourcee(DamageSource damagesource) {
|
||||
Object entity = damagesource.getEntity();
|
||||
if(entity == null) {
|
||||
entity = damagesource.getSourceOfDamage();
|
||||
}
|
||||
|
||||
if(entity instanceof EntityArrow && ((EntityArrow)entity).shootingEntity instanceof EntityLivingBase) {
|
||||
entity = ((EntityArrow)entity).shootingEntity;
|
||||
} else if(entity instanceof EntityThrowable) {
|
||||
entity = ((EntityThrowable)entity).getThrower();
|
||||
}
|
||||
|
||||
return (Entity)entity;
|
||||
}
|
||||
|
||||
public static void isGUIOpen(ByteBuf buffer, EntityPlayer player) throws IOException {
|
||||
PlayerData playerdata = PlayerDataController.instance.getPlayerData(player);
|
||||
boolean isGUIOpen = buffer.readBoolean();
|
||||
playerdata.setGUIOpen(isGUIOpen);
|
||||
}
|
||||
}
|
||||
@@ -22,13 +22,7 @@ import noppes.npcs.constants.EnumPacketClient;
|
||||
import noppes.npcs.constants.EnumPlayerPacket;
|
||||
import noppes.npcs.constants.EnumRoleType;
|
||||
import noppes.npcs.containers.ContainerMail;
|
||||
import noppes.npcs.controllers.BankData;
|
||||
import noppes.npcs.controllers.PlayerDataController;
|
||||
import noppes.npcs.controllers.PlayerFactionData;
|
||||
import noppes.npcs.controllers.PlayerMail;
|
||||
import noppes.npcs.controllers.PlayerMailData;
|
||||
import noppes.npcs.controllers.PlayerQuestController;
|
||||
import noppes.npcs.controllers.PlayerQuestData;
|
||||
import noppes.npcs.controllers.*;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@@ -67,17 +61,31 @@ public class PacketHandlerPlayer{
|
||||
return;
|
||||
NoppesUtilServer.sendOpenGui(player, EnumGuiType.CompanionInv, npc);
|
||||
}
|
||||
else if(type == EnumPlayerPacket.KeyPressed) {
|
||||
if(ScriptController.Instance.languages.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
EventHooks.onPlayerKeyPressed(player, buffer.readInt(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean(), buffer.readBoolean());
|
||||
}
|
||||
else if(type == EnumPlayerPacket.MouseClicked) {
|
||||
if(ScriptController.Instance.languages.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
EventHooks.onPlayerMouseClicked(player, buffer.readInt(), buffer.readInt(), buffer.readBoolean());
|
||||
}
|
||||
else if(type == EnumPlayerPacket.FollowerHire){
|
||||
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
||||
if(npc == null || npc.advanced.role != EnumRoleType.Follower)
|
||||
return;
|
||||
NoppesUtilPlayer.hireFollower(player,npc);
|
||||
NoppesUtilPlayer.hireFollower(player, npc);
|
||||
}
|
||||
else if(type == EnumPlayerPacket.FollowerExtend){
|
||||
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
||||
if(npc == null || npc.advanced.role != EnumRoleType.Follower)
|
||||
return;
|
||||
NoppesUtilPlayer.extendFollower(player,npc);
|
||||
NoppesUtilPlayer.extendFollower(player, npc);
|
||||
Server.sendData(player, EnumPacketClient.GUI_DATA, npc.roleInterface.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
else if(type == EnumPlayerPacket.FollowerState){
|
||||
@@ -124,17 +132,17 @@ public class PacketHandlerPlayer{
|
||||
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
||||
if(npc == null)
|
||||
return;
|
||||
NoppesUtilPlayer.dialogSelected(buffer.readInt(),buffer.readInt(),player,npc);
|
||||
NoppesUtilPlayer.dialogSelected(buffer.readInt(), buffer.readInt(), player, npc);
|
||||
}
|
||||
else if(type == EnumPlayerPacket.CheckQuestCompletion){
|
||||
PlayerQuestData playerdata = PlayerDataController.instance.getPlayerData(player).questData;
|
||||
playerdata.checkQuestCompletion(player,null);
|
||||
playerdata.checkQuestCompletion(player, null);
|
||||
}
|
||||
else if(type == EnumPlayerPacket.QuestLog){
|
||||
NoppesUtilPlayer.sendQuestLogData(player);
|
||||
}
|
||||
else if(type == EnumPlayerPacket.QuestCompletion){
|
||||
NoppesUtilPlayer.questCompletion(player,buffer.readInt());
|
||||
NoppesUtilPlayer.questCompletion(player, buffer.readInt());
|
||||
}
|
||||
else if(type == EnumPlayerPacket.FactionsGet){
|
||||
PlayerFactionData data = PlayerDataController.instance.getPlayerData(player).factionData;
|
||||
|
||||
@@ -9,7 +9,6 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.passive.EntityVillager;
|
||||
@@ -62,6 +61,8 @@ import noppes.npcs.controllers.SpawnController;
|
||||
import noppes.npcs.controllers.SpawnData;
|
||||
import noppes.npcs.controllers.TransportController;
|
||||
import noppes.npcs.controllers.TransportLocation;
|
||||
import noppes.npcs.controllers.data.ForgeDataScript;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.JobSpawner;
|
||||
@@ -88,13 +89,19 @@ public class PacketHandlerServer{
|
||||
ItemStack item = player.inventory.getCurrentItem();
|
||||
|
||||
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
||||
|
||||
if(type == EnumPacketServer.IsGuiOpen) {
|
||||
isGuiOpenPacket(buffer, player);
|
||||
return;
|
||||
}
|
||||
|
||||
if(type.needsNpc && npc == null){
|
||||
|
||||
}
|
||||
else if(type.hasPermission() && !CustomNpcsPermissions.Instance.hasPermission(player, type.permission)){
|
||||
//player doesnt have permission todo this
|
||||
//player doesnt have permission to do this
|
||||
}
|
||||
else if(item == null )
|
||||
else if(item == null && (type == EnumPacketServer.ScriptPlayerGet || type == EnumPacketServer.ScriptPlayerSave || type == EnumPacketServer.ScriptForgeGet || type == EnumPacketServer.ScriptForgeSave))
|
||||
warn(player, "tried to use custom npcs without a tool in hand, probably a hacker");
|
||||
else if(item.getItem() == CustomItems.wand)
|
||||
wandPackets(type, buffer, player, npc);
|
||||
@@ -106,6 +113,10 @@ public class PacketHandlerServer{
|
||||
clonePackets(type, buffer, player);
|
||||
else if(item.getItem() == CustomItems.teleporter)
|
||||
featherPackets(type, buffer, player);
|
||||
else if(type == EnumPacketServer.ScriptPlayerGet || type == EnumPacketServer.ScriptPlayerSave)
|
||||
playerScriptPackets(type, buffer, player);
|
||||
else if(type == EnumPacketServer.ScriptForgeGet || type == EnumPacketServer.ScriptForgeSave)
|
||||
forgeScriptPackets(type, buffer, player);
|
||||
else if(item.getItem() == CustomItems.scripter)
|
||||
scriptPackets(type, buffer, player, npc);
|
||||
else if(item.getItem() == Item.getItemFromBlock(CustomItems.waypoint) || item.getItem() == Item.getItemFromBlock(CustomItems.border) || item.getItem() == Item.getItemFromBlock(CustomItems.redstoneBlock))
|
||||
@@ -114,7 +125,11 @@ public class PacketHandlerServer{
|
||||
LogWriter.error("Error with EnumPacketServer." + type, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void isGuiOpenPacket(ByteBuf buffer, EntityPlayerMP player) throws IOException {
|
||||
NoppesUtilServer.isGUIOpen(buffer, player);
|
||||
}
|
||||
|
||||
private void scriptPackets(EnumPacketServer type, ByteBuf buffer, EntityPlayerMP player, EntityNPCInterface npc) throws Exception {
|
||||
if(type == EnumPacketServer.ScriptDataSave){
|
||||
npc.script.readFromNBT(Server.readNBT(buffer));
|
||||
@@ -128,6 +143,30 @@ public class PacketHandlerServer{
|
||||
}
|
||||
}
|
||||
|
||||
private void playerScriptPackets(EnumPacketServer type, ByteBuf buffer, EntityPlayerMP player) throws Exception {
|
||||
NBTTagCompound compound;
|
||||
if(type == EnumPacketServer.ScriptPlayerGet) {
|
||||
PlayerDataScript data = ScriptController.Instance.playerScripts;
|
||||
compound = data.writeToNBT(new NBTTagCompound());
|
||||
compound.setTag("Languages", ScriptController.Instance.nbtLanguages());
|
||||
Server.sendData(player, EnumPacketClient.GUI_DATA, compound);
|
||||
} else if(type == EnumPacketServer.ScriptPlayerSave) {
|
||||
ScriptController.Instance.setPlayerScripts(Server.readNBT(buffer));
|
||||
}
|
||||
}
|
||||
|
||||
private void forgeScriptPackets(EnumPacketServer type, ByteBuf buffer, EntityPlayerMP player) throws Exception {
|
||||
NBTTagCompound compound;
|
||||
if (type == EnumPacketServer.ScriptForgeGet) {
|
||||
ForgeDataScript data = ScriptController.Instance.forgeScripts;
|
||||
compound = data.writeToNBT(new NBTTagCompound());
|
||||
compound.setTag("Languages", ScriptController.Instance.nbtLanguages());
|
||||
Server.sendData(player, EnumPacketClient.GUI_DATA, new Object[]{compound});
|
||||
} else if (type == EnumPacketServer.ScriptForgeSave) {
|
||||
ScriptController.Instance.setForgeScripts(Server.readNBT(buffer));
|
||||
}
|
||||
}
|
||||
|
||||
private void featherPackets(EnumPacketServer type, ByteBuf buffer, EntityPlayerMP player) throws IOException {
|
||||
if(type == EnumPacketServer.DimensionsGet){
|
||||
HashMap<String,Integer> map = new HashMap<String,Integer>();
|
||||
|
||||
@@ -0,0 +1,477 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs;
|
||||
|
||||
import com.google.common.reflect.ClassPath;
|
||||
import com.google.common.reflect.ClassPath.ClassInfo;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.Vector;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import cpw.mods.fml.common.eventhandler.EventPriority;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.InputEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
import cpw.mods.fml.common.gameevent.TickEvent;
|
||||
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.EntityEvent;
|
||||
import net.minecraftforge.event.entity.EntityEvent.EntityConstructing;
|
||||
import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
|
||||
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
|
||||
import net.minecraftforge.event.entity.item.ItemTossEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingFallEvent;
|
||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||
import net.minecraftforge.event.entity.player.*;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent.PotentialSpawns;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.controllers.PlayerDataController;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.event.ForgeEvent;
|
||||
import noppes.npcs.controllers.PixelmonHelper;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
public class ScriptPlayerEventHandler {
|
||||
public ScriptPlayerEventHandler() {
|
||||
}
|
||||
@SubscribeEvent
|
||||
public void onServerTick(TickEvent.PlayerTickEvent event) {
|
||||
if(event.side == Side.SERVER && event.phase == TickEvent.Phase.START) {
|
||||
EntityPlayer player = event.player;
|
||||
PlayerData data = PlayerData.get(player);
|
||||
EventHooks.onPlayerTick(data.scriptData);
|
||||
|
||||
if(PlayerDataController.instance != null) {
|
||||
PlayerDataController.instance.getPlayerData(player).scriptData = data.scriptData;
|
||||
PlayerDataController.instance.getPlayerData(player).timers.update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(EntityInteractEvent event) {
|
||||
if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.PlayerEvent.InteractEvent(handler.getPlayer(), 1, NpcAPI.Instance().getIEntity(event.target));
|
||||
event.setCanceled(EventHooks.onPlayerInteract(handler, ev));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(ArrowNockEvent event) {
|
||||
if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent ev = new noppes.npcs.scripted.event.PlayerEvent.RangedChargeEvent(handler.getPlayer());
|
||||
EventHooks.onPlayerBowCharge(handler, ev);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(ArrowLooseEvent event) {
|
||||
if(!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.RangedLaunchedEvent ev = new noppes.npcs.scripted.event.PlayerEvent.RangedLaunchedEvent(handler.getPlayer(), event.bow, event.charge);
|
||||
EventHooks.onPlayerRanged(handler, ev);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(BlockEvent.BreakEvent event) {
|
||||
if(!event.getPlayer().worldObj.isRemote && event.world instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.getPlayer()).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.BreakEvent ev = new noppes.npcs.scripted.event.PlayerEvent.BreakEvent(handler.getPlayer(), NpcAPI.Instance().getIBlock(event.world, new BlockPos(event.x,event.y,event.z)), event.getExpToDrop());
|
||||
event.setCanceled(EventHooks.onPlayerBreak(handler, ev));
|
||||
event.setExpToDrop(ev.exp);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerUseItemEvent.Start event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
event.setCanceled(EventHooks.onStartUsingItem(handler, event.duration, event.item));
|
||||
}
|
||||
}
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerUseItemEvent.Tick event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
event.setCanceled(EventHooks.onUsingItem(handler, event.duration, event.item));
|
||||
}
|
||||
}
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerUseItemEvent.Stop event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
event.setCanceled(EventHooks.onStopUsingItem(handler, event.duration, event.item));
|
||||
}
|
||||
}
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerUseItemEvent.Finish event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onFinishUsingItem(handler, event.duration, event.item);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerDropsEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
event.setCanceled(EventHooks.onPlayerDropItems(handler, event.drops));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerPickupXpEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerPickupXP(handler, event.orb);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerEvent.PlayerChangedDimensionEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerChangeDim(handler, event.fromDim, event.toDim);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerEvent.ItemPickupEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerPickUp(handler, event.pickedUp);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerOpenContainerEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerContainerOpen(handler, event.entityPlayer.openContainer);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(UseHoeEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerUseHoe(handler, event.current, event.x, event.y, event.z);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerSleepInBedEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerSleep(handler, event.x, event.y, event.z);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerWakeUpEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerWakeUp(handler, event.setSpawn);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(FillBucketEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerFillBucket(handler, event.current, event.result);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(BonemealEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerBonemeal(handler, event.x, event.y, event.z, event.world);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(AchievementEvent event) {
|
||||
if(event.entityPlayer.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.entityPlayer).scriptData;
|
||||
EventHooks.onPlayerAchievement(handler, CustomNpcs.proxy.getAchievementDesc(event.achievement));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(ItemTossEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerToss(handler, event.entityItem);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(LivingFallEvent event) {
|
||||
if(event.entityLiving.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler;
|
||||
if (event.entityLiving instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entityLiving).scriptData;
|
||||
EventHooks.onPlayerFall(handler, event.distance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(LivingEvent.LivingJumpEvent event) {
|
||||
if(event.entityLiving.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler;
|
||||
if (event.entityLiving instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entityLiving).scriptData;
|
||||
EventHooks.onPlayerJump(handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(EntityStruckByLightningEvent event) {
|
||||
if(event.entity.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler;
|
||||
if (event.entity instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entity).scriptData;
|
||||
EventHooks.onPlayerLightning(handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlaySoundAtEntityEvent event) {
|
||||
if(event.entity.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler;
|
||||
if (event.entity instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entity).scriptData;
|
||||
EventHooks.onPlayerSound(handler,event.name,event.pitch,event.volume);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(LivingDeathEvent event) {
|
||||
if(event.entityLiving.worldObj instanceof WorldServer) {
|
||||
Entity source = NoppesUtilServer.GetDamageSourcee(event.source);
|
||||
PlayerDataScript handler;
|
||||
if(event.entityLiving instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entityLiving).scriptData;
|
||||
EventHooks.onPlayerDeath(handler, event.source, source);
|
||||
}
|
||||
|
||||
if(source instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)source).scriptData;
|
||||
EventHooks.onPlayerKills(handler, event.entityLiving);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(LivingHurtEvent event) {
|
||||
if(event.entityLiving.worldObj instanceof WorldServer) {
|
||||
Entity source = NoppesUtilServer.GetDamageSourcee(event.source);
|
||||
PlayerDataScript handler;
|
||||
if(event.entityLiving instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)event.entityLiving).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.DamagedEvent pevent = new noppes.npcs.scripted.event.PlayerEvent.DamagedEvent(handler.getPlayer(), source, event.ammount, event.source);
|
||||
event.setCanceled(EventHooks.onPlayerDamaged(handler, pevent));
|
||||
event.ammount = pevent.damage;
|
||||
}
|
||||
|
||||
if(source instanceof EntityPlayer) {
|
||||
handler = PlayerData.get((EntityPlayer)source).scriptData;
|
||||
noppes.npcs.scripted.event.PlayerEvent.DamagedEntityEvent pevent1 = new noppes.npcs.scripted.event.PlayerEvent.DamagedEntityEvent(handler.getPlayer(), event.entityLiving, event.ammount, event.source);
|
||||
event.setCanceled(EventHooks.onPlayerDamagedEntity(handler, pevent1));
|
||||
event.ammount = pevent1.damage;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerEvent.PlayerRespawnEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerRespawn(handler);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerEvent.PlayerLoggedInEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerLogin(handler);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void invoke(PlayerEvent.PlayerLoggedOutEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
EventHooks.onPlayerLogout(handler);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent(
|
||||
priority = EventPriority.HIGHEST
|
||||
)
|
||||
public void invoke(net.minecraftforge.event.ServerChatEvent event) {
|
||||
if(event.player.worldObj instanceof WorldServer && !event.player.equals(EntityNPCInterface.chateventPlayer)) {
|
||||
PlayerDataScript handler = PlayerData.get(event.player).scriptData;
|
||||
String message = event.message;
|
||||
noppes.npcs.scripted.event.PlayerEvent.ChatEvent ev = new noppes.npcs.scripted.event.PlayerEvent.ChatEvent(handler.getPlayer(), event.message);
|
||||
EventHooks.onPlayerChat(handler, ev);
|
||||
event.setCanceled(ev.isCanceled());
|
||||
if(!message.equals(ev.message)) {
|
||||
ChatComponentTranslation chat = new ChatComponentTranslation("", new Object[0]);
|
||||
chat.appendSibling(ForgeHooks.newChatWithLinks(ev.message));
|
||||
event.component = chat;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptPlayerEventHandler registerForgeEvents() {
|
||||
ScriptPlayerEventHandler.ForgeEventHandler handler = new ScriptPlayerEventHandler.ForgeEventHandler();
|
||||
|
||||
try {
|
||||
Method e = handler.getClass().getMethod("forgeEntity", new Class[]{Event.class});
|
||||
Method register = FMLCommonHandler.instance().bus().getClass().getDeclaredMethod("register", new Class[]{Class.class, Object.class, Method.class, ModContainer.class});
|
||||
register.setAccessible(true);
|
||||
ArrayList list = new ArrayList();
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("cpw.mods.fml.common.gameevent"));
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("net.minecraftforge.event"));
|
||||
Iterator e1 = list.iterator();
|
||||
|
||||
while(true) {
|
||||
ClassInfo classLoader;
|
||||
String classes;
|
||||
do {
|
||||
if(!e1.hasNext()) {
|
||||
if(PixelmonHelper.Enabled) {
|
||||
try {
|
||||
Field e2 = ClassLoader.class.getDeclaredField("classes");
|
||||
e2.setAccessible(true);
|
||||
ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();
|
||||
ArrayList classes1 = new ArrayList((Vector)e2.get(classLoader1));
|
||||
Iterator infoClass1 = classes1.iterator();
|
||||
|
||||
while(infoClass1.hasNext()) {
|
||||
Class c2 = (Class)infoClass1.next();
|
||||
}
|
||||
} catch (Exception var12) {
|
||||
var12.printStackTrace();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
classLoader = (ClassInfo)e1.next();
|
||||
classes = classLoader.getName();
|
||||
} while(classes.startsWith("net.minecraftforge.event.terraingen"));
|
||||
|
||||
Class infoClass = classLoader.load();
|
||||
ArrayList c = new ArrayList(Arrays.asList(infoClass.getDeclaredClasses()));
|
||||
if(c.isEmpty()) {
|
||||
c.add(infoClass);
|
||||
}
|
||||
|
||||
Iterator var10 = c.iterator();
|
||||
while(var10.hasNext()) {
|
||||
Class c1 = (Class)var10.next();
|
||||
if(!EntityConstructing.class.isAssignableFrom(c1) && !PotentialSpawns.class.isAssignableFrom(c1) && !TickEvent.RenderTickEvent.class.isAssignableFrom(c1) && !TickEvent.ClientTickEvent.class.isAssignableFrom(c1) && !FMLNetworkEvent.ClientCustomPacketEvent.class.isAssignableFrom(c1) && !ItemTooltipEvent.class.isAssignableFrom(c1) && Event.class.isAssignableFrom(c1) && !Modifier.isAbstract(c1.getModifiers()) && Modifier.isPublic(c1.getModifiers())) {
|
||||
register.invoke(FMLCommonHandler.instance().bus(), new Object[]{c1, handler, e, Loader.instance().activeModContainer()});
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception var13) {
|
||||
var13.printStackTrace();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public class ForgeEventHandler {
|
||||
public ForgeEventHandler() {
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void forgeEntity(Event event) {
|
||||
if(CustomNpcs.getServer() != null && ScriptController.Instance.forgeScripts.isEnabled()) {
|
||||
if(event instanceof EntityEvent) {
|
||||
EntityEvent ev2 = (EntityEvent)event;
|
||||
if(ev2.entity != null && ev2.entity.worldObj instanceof WorldServer) {
|
||||
EventHooks.onForgeEntityEvent(ev2);
|
||||
}
|
||||
} else if(event instanceof WorldEvent) {
|
||||
WorldEvent ev1 = (WorldEvent)event;
|
||||
if(ev1.world instanceof WorldServer) {
|
||||
EventHooks.onForgeWorldEvent(ev1);
|
||||
}
|
||||
} else if(!(event instanceof TickEvent) || ((TickEvent)event).side != Side.CLIENT) {
|
||||
if(event instanceof PlayerEvent) {
|
||||
PlayerEvent ev = (PlayerEvent)event;
|
||||
if(!(ev.player.worldObj instanceof WorldServer)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
EventHooks.onForgeEvent(new ForgeEvent(event), event);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*@SubscribeEvent
|
||||
public void forgeTick(TickEvent.ServerTickEvent event){
|
||||
if(event.side == Side.SERVER && event.phase == TickEvent.Phase.START) {
|
||||
EventHooks.onForgeEvent(new ForgeEvent(event), event);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void forgeTick(TickEvent.WorldTickEvent event){
|
||||
if(event.side == Side.SERVER && event.phase == TickEvent.Phase.START) {
|
||||
EventHooks.onForgeEvent(new ForgeEvent(event), event);
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void forgeTick(TickEvent.PlayerTickEvent event){
|
||||
if(event.side == Side.SERVER && event.phase == TickEvent.Phase.START) {
|
||||
EventHooks.onForgeEvent(new ForgeEvent(event), event);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
@@ -21,12 +21,14 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.stats.Achievement;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraft.util.ReportedException;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.MinecraftForgeClient;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import noppes.npcs.CommonProxy;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.LogWriter;
|
||||
@@ -62,16 +64,7 @@ import noppes.npcs.client.controllers.PresetController;
|
||||
import noppes.npcs.client.fx.EntityElementalStaffFX;
|
||||
import noppes.npcs.client.fx.EntityEnderFX;
|
||||
import noppes.npcs.client.fx.EntityRainbowFX;
|
||||
import noppes.npcs.client.gui.GuiBorderBlock;
|
||||
import noppes.npcs.client.gui.GuiMerchantAdd;
|
||||
import noppes.npcs.client.gui.GuiNpcDimension;
|
||||
import noppes.npcs.client.gui.GuiNpcMobSpawner;
|
||||
import noppes.npcs.client.gui.GuiNpcMobSpawnerMounter;
|
||||
import noppes.npcs.client.gui.GuiNpcPather;
|
||||
import noppes.npcs.client.gui.GuiNpcRedstoneBlock;
|
||||
import noppes.npcs.client.gui.GuiNpcRemoteEditor;
|
||||
import noppes.npcs.client.gui.GuiNpcWaypoint;
|
||||
import noppes.npcs.client.gui.GuiScript;
|
||||
import noppes.npcs.client.gui.*;
|
||||
import noppes.npcs.client.gui.global.GuiNPCManageBanks;
|
||||
import noppes.npcs.client.gui.global.GuiNPCManageDialogs;
|
||||
import noppes.npcs.client.gui.global.GuiNPCManageFactions;
|
||||
@@ -105,6 +98,7 @@ import noppes.npcs.client.gui.roles.GuiNpcFollowerSetup;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcItemGiver;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcTraderSetup;
|
||||
import noppes.npcs.client.gui.roles.GuiNpcTransporter;
|
||||
import noppes.npcs.client.gui.script.GuiScriptGlobal;
|
||||
import noppes.npcs.client.model.*;
|
||||
import noppes.npcs.client.renderer.*;
|
||||
import noppes.npcs.client.renderer.blocks.BlockBannerRenderer;
|
||||
@@ -150,8 +144,10 @@ import noppes.npcs.containers.ContainerNPCTraderSetup;
|
||||
import noppes.npcs.containers.ContainerNpcItemGiver;
|
||||
import noppes.npcs.containers.ContainerNpcQuestReward;
|
||||
import noppes.npcs.containers.ContainerNpcQuestTypeItem;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.entity.*;
|
||||
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import tconstruct.client.tabs.InventoryTabFactions;
|
||||
@@ -165,9 +161,9 @@ import cpw.mods.fml.common.ObfuscationReflectionHelper;
|
||||
|
||||
public class ClientProxy extends CommonProxy {
|
||||
public static KeyBinding QuestLog;
|
||||
|
||||
|
||||
public static FontContainer Font;
|
||||
|
||||
|
||||
public void load() {
|
||||
Font = new FontContainer(CustomNpcs.FontType, CustomNpcs.FontSize);
|
||||
createFolders();
|
||||
@@ -217,43 +213,47 @@ public class ClientProxy extends CommonProxy {
|
||||
RenderingRegistry.registerBlockHandler(new BlockBloodRenderer());
|
||||
}
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
|
||||
QuestLog = new KeyBinding("Quest Log", Keyboard.KEY_L, "key.categories.gameplay");
|
||||
|
||||
|
||||
ClientRegistry.registerKeyBinding(QuestLog);
|
||||
mc.gameSettings.loadOptions();
|
||||
|
||||
|
||||
new PresetController(CustomNpcs.Dir);
|
||||
|
||||
|
||||
if(CustomNpcs.EnableUpdateChecker){
|
||||
VersionChecker checker = new VersionChecker();
|
||||
checker.start();
|
||||
}
|
||||
|
||||
|
||||
ClientCloneController.Instance = new ClientCloneController();
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(new ClientEventHandler());
|
||||
|
||||
if(CustomNpcs.InventoryGuiEnabled){
|
||||
MinecraftForge.EVENT_BUS.register(new TabRegistry());
|
||||
|
||||
if (TabRegistry.getTabList().size() < 2){
|
||||
TabRegistry.registerTab(new InventoryTabVanilla());
|
||||
}
|
||||
TabRegistry.registerTab(new InventoryTabFactions());
|
||||
TabRegistry.registerTab(new InventoryTabQuests());
|
||||
}
|
||||
MinecraftForge.EVENT_BUS.register(new ClientEventHandler());
|
||||
|
||||
if(CustomNpcs.InventoryGuiEnabled){
|
||||
MinecraftForge.EVENT_BUS.register(new TabRegistry());
|
||||
|
||||
if (TabRegistry.getTabList().size() < 2){
|
||||
TabRegistry.registerTab(new InventoryTabVanilla());
|
||||
}
|
||||
TabRegistry.registerTab(new InventoryTabFactions());
|
||||
TabRegistry.registerTab(new InventoryTabQuests());
|
||||
}
|
||||
}
|
||||
|
||||
public FakePlayer getCommandPlayer(IWorld world) {
|
||||
return (FakePlayer)(new EntityCustomNpc(world.getMCWorld())).getFakePlayer();
|
||||
}
|
||||
|
||||
private void createFolders() {
|
||||
File file = new File(CustomNpcs.Dir,"assets/customnpcs");
|
||||
if(!file.exists())
|
||||
file.mkdirs();
|
||||
|
||||
|
||||
File check = new File(file,"sounds");
|
||||
if(!check.exists())
|
||||
check.mkdir();
|
||||
|
||||
|
||||
File json = new File(file, "sounds.json");
|
||||
if(!json.exists()){
|
||||
try {
|
||||
@@ -268,16 +268,30 @@ public class ClientProxy extends CommonProxy {
|
||||
check = new File(file,"textures");
|
||||
if(!check.exists())
|
||||
check.mkdir();
|
||||
|
||||
|
||||
File cache = new File(check,"cache");
|
||||
if(!cache.exists())
|
||||
cache.mkdir();
|
||||
((IReloadableResourceManager)Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new CustomNpcResourceListener());
|
||||
}
|
||||
|
||||
public static PlayerData playerData = new PlayerData();
|
||||
@Override
|
||||
public PlayerData getPlayerData(EntityPlayer player) {
|
||||
if (player.getUniqueID() == Minecraft.getMinecraft().thePlayer.getUniqueID()) {
|
||||
if (playerData.player != player) {
|
||||
playerData.player = player;
|
||||
}
|
||||
|
||||
return playerData;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
|
||||
|
||||
if (ID > EnumGuiType.values().length)
|
||||
return null;
|
||||
EnumGuiType gui = EnumGuiType.values()[ID];
|
||||
@@ -286,6 +300,8 @@ public class ClientProxy extends CommonProxy {
|
||||
return getGui(npc, gui, container, x, y, z);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private GuiScreen getGui(EntityNPCInterface npc, EnumGuiType gui, Container container, int x, int y, int z) {
|
||||
if (gui == EnumGuiType.MainMenuDisplay){
|
||||
if(npc != null)
|
||||
@@ -304,16 +320,16 @@ public class ClientProxy extends CommonProxy {
|
||||
|
||||
else if(gui == EnumGuiType.QuestReward)
|
||||
return new GuiNpcQuestReward(npc, (ContainerNpcQuestReward) container);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.QuestItem)
|
||||
return new GuiNpcQuestTypeItem(npc, (ContainerNpcQuestTypeItem) container);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.MovingPath)
|
||||
return new GuiNpcPather(npc);
|
||||
|
||||
else if (gui == EnumGuiType.ManageFactions)
|
||||
return new GuiNPCManageFactions(npc);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.ManageLinked)
|
||||
return new GuiNPCManageLinkedNpc(npc);
|
||||
|
||||
@@ -322,15 +338,15 @@ public class ClientProxy extends CommonProxy {
|
||||
|
||||
else if (gui == EnumGuiType.ManageRecipes)
|
||||
return new GuiNpcManageRecipes(npc,(ContainerManageRecipes) container);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.ManageDialogs)
|
||||
return new GuiNPCManageDialogs(npc);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.ManageQuests)
|
||||
return new GuiNPCManageQuest(npc);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.ManageBanks)
|
||||
return new GuiNPCManageBanks(npc,(ContainerManageBanks) container);
|
||||
return new GuiNPCManageBanks(npc,(ContainerManageBanks) container);
|
||||
|
||||
else if (gui == EnumGuiType.MainMenuGlobal)
|
||||
return new GuiNPCGlobalMainMenu(npc);
|
||||
@@ -343,84 +359,87 @@ public class ClientProxy extends CommonProxy {
|
||||
|
||||
else if (gui == EnumGuiType.PlayerFollower)
|
||||
return new GuiNpcFollower(npc, (ContainerNPCFollower) container);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.PlayerTrader)
|
||||
return new GuiNPCTrader(npc, (ContainerNPCTrader) container);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.PlayerBankSmall || gui == EnumGuiType.PlayerBankUnlock || gui == EnumGuiType.PlayerBankUprade || gui == EnumGuiType.PlayerBankLarge)
|
||||
return new GuiNPCBankChest(npc, (ContainerNPCBankInterface) container);
|
||||
|
||||
else if(gui == EnumGuiType.PlayerTransporter)
|
||||
return new GuiTransportSelection(npc);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.Script)
|
||||
return new GuiScript(npc);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.PlayerAnvil)
|
||||
return new GuiNpcCarpentryBench((ContainerCarpentryBench) container);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.SetupFollower)
|
||||
return new GuiNpcFollowerSetup(npc, (ContainerNPCFollowerSetup) container);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.SetupItemGiver)
|
||||
return new GuiNpcItemGiver(npc, (ContainerNpcItemGiver) container);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.SetupTrader)
|
||||
return new GuiNpcTraderSetup(npc, (ContainerNPCTraderSetup) container);
|
||||
|
||||
else if(gui == EnumGuiType.SetupTransporter)
|
||||
return new GuiNpcTransporter(npc);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.SetupBank)
|
||||
return new GuiNpcBankSetup(npc);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.NpcRemote && Minecraft.getMinecraft().currentScreen == null)
|
||||
return new GuiNpcRemoteEditor();
|
||||
|
||||
else if(gui == EnumGuiType.ScriptEvent && Minecraft.getMinecraft().currentScreen == null)
|
||||
return new GuiScriptGlobal();
|
||||
|
||||
else if(gui == EnumGuiType.PlayerMailman)
|
||||
return new GuiMailmanWrite((ContainerMail) container, x == 1, y == 1);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.PlayerMailbox)
|
||||
return new GuiMailbox();
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.MerchantAdd)
|
||||
return new GuiMerchantAdd();
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.Crate)
|
||||
return new GuiCrate((ContainerCrate)container);
|
||||
|
||||
else if(gui == EnumGuiType.NpcDimensions)
|
||||
return new GuiNpcDimension();
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.Border)
|
||||
return new GuiBorderBlock(x, y, z);
|
||||
|
||||
else if(gui == EnumGuiType.BigSign)
|
||||
return new GuiBigSign(x, y, z);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.RedstoneBlock)
|
||||
return new GuiNpcRedstoneBlock(x, y, z);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.MobSpawner)
|
||||
return new GuiNpcMobSpawner(x, y, z);
|
||||
|
||||
|
||||
else if(gui == EnumGuiType.MobSpawnerMounter)
|
||||
return new GuiNpcMobSpawnerMounter(x, y, z);
|
||||
|
||||
else if (gui == EnumGuiType.Waypoint)
|
||||
return new GuiNpcWaypoint(x, y, z);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.Companion)
|
||||
return new GuiNpcCompanionStats(npc);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.CompanionTalent)
|
||||
return new GuiNpcCompanionTalents(npc);
|
||||
|
||||
|
||||
else if (gui == EnumGuiType.CompanionInv)
|
||||
return new GuiNpcCompanionInv(npc, (ContainerNPCCompanion) container);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void openGui(int i, int j, int k, EnumGuiType gui, EntityPlayer player) {
|
||||
Minecraft minecraft = Minecraft.getMinecraft();
|
||||
@@ -428,7 +447,7 @@ public class ClientProxy extends CommonProxy {
|
||||
return;
|
||||
|
||||
GuiScreen guiscreen = getGui(null, gui, null, i, j, k);
|
||||
|
||||
|
||||
|
||||
if (guiscreen != null) {
|
||||
minecraft.displayGuiScreen(guiscreen);
|
||||
@@ -459,7 +478,7 @@ public class ClientProxy extends CommonProxy {
|
||||
if (guiscreen != null) {
|
||||
minecraft.displayGuiScreen((GuiScreen)guiscreen);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -467,18 +486,18 @@ public class ClientProxy extends CommonProxy {
|
||||
if(string.equals("Spell")){
|
||||
int color = (Integer) ob[0];
|
||||
int number = (Integer) ob[1];
|
||||
for(int i = 0; i < number; i++){
|
||||
Random rand = player.worldObj.rand;
|
||||
for(int i = 0; i < number; i++){
|
||||
Random rand = player.worldObj.rand;
|
||||
double x = (rand.nextDouble() - 0.5D) * (double)player.width;
|
||||
double y = player.getEyeHeight();
|
||||
double z = (rand.nextDouble() - 0.5D) * (double)player.width;
|
||||
|
||||
double f = (rand.nextDouble() - 0.5D) * 2D;
|
||||
double f1 = -rand.nextDouble();
|
||||
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
||||
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityElementalStaffFX(player, x, y, z, f, f1, f2, color));
|
||||
}
|
||||
|
||||
double f = (rand.nextDouble() - 0.5D) * 2D;
|
||||
double f1 = -rand.nextDouble();
|
||||
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
||||
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityElementalStaffFX(player, x, y, z, f, f1, f2, color));
|
||||
}
|
||||
}
|
||||
else if(string.equals("ModelData")){
|
||||
ModelData data = (ModelData) ob[0];
|
||||
@@ -492,21 +511,21 @@ public class ClientProxy extends CommonProxy {
|
||||
EntityEnderFX fx = new EntityEnderFX(npc, (rand.nextDouble() - 0.5D) * (double)player.width, (rand.nextDouble() * (double)player.height) - height - 0.25D, (rand.nextDouble() - 0.5D) * (double)player.width, (rand.nextDouble() - 0.5D) * 2D, -rand.nextDouble(), (rand.nextDouble() - 0.5D) * 2D, particles);
|
||||
minecraft.effectRenderer.addEffect(fx);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else if(particles.type == 1){
|
||||
for(int i = 0; i < 2; i++){
|
||||
double x = player.posX + (rand.nextDouble() - 0.5D) * 0.9;
|
||||
double y = (player.posY + rand.nextDouble() * 1.9) - 0.25D - height;
|
||||
double z = player.posZ + (rand.nextDouble() - 0.5D) * 0.9;
|
||||
|
||||
|
||||
double f = (rand.nextDouble() - 0.5D) * 2D;
|
||||
double f1 = -rand.nextDouble();
|
||||
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
||||
|
||||
minecraft.effectRenderer.addEffect(new EntityRainbowFX(player.worldObj, x, y, z, f, f1, f2));
|
||||
}
|
||||
for(int i = 0; i < 2; i++){
|
||||
double x = player.posX + (rand.nextDouble() - 0.5D) * 0.9;
|
||||
double y = (player.posY + rand.nextDouble() * 1.9) - 0.25D - height;
|
||||
double z = player.posZ + (rand.nextDouble() - 0.5D) * 0.9;
|
||||
|
||||
|
||||
double f = (rand.nextDouble() - 0.5D) * 2D;
|
||||
double f1 = -rand.nextDouble();
|
||||
double f2 = (rand.nextDouble() - 0.5D) * 2D;
|
||||
|
||||
minecraft.effectRenderer.addEffect(new EntityRainbowFX(player.worldObj, x, y, z, f, f1, f2));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -519,7 +538,7 @@ public class ClientProxy extends CommonProxy {
|
||||
public boolean hasClient() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public EntityPlayer getPlayer() {
|
||||
return Minecraft.getMinecraft().thePlayer;
|
||||
}
|
||||
@@ -534,54 +553,63 @@ public class ClientProxy extends CommonProxy {
|
||||
try{
|
||||
if(location == null)
|
||||
return;
|
||||
TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager();
|
||||
if(location != null)
|
||||
texturemanager.bindTexture((ResourceLocation) location);
|
||||
TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager();
|
||||
if(location != null)
|
||||
texturemanager.bindTexture((ResourceLocation) location);
|
||||
}
|
||||
catch(NullPointerException ex){
|
||||
|
||||
|
||||
}
|
||||
catch(ReportedException ex){
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spawnParticle(String particle, double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float scale) {
|
||||
|
||||
double motionX, double motionY, double motionZ, float scale) {
|
||||
|
||||
RenderGlobal render = Minecraft.getMinecraft().renderGlobal;
|
||||
|
||||
|
||||
EntityFX fx = render.doSpawnParticle(particle, x, y, z, motionX, motionY, motionZ);
|
||||
if(fx == null)
|
||||
return;
|
||||
|
||||
if (particle.equals("flame")){
|
||||
ObfuscationReflectionHelper.setPrivateValue(EntityFlameFX.class, (EntityFlameFX)fx, scale, 0);
|
||||
}
|
||||
else if (particle.equals("smoke")){
|
||||
ObfuscationReflectionHelper.setPrivateValue(EntitySmokeFX.class, (EntitySmokeFX)fx, scale, 0);
|
||||
}
|
||||
if (particle.equals("flame")){
|
||||
ObfuscationReflectionHelper.setPrivateValue(EntityFlameFX.class, (EntityFlameFX)fx, scale, 0);
|
||||
}
|
||||
else if (particle.equals("smoke")){
|
||||
ObfuscationReflectionHelper.setPrivateValue(EntitySmokeFX.class, (EntitySmokeFX)fx, scale, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAchievementDesc(Achievement achievement) {
|
||||
return achievement.getDescription();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGUIOpen(){
|
||||
return Minecraft.getMinecraft().currentScreen != null;
|
||||
}
|
||||
|
||||
|
||||
public static class FontContainer {
|
||||
private StringCache textFont = null;
|
||||
public boolean useCustomFont = true;
|
||||
|
||||
|
||||
private FontContainer(){
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public FontContainer(String fontType, int fontSize) {
|
||||
textFont = new StringCache();
|
||||
textFont.setDefaultFont("Arial", fontSize, true);
|
||||
useCustomFont = !fontType.equalsIgnoreCase("minecraft");
|
||||
try {
|
||||
if(!useCustomFont || fontType.isEmpty() || fontType.equalsIgnoreCase("default"))
|
||||
textFont.setCustomFont(new ResourceLocation("customnpcs","OpenSans.ttf"), fontSize, true);
|
||||
else
|
||||
textFont.setDefaultFont(fontType, fontSize, true);
|
||||
try {
|
||||
if(!useCustomFont || fontType.isEmpty() || fontType.equalsIgnoreCase("default"))
|
||||
textFont.setCustomFont(new ResourceLocation("customnpcs","OpenSans.ttf"), fontSize, true);
|
||||
else
|
||||
textFont.setDefaultFont(fontType, fontSize, true);
|
||||
} catch (Exception e) {
|
||||
LogWriter.info("Failed loading font so using Arial");
|
||||
}
|
||||
@@ -592,7 +620,7 @@ public class ClientProxy extends CommonProxy {
|
||||
return textFont.fontHeight;
|
||||
return Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT;
|
||||
}
|
||||
|
||||
|
||||
public int width(String text){
|
||||
if(useCustomFont)
|
||||
return textFont.getStringWidth(text);
|
||||
@@ -622,4 +650,4 @@ public class ClientProxy extends CommonProxy {
|
||||
return textFont.usedFont().getFontName();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,11 +14,15 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.InputEvent;
|
||||
import cpw.mods.fml.common.gameevent.TickEvent;
|
||||
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
public class ClientTickHandler{
|
||||
|
||||
private World prevWorld;
|
||||
private boolean otherContainer = false;
|
||||
private int buttonPressed = -1;
|
||||
private long buttonTime = 0L;
|
||||
private final int[] ignoreKeys = new int[]{157, 29, 54, 42, 184, 56, 220, 219};
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||
public void onClientTick(TickEvent.ClientTickEvent event){
|
||||
@@ -41,6 +45,14 @@ public class ClientTickHandler{
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onMouse(InputEvent.MouseInputEvent event){
|
||||
if(Mouse.getEventButton() == -1 && Mouse.getDWheel() == 0)
|
||||
return;
|
||||
|
||||
NoppesUtilPlayer.sendData(EnumPlayerPacket.MouseClicked, new Object[]{Mouse.getEventButton(),Mouse.getEventDWheel(),Mouse.isButtonDown(Mouse.getEventButton())});
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onKey(InputEvent.KeyInputEvent event){
|
||||
if(ClientProxy.QuestLog.isPressed()){
|
||||
@@ -50,6 +62,37 @@ public class ClientTickHandler{
|
||||
else if(mc.currentScreen instanceof GuiQuestLog)
|
||||
mc.setIngameFocus();
|
||||
}
|
||||
|
||||
int key = Keyboard.getEventKey();
|
||||
long time = Keyboard.getEventNanoseconds();
|
||||
|
||||
if(Keyboard.getEventKeyState()) {
|
||||
if(!this.isIgnoredKey(key)) {
|
||||
this.buttonTime = time;
|
||||
}
|
||||
}
|
||||
|
||||
if(time-this.buttonTime == 0 || !Keyboard.getEventKeyState()) {
|
||||
boolean isCtrlPressed = Keyboard.isKeyDown(157) || Keyboard.isKeyDown(29);
|
||||
boolean isShiftPressed = Keyboard.isKeyDown(54) || Keyboard.isKeyDown(42);
|
||||
boolean isAltPressed = Keyboard.isKeyDown(184) || Keyboard.isKeyDown(56);
|
||||
boolean isMetaPressed = Keyboard.isKeyDown(220) || Keyboard.isKeyDown(219);
|
||||
boolean keyDown = Keyboard.isKeyDown(key);
|
||||
NoppesUtilPlayer.sendData(EnumPlayerPacket.KeyPressed, new Object[]{Integer.valueOf(key), Boolean.valueOf(isCtrlPressed), Boolean.valueOf(isShiftPressed), Boolean.valueOf(isAltPressed), Boolean.valueOf(isMetaPressed), Boolean.valueOf(keyDown)});
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isIgnoredKey(int key) {
|
||||
int[] var2 = this.ignoreKeys;
|
||||
int var3 = var2.length;
|
||||
|
||||
for(int var4 = 0; var4 < var3; ++var4) {
|
||||
int i = var2[var4];
|
||||
if(i == key) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,14 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -21,6 +23,7 @@ import net.minecraft.world.World;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.NoppesUtilPlayer;
|
||||
import noppes.npcs.Server;
|
||||
import noppes.npcs.client.fx.EntityCustomFX;
|
||||
import noppes.npcs.client.gui.player.GuiDialogInteract;
|
||||
import noppes.npcs.client.gui.player.GuiQuestCompletion;
|
||||
import noppes.npcs.client.gui.util.GuiContainerNPCInterface;
|
||||
@@ -67,6 +70,57 @@ public class NoppesUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void spawnScriptedParticle(ByteBuf buffer){
|
||||
Minecraft minecraft = Minecraft.getMinecraft();
|
||||
|
||||
String directory = Server.readString(buffer);
|
||||
|
||||
int HEXcolor = buffer.readInt();
|
||||
int amount = buffer.readInt();
|
||||
int maxAge = buffer.readInt();
|
||||
|
||||
double x = buffer.readDouble();
|
||||
double y = buffer.readDouble();
|
||||
double z = buffer.readDouble();
|
||||
|
||||
double motionX = buffer.readDouble();
|
||||
double motionY = buffer.readDouble();
|
||||
double motionZ = buffer.readDouble();
|
||||
float gravity = buffer.readFloat();
|
||||
|
||||
float scale1 = buffer.readFloat();
|
||||
float scale2 = buffer.readFloat();
|
||||
float scaleRate = buffer.readFloat();
|
||||
int scaleRateStart = buffer.readInt();
|
||||
|
||||
float alpha1 = buffer.readFloat();
|
||||
float alpha2 = buffer.readFloat();
|
||||
float alphaRate = buffer.readFloat();
|
||||
int alphaRateStart = buffer.readInt();
|
||||
|
||||
int entityID = buffer.readInt();
|
||||
|
||||
World worldObj = Minecraft.getMinecraft().theWorld;
|
||||
Entity entity = worldObj.getEntityByID(entityID);
|
||||
|
||||
if(entity == null)
|
||||
return;
|
||||
|
||||
EntityCustomFX fx = new EntityCustomFX(
|
||||
entity,
|
||||
directory, HEXcolor,
|
||||
x, y, z,
|
||||
motionX, motionY, motionZ, gravity,
|
||||
scale1, scale2, scaleRate, scaleRateStart,
|
||||
alpha1, alpha2, alphaRate, alphaRateStart,
|
||||
maxAge
|
||||
);
|
||||
|
||||
for(int i = 0; i < amount; i++){
|
||||
minecraft.effectRenderer.addEffect(fx);
|
||||
}
|
||||
}
|
||||
|
||||
public static void clickSound() {
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
|
||||
}
|
||||
@@ -237,4 +291,7 @@ public class NoppesUtil {
|
||||
CustomNpcs.proxy.openGui(x, y, z, EnumGuiType.Waypoint, player);
|
||||
}
|
||||
|
||||
public static void isGUIOpen(boolean isGUIOpen) {
|
||||
Client.sendData(EnumPacketServer.IsGuiOpen, isGUIOpen);
|
||||
}
|
||||
}
|
||||
@@ -151,6 +151,9 @@ public class PacketHandlerClient extends PacketHandlerServer{
|
||||
EnumGuiType gui = EnumGuiType.values()[buffer.readInt()];
|
||||
CustomNpcs.proxy.openGui(NoppesUtil.getLastNpc(), gui, buffer.readInt(), buffer.readInt(), buffer.readInt());
|
||||
}
|
||||
else if(type == EnumPacketClient.SCRIPTED_PARTICLE){
|
||||
NoppesUtil.spawnScriptedParticle(buffer);
|
||||
}
|
||||
else if(type == EnumPacketClient.PARTICLE){
|
||||
NoppesUtil.spawnParticle(buffer);
|
||||
}
|
||||
@@ -251,8 +254,10 @@ public class PacketHandlerClient extends PacketHandlerServer{
|
||||
player.addChatMessage(new ChatComponentTranslation("Current font is %s", ClientProxy.Font.getName()));
|
||||
}
|
||||
}
|
||||
else if(type == EnumPacketClient.ISGUIOPEN){
|
||||
boolean isGUIOpen = Minecraft.getMinecraft().currentScreen != null;
|
||||
|
||||
NoppesUtil.isGUIOpen(isGUIOpen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package noppes.npcs.client.fx;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import noppes.npcs.client.ClientProxy;
|
||||
import org.lwjgl.Sys;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class EntityCustomFX extends EntityFX {
|
||||
private Entity entity;
|
||||
private final ResourceLocation location;
|
||||
private static final ResourceLocation resource = new ResourceLocation("textures/particle/particles.png");
|
||||
private boolean move = true;
|
||||
private float startX = 0, startY = 0, startZ = 0;
|
||||
|
||||
public float scale1 = 1.0F;
|
||||
public float scale2 = 1.0F;
|
||||
public float scaleRate = 1.0F;
|
||||
public int scaleRateStart = 0;
|
||||
|
||||
public float alpha1 = 1.0F;
|
||||
public float alpha2 = 0;
|
||||
public float alphaRate = 0.0F;
|
||||
public int alphaRateStart = 0;
|
||||
|
||||
public EntityCustomFX(Entity entity, String directory, int HEXColor, double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float gravity,
|
||||
float scale1, float scale2, float scaleRate, int scaleRateStart,
|
||||
float alpha1, float alpha2, float alphaRate, int alphaRateStart,
|
||||
int age) {
|
||||
super(entity.worldObj, x, y, z, motionX, motionY, motionZ);
|
||||
|
||||
this.scale1 = scale1;
|
||||
this.scale2 = scale2;
|
||||
this.scaleRate = Math.abs(scaleRate);
|
||||
this.scaleRateStart = scaleRateStart;
|
||||
particleScale = scale1;
|
||||
if(scale1 > scale2)
|
||||
this.scaleRate *= -1;
|
||||
|
||||
this.alpha1 = alpha1;
|
||||
this.alpha2 = alpha2;
|
||||
this.alphaRate = Math.abs(alphaRate);
|
||||
this.alphaRateStart = alphaRateStart;
|
||||
particleAlpha = alpha1;
|
||||
if(alpha1 > alpha2)
|
||||
this.alphaRate *= -1;
|
||||
|
||||
particleGravity = gravity/0.04F;
|
||||
particleMaxAge = age;
|
||||
|
||||
this.motionX = motionX;
|
||||
this.motionY = motionY;
|
||||
this.motionZ = motionZ;
|
||||
|
||||
this.entity = entity;
|
||||
noClip = true;
|
||||
|
||||
particleRed = (HEXColor >> 16 & 255) / 255f;
|
||||
particleGreen = (HEXColor >> 8 & 255) / 255f;
|
||||
particleBlue = (HEXColor & 255) / 255f;
|
||||
|
||||
if(Math.floor(Math.random()*3) == 1){
|
||||
move = false;
|
||||
this.startX = (float) entity.posX;
|
||||
this.startY = (float) entity.posY;
|
||||
this.startZ = (float) entity.posZ;
|
||||
}
|
||||
|
||||
location = new ResourceLocation(directory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(Tessellator par1Tessellator, float par2, float par3, float par4, float par5, float par6, float par7)
|
||||
{
|
||||
if(move){
|
||||
startX = (float)(entity.prevPosX + (entity.posX - entity.prevPosX) * (double)par2);
|
||||
startY = (float)(entity.prevPosY + (entity.posY - entity.prevPosY) * (double)par2);
|
||||
startZ = (float)(entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)par2);
|
||||
}
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.draw();
|
||||
|
||||
float scale = this.scaleRate / (float)particleMaxAge;
|
||||
if((this.scaleRate < 0 && particleScale+scale < this.scale2) || (this.scaleRate > 0 && particleScale+scale > this.scale2))
|
||||
particleScale = this.scale2;
|
||||
else if(particleAge >= this.scaleRateStart)
|
||||
particleScale += scale;
|
||||
|
||||
float alpha = this.alphaRate / (float)particleMaxAge;
|
||||
if((this.alphaRate < 0 && particleAlpha+alpha < this.alpha2) || (this.alphaRate > 0 && particleAlpha+alpha > this.alpha2))
|
||||
particleAlpha = this.alpha2;
|
||||
else if(particleAge >= this.alphaRateStart)
|
||||
particleAlpha += alpha;
|
||||
|
||||
ClientProxy.bindTexture(location);
|
||||
|
||||
float f = 0.0f;
|
||||
float f1 = 1.0f;
|
||||
float f2 = 0.0f;
|
||||
float f3 = 1.0f;
|
||||
float f4 = 0.1F * particleScale;
|
||||
float f5 = (float)(((prevPosX + (posX - prevPosX) * (double)par2) - interpPosX) + startX);
|
||||
float f6 = (float)(((prevPosY + (posY - prevPosY) * (double)par2) - interpPosY) + startY);
|
||||
float f7 = (float)(((prevPosZ + (posZ - prevPosZ) * (double)par2) - interpPosZ) + startZ);
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setBrightness(240);
|
||||
par1Tessellator.setColorOpaque_F(1, 1, 1);
|
||||
par1Tessellator.setColorRGBA_F(particleRed, particleGreen, particleBlue, particleAlpha);
|
||||
par1Tessellator.addVertexWithUV(f5 - par3 * f4 - par6 * f4, f6 - par4 * f4, f7 - par5 * f4 - par7 * f4, f1, f3);
|
||||
par1Tessellator.addVertexWithUV((f5 - par3 * f4) + par6 * f4, f6 + par4 * f4, (f7 - par5 * f4) + par7 * f4, f1, f2);
|
||||
par1Tessellator.addVertexWithUV(f5 + par3 * f4 + par6 * f4, f6 + par4 * f4, f7 + par5 * f4 + par7 * f4, f, f2);
|
||||
par1Tessellator.addVertexWithUV((f5 + par3 * f4) - par6 * f4, f6 - par4 * f4, (f7 + par5 * f4) - par7 * f4, f, f3);
|
||||
|
||||
/*
|
||||
Minecraft minecraft = Minecraft.getMinecraft();
|
||||
EntityPlayer player = minecraft.thePlayer;
|
||||
|
||||
double yaw = (player.rotationYaw/180)*Math.PI;
|
||||
double pitch = (player.rotationPitch/180)*Math.PI;
|
||||
|
||||
double angle = Minecraft.getMinecraft().theWorld.getWorldTime()%360;
|
||||
double angleRad = (angle/180)*Math.PI;
|
||||
|
||||
double angleX = Math.sin(yaw)*Math.cos(pitch);
|
||||
if(Math.abs(angleX) < 0.0001){
|
||||
angleX = 0.0D;
|
||||
}
|
||||
double angleY = Math.sin(pitch);
|
||||
if(Math.abs(angleY) < 0.0001){
|
||||
angleY = 0.0D;
|
||||
}
|
||||
double angleZ = -Math.cos(yaw)*Math.cos(pitch);
|
||||
if(Math.abs(angleZ) < 0.0001){
|
||||
angleZ = 0.0D;
|
||||
}
|
||||
|
||||
double translateX = 0;
|
||||
double translateY = 0;
|
||||
double translateZ = 0;
|
||||
*/
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glColor4f(1, 1, 1, 1.0F);
|
||||
//GL11.glTranslated(translateX,translateY,translateZ);
|
||||
//GL11.glRotated(angle, angleX, angleY, angleZ);
|
||||
|
||||
tessellator.draw();
|
||||
ClientProxy.bindTexture(resource);
|
||||
tessellator.startDrawingQuads();
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
public int getFXLayer(){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package noppes.npcs.client.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.client.gui.util.GuiCustomScroll;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
import noppes.npcs.client.gui.util.GuiNpcLabel;
|
||||
import noppes.npcs.client.gui.util.SubGuiInterface;
|
||||
|
||||
public class EventGuiScriptList extends SubGuiInterface{
|
||||
private GuiCustomScroll scroll1;
|
||||
private GuiCustomScroll scroll2;
|
||||
private EventScriptContainer container;
|
||||
private List<String> scripts;
|
||||
|
||||
public EventGuiScriptList(List<String> scripts, EventScriptContainer container){
|
||||
this.container = container;
|
||||
setBackground("menubg.png");
|
||||
xSize = 346;
|
||||
ySize = 216;
|
||||
if(scripts == null)
|
||||
scripts = new ArrayList<String>();
|
||||
this.scripts = scripts;
|
||||
}
|
||||
@Override
|
||||
public void initGui(){
|
||||
super.initGui();
|
||||
if(scroll1 == null){
|
||||
scroll1 = new GuiCustomScroll(this,0);
|
||||
scroll1.setSize(140, 180);
|
||||
}
|
||||
scroll1.guiLeft = guiLeft + 4;
|
||||
scroll1.guiTop = guiTop + 14;
|
||||
this.addScroll(scroll1);
|
||||
addLabel(new GuiNpcLabel(1, "script.availableScripts", guiLeft + 4, guiTop + 4));
|
||||
|
||||
if(scroll2 == null){
|
||||
scroll2 = new GuiCustomScroll(this,1);
|
||||
scroll2.setSize(140, 180);
|
||||
}
|
||||
scroll2.guiLeft = guiLeft + 200;
|
||||
scroll2.guiTop = guiTop + 14;
|
||||
this.addScroll(scroll2);
|
||||
addLabel(new GuiNpcLabel(2, "script.loadedScripts", guiLeft + 200, guiTop + 4));
|
||||
List<String> temp = new ArrayList<String>(scripts);
|
||||
temp.removeAll(container.scripts);
|
||||
scroll1.setList(temp);
|
||||
scroll2.setList(container.scripts);
|
||||
|
||||
addButton(new GuiNpcButton(1, guiLeft + 145, guiTop + 40, 55, 20, ">"));
|
||||
addButton(new GuiNpcButton(2, guiLeft + 145, guiTop + 62, 55, 20, "<"));
|
||||
|
||||
addButton(new GuiNpcButton(3, guiLeft + 145, guiTop + 90, 55, 20, ">>"));
|
||||
addButton(new GuiNpcButton(4, guiLeft + 145, guiTop + 112, 55, 20, "<<"));
|
||||
|
||||
addButton(new GuiNpcButton(66, guiLeft + 260, guiTop + 194, 60, 20, "gui.done"));
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton guibutton){
|
||||
GuiNpcButton button = (GuiNpcButton) guibutton;
|
||||
if(button.id == 1){
|
||||
if(scroll1.hasSelected()){
|
||||
container.scripts.add(scroll1.getSelected());
|
||||
scroll1.selected = -1;
|
||||
scroll1.selected = -1;
|
||||
initGui();
|
||||
}
|
||||
}
|
||||
if(button.id == 2){
|
||||
if(scroll2.hasSelected()){
|
||||
container.scripts.remove(scroll2.getSelected());
|
||||
scroll2.selected = -1;
|
||||
initGui();
|
||||
}
|
||||
}
|
||||
if(button.id == 3){
|
||||
container.scripts.clear();
|
||||
for(String script : scripts){
|
||||
container.scripts.add(script);
|
||||
}
|
||||
scroll1.selected = -1;
|
||||
scroll1.selected = -1;
|
||||
initGui();
|
||||
}
|
||||
if(button.id == 4){
|
||||
container.scripts.clear();
|
||||
scroll1.selected = -1;
|
||||
scroll1.selected = -1;
|
||||
initGui();
|
||||
}
|
||||
if(button.id == 66){
|
||||
close();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void save() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -71,6 +71,7 @@ public class GuiScript extends GuiNPCInterface implements IGuiData, GuiYesNoCall
|
||||
list.add("script.collide");
|
||||
list.add("script.kills");
|
||||
list.add("script.dialog_closed");
|
||||
list.add("script.timer");
|
||||
|
||||
if(showScript){
|
||||
addLabel(new GuiNpcLabel(0, "script.hooks", guiLeft + 4, guiTop + 5));
|
||||
|
||||
@@ -240,7 +240,7 @@ public class GuiMailmanWrite extends GuiContainerNPCInterface implements ITextfi
|
||||
*/
|
||||
public void keyTyped(char par1, int par2)
|
||||
{
|
||||
if(!GuiNpcTextField.isActive() && canEdit)
|
||||
if(!GuiNpcTextField.isFieldActive() && canEdit)
|
||||
this.keyTypedInBook(par1, par2);
|
||||
else
|
||||
super.keyTyped(par1, par2);
|
||||
|
||||
@@ -10,10 +10,8 @@ import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.world.World;
|
||||
import noppes.npcs.client.NoppesUtil;
|
||||
import noppes.npcs.client.gui.util.GuiCustomScroll;
|
||||
import noppes.npcs.client.gui.util.ICustomScrollListener;
|
||||
import noppes.npcs.client.gui.util.GuiNPCInterface;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
import noppes.npcs.client.gui.util.GuiNpcLabel;
|
||||
import noppes.npcs.client.gui.util.GuiNpcTextField;
|
||||
@@ -84,7 +82,7 @@ public class GuiNpcQuestTypeKill extends SubGuiInterface implements ITextfieldLi
|
||||
addScroll(scroll);
|
||||
this.addButton(new GuiNpcButton(0, guiLeft + 4, guiTop + 140, 98, 20, "gui.back"));
|
||||
|
||||
scroll.visible = GuiNpcTextField.isActive();
|
||||
scroll.visible = GuiNpcTextField.isFieldActive();
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton guibutton) {
|
||||
@@ -96,7 +94,7 @@ public class GuiNpcQuestTypeKill extends SubGuiInterface implements ITextfieldLi
|
||||
public void mouseClicked(int i, int j, int k)
|
||||
{
|
||||
super.mouseClicked(i, j, k);
|
||||
scroll.visible = GuiNpcTextField.isActive();
|
||||
scroll.visible = GuiNpcTextField.isFieldActive();
|
||||
}
|
||||
public void save() {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.script;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.client.gui.util.GuiCustomScroll;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
import noppes.npcs.client.gui.util.GuiNpcLabel;
|
||||
import noppes.npcs.client.gui.util.SubGuiInterface;
|
||||
|
||||
public class EventGuiScriptList extends SubGuiInterface {
|
||||
private GuiCustomScroll scroll1;
|
||||
private GuiCustomScroll scroll2;
|
||||
private EventScriptContainer container;
|
||||
private List<String> scripts;
|
||||
|
||||
public EventGuiScriptList(List<String> scripts, EventScriptContainer container) {
|
||||
this.container = container;
|
||||
this.setBackground("menubg.png");
|
||||
this.xSize = 346;
|
||||
this.ySize = 216;
|
||||
if(scripts == null) {
|
||||
scripts = new ArrayList();
|
||||
}
|
||||
|
||||
this.scripts = (List)scripts;
|
||||
}
|
||||
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
if(this.scroll1 == null) {
|
||||
this.scroll1 = new GuiCustomScroll(this, 0);
|
||||
this.scroll1.setSize(140, 180);
|
||||
}
|
||||
|
||||
this.scroll1.guiLeft = this.guiLeft + 4;
|
||||
this.scroll1.guiTop = this.guiTop + 14;
|
||||
this.addScroll(this.scroll1);
|
||||
this.addLabel(new GuiNpcLabel(1, "script.availableScripts", this.guiLeft + 4, this.guiTop + 4));
|
||||
if(this.scroll2 == null) {
|
||||
this.scroll2 = new GuiCustomScroll(this, 1);
|
||||
this.scroll2.setSize(140, 180);
|
||||
}
|
||||
|
||||
this.scroll2.guiLeft = this.guiLeft + 200;
|
||||
this.scroll2.guiTop = this.guiTop + 14;
|
||||
this.addScroll(this.scroll2);
|
||||
this.addLabel(new GuiNpcLabel(2, "script.loadedScripts", this.guiLeft + 200, this.guiTop + 4));
|
||||
ArrayList temp = new ArrayList(this.scripts);
|
||||
temp.removeAll(this.container.scripts);
|
||||
this.scroll1.setList(temp);
|
||||
this.scroll2.setList(this.container.scripts);
|
||||
this.addButton(new GuiNpcButton(1, this.guiLeft + 145, this.guiTop + 40, 55, 20, ">"));
|
||||
this.addButton(new GuiNpcButton(2, this.guiLeft + 145, this.guiTop + 62, 55, 20, "<"));
|
||||
this.addButton(new GuiNpcButton(3, this.guiLeft + 145, this.guiTop + 90, 55, 20, ">>"));
|
||||
this.addButton(new GuiNpcButton(4, this.guiLeft + 145, this.guiTop + 112, 55, 20, "<<"));
|
||||
this.addButton(new GuiNpcButton(66, this.guiLeft + 260, this.guiTop + 194, 60, 20, "gui.done"));
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton guibutton) {
|
||||
GuiNpcButton button = (GuiNpcButton)guibutton;
|
||||
if(button.id == 1 && this.scroll1.hasSelected()) {
|
||||
this.container.scripts.add(this.scroll1.getSelected());
|
||||
this.scroll1.selected = -1;
|
||||
this.scroll1.selected = -1;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(button.id == 2 && this.scroll2.hasSelected()) {
|
||||
this.container.scripts.remove(this.scroll2.getSelected());
|
||||
this.scroll2.selected = -1;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(button.id == 3) {
|
||||
this.container.scripts.clear();
|
||||
Iterator var3 = this.scripts.iterator();
|
||||
|
||||
while(var3.hasNext()) {
|
||||
String script = (String)var3.next();
|
||||
this.container.scripts.add(script);
|
||||
}
|
||||
|
||||
this.scroll1.selected = -1;
|
||||
this.scroll1.selected = -1;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(button.id == 4) {
|
||||
this.container.scripts.clear();
|
||||
this.scroll1.selected = -1;
|
||||
this.scroll1.selected = -1;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(button.id == 66) {
|
||||
this.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void save() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.script;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.client.Client;
|
||||
import noppes.npcs.constants.EnumPacketServer;
|
||||
import noppes.npcs.controllers.data.ForgeDataScript;
|
||||
|
||||
public class GuiScriptForge extends GuiScriptInterface {
|
||||
private ForgeDataScript script = new ForgeDataScript();
|
||||
|
||||
public GuiScriptForge() {
|
||||
this.handler = this.script;
|
||||
Client.sendData(EnumPacketServer.ScriptForgeGet);
|
||||
}
|
||||
|
||||
public void setGuiData(NBTTagCompound compound) {
|
||||
this.script.readFromNBT(compound);
|
||||
super.setGuiData(compound);
|
||||
}
|
||||
|
||||
public void save() {
|
||||
super.save();
|
||||
Client.sendData(EnumPacketServer.ScriptForgeSave, script.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.script;
|
||||
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import noppes.npcs.client.gui.util.GuiNPCInterface;
|
||||
import noppes.npcs.client.gui.util.GuiNpcButton;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiScriptGlobal extends GuiNPCInterface {
|
||||
private final ResourceLocation resource = new ResourceLocation("customnpcs", "textures/gui/smallbg.png");
|
||||
|
||||
public GuiScriptGlobal() {
|
||||
this.xSize = 176;
|
||||
this.ySize = 222;
|
||||
this.drawDefaultBackground = false;
|
||||
this.title = "";
|
||||
}
|
||||
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
this.addButton(new GuiNpcButton(0, this.guiLeft + 38, this.guiTop + 20, 100, 20, "Players"));
|
||||
this.addButton(new GuiNpcButton(1, this.guiLeft + 38, this.guiTop + 50, 100, 20, "Forge"));
|
||||
}
|
||||
|
||||
public void drawScreen(int i, int j, float f) {
|
||||
this.drawDefaultBackground();
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
this.mc.renderEngine.bindTexture(this.resource);
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
|
||||
super.drawScreen(i, j, f);
|
||||
}
|
||||
|
||||
protected void actionPerformed(GuiButton guibutton) {
|
||||
if (guibutton.id == 0) {
|
||||
this.displayGuiScreen(new GuiScriptPlayers());
|
||||
}
|
||||
if (guibutton.id == 1) {
|
||||
this.displayGuiScreen(new GuiScriptForge());
|
||||
}
|
||||
}
|
||||
|
||||
public void keyTyped(char c, int i) {
|
||||
if (i == 1 || this.isInventoryKey(i)) {
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,441 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.script;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.reflect.ClassPath;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import cpw.mods.fml.common.gameevent.TickEvent;
|
||||
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiConfirmOpenLink;
|
||||
import net.minecraft.client.gui.GuiYesNo;
|
||||
import net.minecraft.client.gui.GuiYesNoCallback;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.EntityEvent;
|
||||
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.NoppesStringUtils;
|
||||
import noppes.npcs.client.NoppesUtil;
|
||||
import noppes.npcs.client.gui.swing.GuiJTextArea;
|
||||
import noppes.npcs.client.gui.util.*;
|
||||
import noppes.npcs.controllers.IScriptHandler;
|
||||
import noppes.npcs.controllers.PixelmonHelper;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.controllers.data.ForgeDataScript;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallback, IGuiData, ITextChangeListener, ICustomScrollListener, IJTextAreaListener, ITextfieldListener {
|
||||
private int activeTab = 0;
|
||||
public IScriptHandler handler;
|
||||
public Map<String, List<String>> languages = new HashMap();
|
||||
private int scriptLimit = 1;
|
||||
|
||||
public GuiScriptInterface() {
|
||||
this.drawDefaultBackground = true;
|
||||
this.closeOnEsc = true;
|
||||
this.xSize = 420;
|
||||
this.setBackground("menubg.png");
|
||||
}
|
||||
|
||||
public void initGui() {
|
||||
//this.xSize = (int)((double)this.width * 0.88D);
|
||||
this.ySize = (int)((double)this.xSize * 0.56D);
|
||||
if((double)this.ySize > (double)this.height * 0.95D) {
|
||||
this.ySize = (int)((double)this.height * 0.95D);
|
||||
this.xSize = (int)((double)this.ySize / 0.56D);
|
||||
}
|
||||
|
||||
this.bgScale = (float)this.xSize / 400.0F;
|
||||
super.initGui();
|
||||
this.guiTop += 10;
|
||||
int yoffset = (int)((double)this.ySize * 0.02D);
|
||||
GuiMenuTopButton top;
|
||||
this.addTopButton(top = new GuiMenuTopButton(0, this.guiLeft + 4, this.guiTop - 17, "gui.settings"));
|
||||
|
||||
int topXoffset = 0;
|
||||
int topYoffset = 0;
|
||||
for(int ta = 0; ta < this.handler.getScripts().size(); ++ta) {
|
||||
if(ta%20 == 0 && ta > 0) {
|
||||
topYoffset -= 20;
|
||||
topXoffset -= top.width+20*22;
|
||||
}
|
||||
this.addTopButton(top = new GuiMenuTopButton(ta + 1, top.xPosition+top.width + topXoffset, top.yPosition + topYoffset, ta + 1 + ""));
|
||||
topXoffset = 0;
|
||||
topYoffset = 0;
|
||||
scriptLimit = ta + 2;
|
||||
}
|
||||
|
||||
if(this.handler.getScripts().size() < 100)
|
||||
this.addTopButton(new GuiMenuTopButton(scriptLimit, top.xPosition+top.width, top.yPosition, "+"));
|
||||
|
||||
top = this.getTopButton(this.activeTab);
|
||||
if(top == null) {
|
||||
this.activeTab = 0;
|
||||
top = this.getTopButton(0);
|
||||
}
|
||||
|
||||
top.active = true;
|
||||
if(this.activeTab > 0) {
|
||||
List<String> hookList = new ArrayList<String>();
|
||||
|
||||
GuiCustomScroll hooks = new GuiCustomScroll(this, 1);
|
||||
hooks.allowUserInput = false;
|
||||
hooks.setSize(108, 198);
|
||||
hooks.guiLeft = guiLeft - 110;
|
||||
hooks.guiTop = guiTop + 14;
|
||||
|
||||
if(handler instanceof PlayerDataScript) {
|
||||
hookList.add("init");
|
||||
hookList.add("tick");
|
||||
hookList.add("interact");
|
||||
hookList.add("damagedEntity");
|
||||
hookList.add("damaged");
|
||||
hookList.add("kills");
|
||||
hookList.add("killed");
|
||||
hookList.add("drop");
|
||||
hookList.add("respawn");
|
||||
hookList.add("breakBlock");
|
||||
hookList.add("chat");
|
||||
hookList.add("login");
|
||||
hookList.add("logout");
|
||||
hookList.add("keyPressed");
|
||||
hookList.add("mouseClicked");
|
||||
hookList.add("toss");
|
||||
hookList.add("pickUp");
|
||||
hookList.add("pickupXP");
|
||||
hookList.add("rangedCharge");
|
||||
hookList.add("rangedLaunched");
|
||||
hookList.add("timer");
|
||||
hookList.add("startItem");
|
||||
hookList.add("usingItem");
|
||||
hookList.add("stopItem");
|
||||
hookList.add("finishItem");
|
||||
hookList.add("containerOpen");
|
||||
hookList.add("useHoe");
|
||||
hookList.add("bonemeal");
|
||||
hookList.add("fillBucket");
|
||||
hookList.add("jump");
|
||||
hookList.add("fall");
|
||||
hookList.add("wakeUp");
|
||||
hookList.add("sleep");
|
||||
hookList.add("playSound");
|
||||
hookList.add("lightning");
|
||||
hookList.add("changedDim");
|
||||
}
|
||||
else if(handler instanceof ForgeDataScript) {
|
||||
hooks.setSize(238, 198);
|
||||
hooks.guiLeft = guiLeft - 240;
|
||||
|
||||
hookList.add("init");
|
||||
|
||||
ArrayList<ClassPath.ClassInfo> list = new ArrayList();
|
||||
try {
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("cpw.mods.fml.common.event"));
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("cpw.mods.fml.common.gameevent"));
|
||||
list.addAll(ClassPath.from(this.getClass().getClassLoader()).getTopLevelClassesRecursive("net.minecraftforge.event"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
for(ClassPath.ClassInfo e1 : list){
|
||||
ClassPath.ClassInfo classLoader = e1;
|
||||
Class infoClass = classLoader.load();
|
||||
ArrayList c = new ArrayList(Arrays.asList(infoClass.getDeclaredClasses()));
|
||||
if(c.isEmpty()) {
|
||||
c.add(infoClass);
|
||||
}
|
||||
Iterator var10 = c.iterator();
|
||||
while(var10.hasNext()) {
|
||||
Class c1 = (Class) var10.next();
|
||||
if (!EntityEvent.EntityConstructing.class.isAssignableFrom(c1) && !WorldEvent.PotentialSpawns.class.isAssignableFrom(c1) && !TickEvent.RenderTickEvent.class.isAssignableFrom(c1) && !TickEvent.ClientTickEvent.class.isAssignableFrom(c1) && !FMLNetworkEvent.ClientCustomPacketEvent.class.isAssignableFrom(c1) && !ItemTooltipEvent.class.isAssignableFrom(c1) && Event.class.isAssignableFrom(c1) && !Modifier.isAbstract(c1.getModifiers()) && Modifier.isPublic(c1.getModifiers())) {
|
||||
String eventName = c1.getName();
|
||||
int i = eventName.lastIndexOf(".");
|
||||
eventName = StringUtils.uncapitalize(eventName.substring(i + 1).replace("$", ""));
|
||||
|
||||
hookList.add(eventName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
hooks.setUnsortedList(hookList);
|
||||
addScroll(hooks);
|
||||
|
||||
GuiNpcLabel hookLabel = new GuiNpcLabel(0, "script.hooks", hooks.guiLeft, guiTop + 5);
|
||||
hookLabel.color = 0xaaaaaa;
|
||||
addLabel(hookLabel);
|
||||
|
||||
EventScriptContainer var7 = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
GuiNpcTextArea left = new GuiNpcTextArea(2, this, this.guiLeft + yoffset, this.guiTop + yoffset, this.xSize - 110 - yoffset, (int)((double)this.ySize * 0.96D) - yoffset * 2, var7 == null?"":var7.script);
|
||||
this.addTextField(left);
|
||||
int left1 = this.guiLeft + this.xSize - 104;
|
||||
this.addButton(new GuiNpcButton(102, left1, this.guiTop + yoffset, 60, 20, "gui.clear"));
|
||||
this.addButton(new GuiNpcButton(101, left1 + 61, this.guiTop + yoffset, 60, 20, "gui.paste"));
|
||||
this.addButton(new GuiNpcButton(100, left1, this.guiTop + 21 + yoffset, 60, 20, "gui.copy"));
|
||||
this.addButton(new GuiNpcButton(105, left1 + 61, this.guiTop + 21 + yoffset, 60, 20, "gui.remove"));
|
||||
this.addButton(new GuiNpcButton(107, left1, this.guiTop + 66 + yoffset, 80, 20, "script.loadscript"));
|
||||
GuiCustomScroll scroll = (new GuiCustomScroll(this, 0)).setUnselectable();
|
||||
scroll.setSize(100, (int)((double)this.ySize * 0.54D) - yoffset * 2);
|
||||
scroll.guiLeft = left1;
|
||||
scroll.guiTop = this.guiTop + 88 + yoffset;
|
||||
if(var7 != null) {
|
||||
scroll.setList(var7.scripts);
|
||||
}
|
||||
|
||||
this.addScroll(scroll);
|
||||
} else {
|
||||
GuiNpcTextArea var8 = new GuiNpcTextArea(2, this, this.guiLeft + 4 + yoffset, this.guiTop + 6 + yoffset, this.xSize - 160 - yoffset, (int)((float)this.ySize * 0.92F) - yoffset * 2, this.getConsoleText());
|
||||
var8.enabled = false;
|
||||
this.addTextField(var8);
|
||||
int var9 = this.guiLeft + this.xSize - 150;
|
||||
this.addButton(new GuiNpcButton(100, var9, this.guiTop + 125, 60, 20, "gui.copy"));
|
||||
this.addButton(new GuiNpcButton(102, var9, this.guiTop + 146, 60, 20, "gui.clear"));
|
||||
this.addLabel(new GuiNpcLabel(1, "script.language", var9, this.guiTop + 15));
|
||||
this.addButton(new GuiNpcButton(103, var9 + 60, this.guiTop + 10, 80, 20, (String[])this.languages.keySet().toArray(new String[this.languages.keySet().size()]), this.getScriptIndex()));
|
||||
this.getButton(103).enabled = this.languages.size() > 0;
|
||||
this.addLabel(new GuiNpcLabel(2, "gui.enabled", var9, this.guiTop + 36));
|
||||
this.addButton(new GuiNpcButton(104, var9 + 60, this.guiTop + 31, 50, 20, new String[]{"gui.no", "gui.yes"}, this.handler.getEnabled()?1:0));
|
||||
if(this.player.worldObj.isRemote) {
|
||||
this.addButton(new GuiNpcButton(106, var9, this.guiTop + 55, 150, 20, "script.openfolder"));
|
||||
}
|
||||
|
||||
this.addButton(new GuiNpcButton(109, var9, this.guiTop + 78, 80, 20, "gui.website"));
|
||||
this.addButton(new GuiNpcButton(112, var9 + 81, this.guiTop + 78, 80, 20, "gui.forum"));
|
||||
this.addButton(new GuiNpcButton(110, var9, this.guiTop + 99, 80, 20, "script.apidoc"));
|
||||
this.addButton(new GuiNpcButton(111, var9 + 81, this.guiTop + 99, 80, 20, "script.apisrc"));
|
||||
}
|
||||
|
||||
this.xSize = 420;
|
||||
this.ySize = 256;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) {
|
||||
//this.handler.getScripts().get(this.activeTab - 1).setType(scroll.getSelected().replace("playerscript.",""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unFocused(GuiNpcTextField textfield) {
|
||||
/*if(textfield.id == 1){
|
||||
this.handler.getScripts().get(this.activeTab - 1).setType(textfield.getText());
|
||||
}*/
|
||||
}
|
||||
|
||||
/*private int getScriptHook(EventScriptContainer eventScriptContainer, List<String> list) {
|
||||
for(String s : list) {
|
||||
if (s.replace("playerscript.", "").equals(eventScriptContainer.type)) {
|
||||
return list.indexOf(s);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
private String getConsoleText() {
|
||||
Map<Long, String> map = this.handler.getConsoleText();
|
||||
StringBuilder builder = new StringBuilder();
|
||||
Iterator var3 = map.entrySet().iterator();
|
||||
|
||||
while(var3.hasNext()) {
|
||||
Entry<Long, String> entry = (Entry)var3.next();
|
||||
builder.insert(0, new Date((Long)entry.getKey()) + (String)entry.getValue() + "\n");
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private int getScriptIndex() {
|
||||
int i = 0;
|
||||
|
||||
for(Iterator var2 = this.languages.keySet().iterator(); var2.hasNext(); ++i) {
|
||||
String language = (String)var2.next();
|
||||
if(language.equalsIgnoreCase(this.handler.getLanguage())) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void confirmClicked(boolean flag, int i) {
|
||||
if(flag) {
|
||||
if(i == 0) {
|
||||
this.openLink("http://www.kodevelopment.nl/minecraft/customnpcs/scripting");
|
||||
}
|
||||
|
||||
if(i == 1) {
|
||||
this.openLink("http://www.kodevelopment.nl/customnpcs/api/");
|
||||
}
|
||||
|
||||
if(i == 2) {
|
||||
this.openLink("http://www.kodevelopment.nl/minecraft/customnpcs/scripting");
|
||||
}
|
||||
|
||||
if(i == 3) {
|
||||
this.openLink("http://www.minecraftforge.net/forum/index.php/board,122.0.html");
|
||||
}
|
||||
|
||||
if(i == 10) {
|
||||
this.handler.getScripts().remove(this.activeTab - 1);
|
||||
this.activeTab = 0;
|
||||
}
|
||||
}
|
||||
|
||||
this.displayGuiScreen(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton guibutton) {
|
||||
if(guibutton.id >= 0 && guibutton.id < scriptLimit) {
|
||||
this.setScript();
|
||||
this.activeTab = guibutton.id;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(guibutton.id == scriptLimit) {
|
||||
this.handler.getScripts().add(new EventScriptContainer(this.handler));
|
||||
this.activeTab = this.handler.getScripts().size();
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(guibutton.id == 109) {
|
||||
this.displayGuiScreen(new GuiConfirmOpenLink(this, "http://www.kodevelopment.nl/minecraft/customnpcs/scripting", 0, true));
|
||||
}
|
||||
|
||||
if(guibutton.id == 110) {
|
||||
this.displayGuiScreen(new GuiConfirmOpenLink(this, "http://www.kodevelopment.nl/customnpcs/api/", 1, true));
|
||||
}
|
||||
|
||||
if(guibutton.id == 111) {
|
||||
this.displayGuiScreen(new GuiConfirmOpenLink(this, "https://github.com/Noppes/CustomNPCsAPI", 2, true));
|
||||
}
|
||||
|
||||
if(guibutton.id == 112) {
|
||||
this.displayGuiScreen(new GuiConfirmOpenLink(this, "http://www.minecraftforge.net/forum/index.php/board,122.0.html", 3, true));
|
||||
}
|
||||
|
||||
if(guibutton.id == 100) {
|
||||
NoppesStringUtils.setClipboardContents((this.getTextField(2)).getText());
|
||||
}
|
||||
|
||||
if(guibutton.id == 101) {
|
||||
(this.getTextField(2)).setText(NoppesStringUtils.getClipboardContents());
|
||||
}
|
||||
|
||||
EventScriptContainer container;
|
||||
if(guibutton.id == 102) {
|
||||
if(this.activeTab > 0) {
|
||||
container = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
container.script = "";
|
||||
} else {
|
||||
this.handler.clearConsole();
|
||||
}
|
||||
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
if(guibutton.id == 103) {
|
||||
this.handler.setLanguage(((GuiNpcButton)guibutton).displayString);
|
||||
}
|
||||
|
||||
if(guibutton.id == 104) {
|
||||
this.handler.setEnabled((((GuiNpcButton)guibutton).getValue() == 1));
|
||||
}
|
||||
|
||||
if(guibutton.id == 105) {
|
||||
GuiYesNo container1 = new GuiYesNo(this, "", ((GuiNpcButton)guibutton).displayString, 10);
|
||||
this.displayGuiScreen(container1);
|
||||
}
|
||||
|
||||
if(guibutton.id == 106) {
|
||||
NoppesUtil.openFolder(ScriptController.Instance.dir);
|
||||
}
|
||||
|
||||
if(guibutton.id == 107) {
|
||||
container = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
if(container == null) {
|
||||
this.handler.getScripts().add(container = new EventScriptContainer(this.handler));
|
||||
}
|
||||
|
||||
this.setSubGui(new EventGuiScriptList((List)this.languages.get(this.handler.getLanguage()), container));
|
||||
}
|
||||
|
||||
if(guibutton.id == 108) {
|
||||
container = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
if(container != null) {
|
||||
this.setScript();
|
||||
this.AWTWindow = new GuiJTextArea(container.script).setListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void setScript() {
|
||||
if(this.activeTab > 0) {
|
||||
EventScriptContainer container = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
if(container == null) {
|
||||
this.handler.getScripts().add(container = new EventScriptContainer(this.handler));
|
||||
}
|
||||
|
||||
String text = (this.getTextField(2)).getText();
|
||||
text = text.replace("\r\n", "\n");
|
||||
text = text.replace("\r", "\n");
|
||||
container.script = text;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setGuiData(NBTTagCompound compound) {
|
||||
NBTTagList data = compound.getTagList("Languages", 10);
|
||||
HashMap languages = new HashMap();
|
||||
|
||||
for(int i = 0; i < data.tagCount(); ++i) {
|
||||
NBTTagCompound comp = data.getCompoundTagAt(i);
|
||||
ArrayList scripts = new ArrayList();
|
||||
NBTTagList list = comp.getTagList("Scripts", 8);
|
||||
|
||||
for(int j = 0; j < list.tagCount(); ++j) {
|
||||
scripts.add(list.getStringTagAt(j));
|
||||
}
|
||||
|
||||
languages.put(comp.getString("Language"), scripts);
|
||||
}
|
||||
|
||||
this.languages = languages;
|
||||
this.initGui();
|
||||
}
|
||||
|
||||
public void save() {
|
||||
this.setScript();
|
||||
}
|
||||
|
||||
public void textUpdate(String text) {
|
||||
EventScriptContainer container = (EventScriptContainer)this.handler.getScripts().get(this.activeTab - 1);
|
||||
if(container != null) {
|
||||
container.script = text;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveText(String text) {
|
||||
EventScriptContainer container = handler.getScripts().get(activeTab);
|
||||
if(container != null)
|
||||
container.script = text;
|
||||
initGui();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.script;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.client.Client;
|
||||
import noppes.npcs.constants.EnumPacketServer;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
|
||||
public class GuiScriptPlayers extends GuiScriptInterface {
|
||||
private PlayerDataScript script = new PlayerDataScript((EntityPlayer)null);
|
||||
|
||||
public GuiScriptPlayers() {
|
||||
this.handler = this.script;
|
||||
Client.sendData(EnumPacketServer.ScriptPlayerGet);
|
||||
}
|
||||
|
||||
public void setGuiData(NBTTagCompound compound) {
|
||||
this.script.readFromNBT(compound);
|
||||
super.setGuiData(compound);
|
||||
}
|
||||
|
||||
public void save() {
|
||||
super.save();
|
||||
Client.sendData(EnumPacketServer.ScriptPlayerSave, script.writeToNBT(new NBTTagCompound()));
|
||||
}
|
||||
|
||||
public void close() {
|
||||
super.close();
|
||||
ScriptController.Instance.playerScripts.errored.clear();
|
||||
}
|
||||
}
|
||||
@@ -109,7 +109,7 @@ public abstract class GuiContainerNPCInterface extends GuiContainer
|
||||
for(GuiNpcTextField tf : new ArrayList<GuiNpcTextField>(textfields.values()))
|
||||
tf.textboxKeyTyped(c, i);
|
||||
|
||||
if (closeOnEsc && (i == 1 || i == mc.gameSettings.keyBindInventory.getKeyCode() && !GuiNpcTextField.isActive()))
|
||||
if (closeOnEsc && (i == 1 || i == mc.gameSettings.keyBindInventory.getKeyCode() && !GuiNpcTextField.isFieldActive()))
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,4 +280,7 @@ public class GuiCustomScroll extends GuiScreen
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isMouseOver(int x, int y) {
|
||||
return x >= this.guiLeft && x <= this.guiLeft + this.xSize && y >= this.guiTop && y <= this.guiTop + this.ySize;
|
||||
}
|
||||
}
|
||||
@@ -144,7 +144,7 @@ public abstract class GuiNPCInterface extends GuiScreen
|
||||
for(GuiNpcTextField tf : textfields.values())
|
||||
tf.textboxKeyTyped(c, i);
|
||||
|
||||
if (closeOnEsc && (i == 1 || !GuiNpcTextField.isActive() && isInventoryKey(i))){
|
||||
if (closeOnEsc && (i == 1 || !GuiNpcTextField.isFieldActive() && isInventoryKey(i))){
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiNpcTextArea extends GuiNpcTextField{
|
||||
public class GuiNpcTextArea extends GuiNpcTextField implements IGui{
|
||||
public boolean inMenu = true;
|
||||
public boolean numbersOnly = false;
|
||||
private int posX,posY,width,height;
|
||||
@@ -307,4 +307,24 @@ public class GuiNpcTextArea extends GuiNpcTextField{
|
||||
}
|
||||
drawTexturedModalRect(x, y, width, 11, 5, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getID() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int var1, int var2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateScreen() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return isFieldActive();
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,7 @@ public class GuiNpcTextField extends GuiTextField{
|
||||
listener = (ITextfieldListener) parent;
|
||||
}
|
||||
|
||||
public static boolean isActive(){
|
||||
public static boolean isFieldActive(){
|
||||
return activeTextfield != null;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,473 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.util.ChatAllowedCharacters;
|
||||
import net.minecraftforge.client.GuiIngameForge;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.NoppesStringUtils;
|
||||
import noppes.npcs.client.gui.util.TextContainer.LineData;
|
||||
import noppes.npcs.config.TrueTypeFont;
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
public class GuiTextArea extends Gui implements IGui, IKeyListener, IMouseListener {
|
||||
public int id;
|
||||
public int x;
|
||||
public int y;
|
||||
public int width;
|
||||
public int height;
|
||||
private int cursorCounter;
|
||||
private ITextChangeListener listener;
|
||||
private static TrueTypeFont font;
|
||||
public String text = null;
|
||||
private TextContainer container = null;
|
||||
public boolean active = false;
|
||||
public boolean enabled = true;
|
||||
public boolean visible = true;
|
||||
public boolean clicked = false;
|
||||
public boolean doubleClicked = false;
|
||||
public boolean clickScrolling = false;
|
||||
private int startSelection;
|
||||
private int endSelection;
|
||||
private int cursorPosition;
|
||||
private int scrolledLine = 0;
|
||||
private boolean enableCodeHighlighting = false;
|
||||
private static final char colorChar = '\uffff';
|
||||
public List<GuiTextArea.UndoData> undoList = new ArrayList();
|
||||
public List<GuiTextArea.UndoData> redoList = new ArrayList();
|
||||
public boolean undoing = false;
|
||||
private long lastClicked = 0L;
|
||||
|
||||
public GuiTextArea(int id, int x, int y, int width, int height, String text) {
|
||||
this.id = id;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.undoing = true;
|
||||
this.setText(text);
|
||||
this.undoing = false;
|
||||
font.setSpecial('\uffff');
|
||||
}
|
||||
|
||||
public void drawScreen(int xMouse, int yMouse) {
|
||||
if(this.visible) {
|
||||
drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336);
|
||||
drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216);
|
||||
this.container.visibleLines = this.height / this.container.lineHeight;
|
||||
int startBracket;
|
||||
if(this.clicked) {
|
||||
this.clicked = Mouse.isButtonDown(0);
|
||||
startBracket = this.getSelectionPos(xMouse, yMouse);
|
||||
if(startBracket != this.cursorPosition) {
|
||||
if(this.doubleClicked) {
|
||||
this.startSelection = this.endSelection = this.cursorPosition;
|
||||
this.doubleClicked = false;
|
||||
}
|
||||
|
||||
this.setCursor(startBracket, true);
|
||||
}
|
||||
} else if(this.doubleClicked) {
|
||||
this.doubleClicked = false;
|
||||
}
|
||||
|
||||
if(this.clickScrolling) {
|
||||
this.clickScrolling = Mouse.isButtonDown(0);
|
||||
startBracket = this.container.linesCount - this.container.visibleLines;
|
||||
this.scrolledLine = Math.min(Math.max((int)(1.0F * (float)startBracket * (float)(yMouse - this.y) / (float)this.height), 0), startBracket);
|
||||
}
|
||||
|
||||
startBracket = 0;
|
||||
int endBracket = 0;
|
||||
if(this.endSelection - this.startSelection == 1 || this.startSelection == this.endSelection && this.startSelection < this.text.length()) {
|
||||
char list = this.text.charAt(this.startSelection);
|
||||
int wordHightLight = 0;
|
||||
if(list == 123) {
|
||||
wordHightLight = this.findClosingBracket(this.text.substring(this.startSelection), '{', '}');
|
||||
} else if(list == 91) {
|
||||
wordHightLight = this.findClosingBracket(this.text.substring(this.startSelection), '[', ']');
|
||||
} else if(list == 40) {
|
||||
wordHightLight = this.findClosingBracket(this.text.substring(this.startSelection), '(', ')');
|
||||
} else if(list == 125) {
|
||||
wordHightLight = this.findOpeningBracket(this.text.substring(0, this.startSelection + 1), '{', '}');
|
||||
} else if(list == 93) {
|
||||
wordHightLight = this.findOpeningBracket(this.text.substring(0, this.startSelection + 1), '[', ']');
|
||||
} else if(list == 41) {
|
||||
wordHightLight = this.findOpeningBracket(this.text.substring(0, this.startSelection + 1), '(', ')');
|
||||
}
|
||||
|
||||
if(wordHightLight != 0) {
|
||||
startBracket = this.startSelection;
|
||||
endBracket = this.startSelection + wordHightLight;
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList var15 = new ArrayList(this.container.lines);
|
||||
String var18 = null;
|
||||
if(this.startSelection != this.endSelection) {
|
||||
Matcher sbSize = this.container.regexWord.matcher(this.text);
|
||||
|
||||
while(sbSize.find()) {
|
||||
if(sbSize.start() == this.startSelection && sbSize.end() == this.endSelection) {
|
||||
var18 = this.text.substring(this.startSelection, this.endSelection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int var16;
|
||||
for(var16 = 0; var16 < var15.size(); ++var16) {
|
||||
LineData posX = (LineData)var15.get(var16);
|
||||
String posY = posX.text;
|
||||
int w = posY.length();
|
||||
int yPos;
|
||||
int posX1;
|
||||
int posY1;
|
||||
if(startBracket != endBracket) {
|
||||
if(startBracket >= posX.start && startBracket < posX.end) {
|
||||
yPos = font.width(posY.substring(0, startBracket - posX.start));
|
||||
posX1 = font.width(posY.substring(0, startBracket - posX.start + 1)) + 1;
|
||||
posY1 = this.y + 1 + (var16 - this.scrolledLine) * this.container.lineHeight;
|
||||
drawRect(this.x + 1 + yPos, posY1, this.x + 1 + posX1, posY1 + this.container.lineHeight + 1, -1728001024);
|
||||
}
|
||||
|
||||
if(endBracket >= posX.start && endBracket < posX.end) {
|
||||
yPos = font.width(posY.substring(0, endBracket - posX.start));
|
||||
posX1 = font.width(posY.substring(0, endBracket - posX.start + 1)) + 1;
|
||||
posY1 = this.y + 1 + (var16 - this.scrolledLine) * this.container.lineHeight;
|
||||
drawRect(this.x + 1 + yPos, posY1, this.x + 1 + posX1, posY1 + this.container.lineHeight + 1, -1728001024);
|
||||
}
|
||||
}
|
||||
|
||||
if(var16 >= this.scrolledLine && var16 < this.scrolledLine + this.container.visibleLines) {
|
||||
if(var18 != null) {
|
||||
Matcher var20 = this.container.regexWord.matcher(posY);
|
||||
|
||||
while(var20.find()) {
|
||||
if(posY.substring(var20.start(), var20.end()).equals(var18)) {
|
||||
posX1 = font.width(posY.substring(0, var20.start()));
|
||||
posY1 = font.width(posY.substring(0, var20.end())) + 1;
|
||||
int posY2 = this.y + 1 + (var16 - this.scrolledLine) * this.container.lineHeight;
|
||||
drawRect(this.x + 1 + posX1, posY2, this.x + 1 + posY1, posY2 + this.container.lineHeight + 1, -1728033792);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(this.startSelection != this.endSelection && this.endSelection > posX.start && this.startSelection <= posX.end && this.startSelection < posX.end) {
|
||||
yPos = font.width(posY.substring(0, Math.max(this.startSelection - posX.start, 0)));
|
||||
posX1 = font.width(posY.substring(0, Math.min(this.endSelection - posX.start, w))) + 1;
|
||||
posY1 = this.y + 1 + (var16 - this.scrolledLine) * this.container.lineHeight;
|
||||
drawRect(this.x + 1 + yPos, posY1, this.x + 1 + posX1, posY1 + this.container.lineHeight + 1, -1728052993);
|
||||
}
|
||||
|
||||
yPos = this.y + (var16 - this.scrolledLine) * this.container.lineHeight + 1;
|
||||
font.draw(posX.getFormattedString(), (float)(this.x + 1), (float)yPos, -2039584);
|
||||
if(this.active && this.isEnabled() && this.cursorCounter / 6 % 2 == 0 && this.cursorPosition >= posX.start && this.cursorPosition < posX.end) {
|
||||
posX1 = this.x + font.width(posY.substring(0, this.cursorPosition - posX.start));
|
||||
drawRect(posX1 + 1, yPos, posX1 + 2, yPos + 1 + this.container.lineHeight, -3092272);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(this.hasVerticalScrollbar()) {
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(GuiCustomScroll.resource);
|
||||
|
||||
var16 = Math.max((int)(1.0F * (float)this.container.visibleLines / (float)this.container.linesCount * (float)this.height), 2);
|
||||
int var17 = this.x + this.width - 6;
|
||||
int var19 = (int)((float)this.y + 1.0F * (float)this.scrolledLine / (float)this.container.linesCount * (float)(this.height - 4)) + 1;
|
||||
drawRect(var17, var19, var17 + 5, var19 + var16, -2039584);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private int findClosingBracket(String str, char s, char e) {
|
||||
int found = 0;
|
||||
char[] chars = str.toCharArray();
|
||||
|
||||
for(int i = 0; i < chars.length; ++i) {
|
||||
char c = chars[i];
|
||||
if(c == s) {
|
||||
++found;
|
||||
} else if(c == e) {
|
||||
--found;
|
||||
if(found == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int findOpeningBracket(String str, char s, char e) {
|
||||
int found = 0;
|
||||
char[] chars = str.toCharArray();
|
||||
|
||||
for(int i = chars.length - 1; i >= 0; --i) {
|
||||
char c = chars[i];
|
||||
if(c == e) {
|
||||
++found;
|
||||
} else if(c == s) {
|
||||
--found;
|
||||
if(found == 0) {
|
||||
return i - chars.length + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int getSelectionPos(int xMouse, int yMouse) {
|
||||
xMouse -= this.x + 1;
|
||||
yMouse -= this.y + 1;
|
||||
ArrayList list = new ArrayList(this.container.lines);
|
||||
|
||||
for(int i = 0; i < list.size(); ++i) {
|
||||
LineData data = (LineData)list.get(i);
|
||||
if(i >= this.scrolledLine && i < this.scrolledLine + this.container.visibleLines) {
|
||||
int yPos = (i - this.scrolledLine) * this.container.lineHeight;
|
||||
if(yMouse >= yPos && yMouse < yPos + this.container.lineHeight) {
|
||||
int lineWidth = 0;
|
||||
char[] chars = data.text.toCharArray();
|
||||
|
||||
for(int j = 1; j <= chars.length; ++j) {
|
||||
int w = font.width(data.text.substring(0, j));
|
||||
if(xMouse < lineWidth + (w - lineWidth) / 2) {
|
||||
return data.start + j - 1;
|
||||
}
|
||||
|
||||
lineWidth = w;
|
||||
}
|
||||
|
||||
return data.end - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.container.text.length();
|
||||
}
|
||||
|
||||
public int getID() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
|
||||
public void keyTyped(char c, int i) {
|
||||
if(this.active && this.isEnabled()) {
|
||||
if(i == 15) {
|
||||
this.addText(" ");
|
||||
}
|
||||
|
||||
if(i == 28) {
|
||||
this.addText(Character.toString('\n') + this.getIndentCurrentLine());
|
||||
}
|
||||
|
||||
if(ChatAllowedCharacters.isAllowedCharacter(c)) {
|
||||
this.addText(Character.toString(c));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getIndentCurrentLine() {
|
||||
Iterator var1 = this.container.lines.iterator();
|
||||
|
||||
LineData data;
|
||||
do {
|
||||
if(!var1.hasNext()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
data = (LineData)var1.next();
|
||||
} while(this.cursorPosition <= data.start || this.cursorPosition > data.end);
|
||||
|
||||
int i;
|
||||
for(i = 0; i < data.text.length() && data.text.charAt(i) == 32; ++i) {
|
||||
;
|
||||
}
|
||||
|
||||
return data.text.substring(0, i);
|
||||
}
|
||||
|
||||
private void setCursor(int i, boolean select) {
|
||||
i = Math.min(Math.max(i, 0), this.text.length());
|
||||
if(i != this.cursorPosition) {
|
||||
if(!select) {
|
||||
this.endSelection = this.startSelection = this.cursorPosition = i;
|
||||
} else {
|
||||
int diff = this.cursorPosition - i;
|
||||
if(this.cursorPosition == this.startSelection) {
|
||||
this.startSelection -= diff;
|
||||
} else if(this.cursorPosition == this.endSelection) {
|
||||
this.endSelection -= diff;
|
||||
}
|
||||
|
||||
if(this.startSelection > this.endSelection) {
|
||||
int j = this.endSelection;
|
||||
this.endSelection = this.startSelection;
|
||||
this.startSelection = j;
|
||||
}
|
||||
|
||||
this.cursorPosition = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addText(String s) {
|
||||
this.setText(this.getSelectionBeforeText() + s + this.getSelectionAfterText());
|
||||
this.endSelection = this.startSelection = this.cursorPosition = this.startSelection + s.length();
|
||||
}
|
||||
|
||||
private int cursorUp() {
|
||||
for(int i = 0; i < this.container.lines.size(); ++i) {
|
||||
LineData data = (LineData)this.container.lines.get(i);
|
||||
if(this.cursorPosition >= data.start && this.cursorPosition < data.end) {
|
||||
if(i == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int var10000 = this.cursorPosition - data.start;
|
||||
return this.getSelectionPos(this.x + 1 + font.width(data.text.substring(0, this.cursorPosition - data.start)), this.y + 1 + (i - 1 - this.scrolledLine) * this.container.lineHeight);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int cursorDown() {
|
||||
for(int i = 0; i < this.container.lines.size(); ++i) {
|
||||
LineData data = (LineData)this.container.lines.get(i);
|
||||
if(this.cursorPosition >= data.start && this.cursorPosition < data.end) {
|
||||
int var10000 = this.cursorPosition - data.start;
|
||||
return this.getSelectionPos(this.x + 1 + font.width(data.text.substring(0, this.cursorPosition - data.start)), this.y + 1 + (i + 1 - this.scrolledLine) * this.container.lineHeight);
|
||||
}
|
||||
}
|
||||
|
||||
return this.text.length();
|
||||
}
|
||||
|
||||
public String getSelectionBeforeText() {
|
||||
return this.startSelection == 0?"":this.text.substring(0, this.startSelection);
|
||||
}
|
||||
|
||||
public String getSelectionAfterText() {
|
||||
return this.text.substring(this.endSelection);
|
||||
}
|
||||
|
||||
public boolean mouseClicked(int xMouse, int yMouse, int mouseButton) {
|
||||
this.active = xMouse >= this.x && xMouse < this.x + this.width && yMouse >= this.y && yMouse < this.y + this.height;
|
||||
if(this.active) {
|
||||
this.startSelection = this.endSelection = this.cursorPosition = this.getSelectionPos(xMouse, yMouse);
|
||||
this.clicked = mouseButton == 0;
|
||||
this.doubleClicked = false;
|
||||
long time = System.currentTimeMillis();
|
||||
if(this.clicked && this.container.linesCount * this.container.lineHeight > this.height && xMouse > this.x + this.width - 8) {
|
||||
this.clicked = false;
|
||||
this.clickScrolling = true;
|
||||
} else if(time - this.lastClicked < 500L) {
|
||||
this.doubleClicked = true;
|
||||
Matcher m = this.container.regexWord.matcher(this.text);
|
||||
|
||||
while(m.find()) {
|
||||
if(this.cursorPosition > m.start() && this.cursorPosition < m.end()) {
|
||||
this.startSelection = m.start();
|
||||
this.endSelection = m.end();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.lastClicked = time;
|
||||
}
|
||||
|
||||
return this.active;
|
||||
}
|
||||
|
||||
public void updateScreen() {
|
||||
++this.cursorCounter;
|
||||
int k2 = Mouse.getDWheel();
|
||||
if(k2 != 0) {
|
||||
this.scrolledLine += k2 > 0?-1:1;
|
||||
this.scrolledLine = Math.max(Math.min(this.scrolledLine, this.container.linesCount - this.height / this.container.lineHeight), 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
text = text.replace("\r", "");
|
||||
if(this.text == null || !this.text.equals(text)) {
|
||||
if(this.listener != null) {
|
||||
this.listener.textUpdate(text);
|
||||
}
|
||||
|
||||
if(!this.undoing) {
|
||||
this.undoList.add(new GuiTextArea.UndoData(this.text, this.cursorPosition));
|
||||
this.redoList.clear();
|
||||
}
|
||||
|
||||
this.text = text;
|
||||
this.container = new TextContainer(text);
|
||||
this.container.init(font, this.width, this.height);
|
||||
if(this.enableCodeHighlighting) {
|
||||
this.container.formatCodeText();
|
||||
}
|
||||
|
||||
if(this.scrolledLine > this.container.linesCount - this.container.visibleLines) {
|
||||
this.scrolledLine = Math.max(0, this.container.linesCount - this.container.visibleLines);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return this.text;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return this.enabled && this.visible;
|
||||
}
|
||||
|
||||
public boolean hasVerticalScrollbar() {
|
||||
return this.container.visibleLines < this.container.linesCount;
|
||||
}
|
||||
|
||||
public void enableCodeHighlighting() {
|
||||
this.enableCodeHighlighting = true;
|
||||
this.container.formatCodeText();
|
||||
}
|
||||
|
||||
public void setListener(ITextChangeListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return this.active;
|
||||
}
|
||||
|
||||
static {
|
||||
font = new TrueTypeFont(new Font("Arial Unicode MS", 0, CustomNpcs.FontSize), 1.0F);
|
||||
}
|
||||
|
||||
class UndoData {
|
||||
public String text;
|
||||
public int cursorPosition;
|
||||
|
||||
public UndoData(String text, int cursorPosition) {
|
||||
this.text = text;
|
||||
this.cursorPosition = cursorPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
public interface IGui {
|
||||
int getID();
|
||||
|
||||
void drawScreen(int var1, int var2);
|
||||
|
||||
void updateScreen();
|
||||
|
||||
boolean isActive();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
public interface IKeyListener {
|
||||
void keyTyped(char var1, int var2);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
public interface IMouseListener {
|
||||
boolean mouseClicked(int var1, int var2, int var3);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
public interface ITextChangeListener {
|
||||
void textUpdate(String var1);
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.client.gui.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import noppes.npcs.config.TrueTypeFont;
|
||||
|
||||
public class TextContainer {
|
||||
private static final char colorChar = '\uffff';
|
||||
private static final Comparator<TextContainer.MarkUp> MarkUpComparator = (o1, o2) -> {
|
||||
return o1.start > o2.start?1:(o1.start < o2.start?-1:0);
|
||||
};
|
||||
public final Pattern regexString = Pattern.compile("([\"\'])(?:(?=(\\\\?))\\2.)*?\\1", 8);
|
||||
public final Pattern regexFunction = Pattern.compile("\\b(if|else|switch|with|for|while|in|var|const|let|throw|then|function|continue|break|foreach|return|try|catch|finally|do|this|typeof|instanceof|new)(?=[^\\w])");
|
||||
public final Pattern regexWord = Pattern.compile("[\\p{L}-]+|\\n|$");
|
||||
public final Pattern regexNumber = Pattern.compile("\\b-?(?:0[xX][\\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?(?:[fFbBdDlLsS])?|NaN|null|Infinity|unidentified|true|false)\\b");
|
||||
public final Pattern regexComment = Pattern.compile("\\/\\*[\\s\\S]*?(?:\\*\\/|$)|\\/\\/.*|#.*");
|
||||
public String text;
|
||||
public List<TextContainer.MarkUp> makeup = new ArrayList();
|
||||
public List<TextContainer.LineData> lines = new ArrayList();
|
||||
private TrueTypeFont font;
|
||||
public int lineHeight;
|
||||
public int totalHeight;
|
||||
public int visibleLines = 1;
|
||||
public int linesCount;
|
||||
|
||||
public TextContainer(String text) {
|
||||
this.text = text;
|
||||
text.replaceAll("\\r?\\n|\\r", "\n");
|
||||
double l = 1.0D;
|
||||
}
|
||||
|
||||
public void init(TrueTypeFont font, int width, int height) {
|
||||
this.font = font;
|
||||
this.lineHeight = font.height(this.text);
|
||||
if(this.lineHeight == 0) {
|
||||
this.lineHeight = 12;
|
||||
}
|
||||
|
||||
String[] split = this.text.split("\n");
|
||||
int totalChars = 0;
|
||||
String[] var6 = split;
|
||||
int var7 = split.length;
|
||||
|
||||
for(int var8 = 0; var8 < var7; ++var8) {
|
||||
String l = var6[var8];
|
||||
StringBuilder line = new StringBuilder();
|
||||
Matcher m = this.regexWord.matcher(l);
|
||||
|
||||
for(int i = 0; m.find(); i = m.start()) {
|
||||
String word = l.substring(i, m.start());
|
||||
if(font.width(line + word) > width - 10) {
|
||||
this.lines.add(new TextContainer.LineData(line.toString(), totalChars, totalChars + line.length()));
|
||||
totalChars += line.length();
|
||||
line = new StringBuilder();
|
||||
}
|
||||
|
||||
line.append(word);
|
||||
}
|
||||
|
||||
this.lines.add(new TextContainer.LineData(line.toString(), totalChars, totalChars + line.length() + 1));
|
||||
totalChars += line.length() + 1;
|
||||
}
|
||||
|
||||
this.linesCount = this.lines.size();
|
||||
this.totalHeight = this.linesCount * this.lineHeight;
|
||||
this.visibleLines = Math.max(height / this.lineHeight, 1);
|
||||
}
|
||||
|
||||
public void formatCodeText() {
|
||||
TextContainer.MarkUp markup = null;
|
||||
|
||||
for(int start = 0; (markup = this.getNextMatching(start)) != null; start = markup.end) {
|
||||
this.makeup.add(markup);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private TextContainer.MarkUp getNextMatching(int start) {
|
||||
TextContainer.MarkUp markup = null;
|
||||
String s = this.text.substring(start);
|
||||
Matcher matcher = this.regexNumber.matcher(s);
|
||||
if(matcher.find()) {
|
||||
markup = new TextContainer.MarkUp(matcher.start(), matcher.end(), '6', 0);
|
||||
}
|
||||
|
||||
matcher = this.regexFunction.matcher(s);
|
||||
TextContainer.MarkUp markup2;
|
||||
if(matcher.find()) {
|
||||
markup2 = new TextContainer.MarkUp(matcher.start(), matcher.end(), '2', 0);
|
||||
if(this.compareMarkUps(markup, markup2)) {
|
||||
markup = markup2;
|
||||
}
|
||||
}
|
||||
|
||||
matcher = this.regexString.matcher(s);
|
||||
if(matcher.find()) {
|
||||
markup2 = new TextContainer.MarkUp(matcher.start(), matcher.end(), '4', 7);
|
||||
if(this.compareMarkUps(markup, markup2)) {
|
||||
markup = markup2;
|
||||
}
|
||||
}
|
||||
|
||||
matcher = this.regexComment.matcher(s);
|
||||
if(matcher.find()) {
|
||||
markup2 = new TextContainer.MarkUp(matcher.start(), matcher.end(), '8', 7);
|
||||
if(this.compareMarkUps(markup, markup2)) {
|
||||
markup = markup2;
|
||||
}
|
||||
}
|
||||
|
||||
if(markup != null) {
|
||||
markup.start += start;
|
||||
markup.end += start;
|
||||
}
|
||||
|
||||
return markup;
|
||||
}
|
||||
|
||||
public boolean compareMarkUps(TextContainer.MarkUp mu1, TextContainer.MarkUp mu2) {
|
||||
return mu1 == null?true:mu1.start > mu2.start;
|
||||
}
|
||||
|
||||
public void addMakeUp(int start, int end, char c, int level) {
|
||||
if(this.removeConflictingMarkUp(start, end, level)) {
|
||||
this.makeup.add(new TextContainer.MarkUp(start, end, c, level));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean removeConflictingMarkUp(int start, int end, int level) {
|
||||
ArrayList conflicting = new ArrayList();
|
||||
Iterator var5 = this.makeup.iterator();
|
||||
|
||||
while(true) {
|
||||
TextContainer.MarkUp m;
|
||||
do {
|
||||
if(!var5.hasNext()) {
|
||||
this.makeup.removeAll(conflicting);
|
||||
return true;
|
||||
}
|
||||
|
||||
m = (TextContainer.MarkUp)var5.next();
|
||||
} while((start < m.start || start > m.end) && (end < m.start || end > m.end) && (start >= m.start || end <= m.start));
|
||||
|
||||
if(level < m.level || level == m.level && m.start <= start) {
|
||||
return false;
|
||||
}
|
||||
|
||||
conflicting.add(m);
|
||||
}
|
||||
}
|
||||
|
||||
public String getFormattedString() {
|
||||
StringBuilder builder = new StringBuilder(this.text);
|
||||
Iterator var2 = this.makeup.iterator();
|
||||
|
||||
while(var2.hasNext()) {
|
||||
TextContainer.MarkUp entry = (TextContainer.MarkUp)var2.next();
|
||||
builder.insert(entry.start, Character.toString('\uffff') + Character.toString(entry.c));
|
||||
builder.insert(entry.end, Character.toString('\uffff') + Character.toString('r'));
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
class MarkUp {
|
||||
public int start;
|
||||
public int end;
|
||||
public int level;
|
||||
public char c;
|
||||
|
||||
public MarkUp(int start, int end, char c, int level) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.c = c;
|
||||
this.level = level;
|
||||
}
|
||||
}
|
||||
|
||||
class LineData {
|
||||
public String text;
|
||||
public int start;
|
||||
public int end;
|
||||
|
||||
public LineData(String text, int start, int end) {
|
||||
this.text = text;
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public String getFormattedString() {
|
||||
StringBuilder builder = new StringBuilder(this.text);
|
||||
int found = 0;
|
||||
Iterator var3 = TextContainer.this.makeup.iterator();
|
||||
|
||||
while(var3.hasNext()) {
|
||||
TextContainer.MarkUp entry = (TextContainer.MarkUp)var3.next();
|
||||
if(entry.start >= this.start && entry.start < this.end) {
|
||||
builder.insert(entry.start - this.start + found * 2, Character.toString('\uffff') + Character.toString(entry.c));
|
||||
++found;
|
||||
}
|
||||
|
||||
if(entry.start < this.start && entry.end > this.start) {
|
||||
builder.insert(0, Character.toString('\uffff') + Character.toString(entry.c));
|
||||
++found;
|
||||
}
|
||||
|
||||
if(entry.end >= this.start && entry.end < this.end) {
|
||||
builder.insert(entry.end - this.start + found * 2, Character.toString('\uffff') + Character.toString('r'));
|
||||
++found;
|
||||
}
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,9 @@ import net.minecraft.client.model.ModelBiped;
|
||||
import net.minecraft.client.model.ModelRenderer;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import noppes.npcs.CustomItems;
|
||||
import noppes.npcs.ModelPartConfig;
|
||||
import noppes.npcs.ModelPartData;
|
||||
import noppes.npcs.client.ClientProxy;
|
||||
@@ -294,6 +296,9 @@ public class ModelMPM extends ModelNPCMale{
|
||||
@Override
|
||||
public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7){
|
||||
EntityCustomNpc npc = (EntityCustomNpc) par1Entity;
|
||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
||||
if(npc.scriptInvisibleToPlayer(Minecraft.getMinecraft().thePlayer) && (player.getHeldItem() == null || player.getHeldItem().getItem() != CustomItems.wand))
|
||||
return;
|
||||
|
||||
if(entityModel != null){
|
||||
if(!isArmor){
|
||||
@@ -311,7 +316,8 @@ public class ModelMPM extends ModelNPCMale{
|
||||
}
|
||||
}
|
||||
else{
|
||||
alpha = npc.isInvisible() && !npc.isInvisibleToPlayer(Minecraft.getMinecraft().thePlayer)?0.15f:1;
|
||||
alpha = npc.isInvisible() && !npc.isInvisibleToPlayer(player) ? 0.15f : 1;
|
||||
|
||||
setPlayerData(npc);
|
||||
currentlyPlayerTexture = true;
|
||||
setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity);
|
||||
|
||||
@@ -0,0 +1,340 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.config;
|
||||
|
||||
import java.awt.Font;
|
||||
import java.awt.FontFormatException;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.texture.TextureUtil;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import noppes.npcs.util.LRUHashMap;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class TrueTypeFont {
|
||||
private static final int MaxWidth = 512;
|
||||
private static final List<Font> allFonts = Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts());
|
||||
private List<Font> usedFonts = new ArrayList();
|
||||
private LinkedHashMap<String, TrueTypeFont.GlyphCache> textcache = new LRUHashMap(100);
|
||||
private Map<Character, TrueTypeFont.Glyph> glyphcache = new HashMap();
|
||||
private List<TrueTypeFont.TextureCache> textures = new ArrayList();
|
||||
private Font font;
|
||||
private int lineHeight = 1;
|
||||
private Graphics2D globalG = (Graphics2D)(new BufferedImage(1, 1, 2)).getGraphics();
|
||||
public float scale = 1.0F;
|
||||
private int specialChar = 167;
|
||||
|
||||
public TrueTypeFont(Font font, float scale) {
|
||||
this.font = font;
|
||||
this.scale = scale;
|
||||
this.globalG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
this.lineHeight = this.globalG.getFontMetrics(font).getHeight();
|
||||
}
|
||||
|
||||
public TrueTypeFont(ResourceLocation resource, int fontSize, float scale) throws IOException, FontFormatException {
|
||||
InputStream stream = Minecraft.getMinecraft().getResourceManager().getResource(resource).getInputStream();
|
||||
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
Font font = Font.createFont(0, stream);
|
||||
ge.registerFont(font);
|
||||
this.font = font.deriveFont(0, (float)fontSize);
|
||||
this.scale = scale;
|
||||
this.globalG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
this.lineHeight = this.globalG.getFontMetrics(font).getHeight();
|
||||
}
|
||||
|
||||
public void setSpecial(char c) {
|
||||
this.specialChar = c;
|
||||
}
|
||||
|
||||
public void draw(String text, float x, float y, int color) {
|
||||
TrueTypeFont.GlyphCache cache = this.getOrCreateCache(text);
|
||||
float r = (float)(color >> 16 & 255) / 255.0F;
|
||||
float g = (float)(color >> 8 & 255) / 255.0F;
|
||||
float b = (float)(color & 255) / 255.0F;
|
||||
GL11.glColor4f(r, g, b, 1.0F);
|
||||
//GlStateManager.func_179147_l();
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(x, y, 0.0F);
|
||||
GL11.glScalef(this.scale, this.scale, 1.0F);
|
||||
float i = 0.0F;
|
||||
Iterator var10 = cache.glyphs.iterator();
|
||||
|
||||
while(var10.hasNext()) {
|
||||
TrueTypeFont.Glyph gl = (TrueTypeFont.Glyph)var10.next();
|
||||
if(gl.type != TrueTypeFont.GlyphType.NORMAL) {
|
||||
if(gl.type == TrueTypeFont.GlyphType.RESET) {
|
||||
GL11.glColor4f(r, g, b, 1.0F);
|
||||
} else if(gl.type == TrueTypeFont.GlyphType.COLOR) {
|
||||
GL11.glColor4f((float) (gl.color >> 16 & 255) / 255.0F, (float) (gl.color >> 8 & 255) / 255.0F, (float) (gl.color & 255) / 255.0F, 1.0F);
|
||||
}
|
||||
} else {
|
||||
GL11.glBindTexture(gl.texture, gl.texture);
|
||||
this.drawTexturedModalRect(i, 0.0F, (float)gl.x * this.textureScale(), (float)gl.y * this.textureScale(), (float)gl.width * this.textureScale(), (float)gl.height * this.textureScale());
|
||||
i += (float)gl.width * this.textureScale();
|
||||
}
|
||||
}
|
||||
|
||||
//GlStateManager.func_179084_k();
|
||||
GL11.glPopMatrix();
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
private TrueTypeFont.GlyphCache getOrCreateCache(String text) {
|
||||
TrueTypeFont.GlyphCache cache = (TrueTypeFont.GlyphCache)this.textcache.get(text);
|
||||
if(cache != null) {
|
||||
return cache;
|
||||
} else {
|
||||
cache = new TrueTypeFont.GlyphCache();
|
||||
|
||||
for(int i = 0; i < text.length(); ++i) {
|
||||
char c = text.charAt(i);
|
||||
if(c == this.specialChar && i + 1 < text.length()) {
|
||||
char g = text.toLowerCase(Locale.ENGLISH).charAt(i + 1);
|
||||
int index = "0123456789abcdefklmnor".indexOf(g);
|
||||
if(index >= 0) {
|
||||
TrueTypeFont.Glyph g1 = new TrueTypeFont.Glyph();
|
||||
if(index < 16) {
|
||||
g1.type = TrueTypeFont.GlyphType.COLOR;
|
||||
//g1.color = Minecraft.getMinecraft().fontRenderer.func_175064_b(g);
|
||||
g1.color = 0;
|
||||
} else if(index == 16) {
|
||||
g1.type = TrueTypeFont.GlyphType.RANDOM;
|
||||
} else if(index == 17) {
|
||||
g1.type = TrueTypeFont.GlyphType.BOLD;
|
||||
} else if(index == 18) {
|
||||
g1.type = TrueTypeFont.GlyphType.STRIKETHROUGH;
|
||||
} else if(index == 19) {
|
||||
g1.type = TrueTypeFont.GlyphType.UNDERLINE;
|
||||
} else if(index == 20) {
|
||||
g1.type = TrueTypeFont.GlyphType.ITALIC;
|
||||
} else {
|
||||
g1.type = TrueTypeFont.GlyphType.RESET;
|
||||
}
|
||||
|
||||
cache.glyphs.add(g1);
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
TrueTypeFont.Glyph var8 = this.getOrCreateGlyph(c);
|
||||
cache.glyphs.add(var8);
|
||||
cache.width += var8.width;
|
||||
cache.height = Math.max(cache.height, var8.height);
|
||||
}
|
||||
|
||||
this.textcache.put(text, cache);
|
||||
return cache;
|
||||
}
|
||||
}
|
||||
|
||||
private TrueTypeFont.Glyph getOrCreateGlyph(char c) {
|
||||
TrueTypeFont.Glyph g = (TrueTypeFont.Glyph)this.glyphcache.get(Character.valueOf(c));
|
||||
if(g != null) {
|
||||
return g;
|
||||
} else {
|
||||
TrueTypeFont.TextureCache cache = this.getCurrentTexture();
|
||||
Font font = this.getFontForChar(c);
|
||||
FontMetrics metrics = this.globalG.getFontMetrics(font);
|
||||
g = new TrueTypeFont.Glyph();
|
||||
g.width = Math.max(metrics.charWidth(c), 1);
|
||||
g.height = Math.max(metrics.getHeight(), 1);
|
||||
if(cache.x + g.width >= 512) {
|
||||
cache.x = 0;
|
||||
cache.y += this.lineHeight + 1;
|
||||
if(cache.y >= 512) {
|
||||
cache.full = true;
|
||||
cache = this.getCurrentTexture();
|
||||
}
|
||||
}
|
||||
|
||||
g.x = cache.x;
|
||||
g.y = cache.y;
|
||||
cache.x += g.width + 3;
|
||||
this.lineHeight = Math.max(this.lineHeight, g.height);
|
||||
cache.g.setFont(font);
|
||||
cache.g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
cache.g.drawString(c + "", g.x, g.y + metrics.getAscent());
|
||||
g.texture = cache.textureId;
|
||||
TextureUtil.uploadTextureImage(cache.textureId, cache.bufferedImage);
|
||||
this.glyphcache.put(Character.valueOf(c), g);
|
||||
return g;
|
||||
}
|
||||
}
|
||||
|
||||
private TrueTypeFont.TextureCache getCurrentTexture() {
|
||||
TrueTypeFont.TextureCache cache = null;
|
||||
Iterator var2 = this.textures.iterator();
|
||||
|
||||
while(var2.hasNext()) {
|
||||
TrueTypeFont.TextureCache t = (TrueTypeFont.TextureCache)var2.next();
|
||||
if(!t.full) {
|
||||
cache = t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(cache == null) {
|
||||
this.textures.add(cache = new TrueTypeFont.TextureCache());
|
||||
}
|
||||
|
||||
return cache;
|
||||
}
|
||||
|
||||
public void drawCentered(String text, float x, float y, int color) {
|
||||
this.draw(text, x - (float)this.width(text) / 2.0F, y, color);
|
||||
}
|
||||
|
||||
private Font getFontForChar(char c) {
|
||||
if(this.font.canDisplay(c)) {
|
||||
return this.font;
|
||||
} else {
|
||||
Iterator fa = this.usedFonts.iterator();
|
||||
|
||||
Font f;
|
||||
do {
|
||||
if(!fa.hasNext()) {
|
||||
Font fa1 = new Font("Arial Unicode MS", 0, this.font.getSize());
|
||||
if(fa1.canDisplay(c)) {
|
||||
return fa1;
|
||||
}
|
||||
|
||||
Iterator f2 = allFonts.iterator();
|
||||
|
||||
Font f1;
|
||||
do {
|
||||
if(!f2.hasNext()) {
|
||||
return this.font;
|
||||
}
|
||||
|
||||
f1 = (Font)f2.next();
|
||||
} while(!f1.canDisplay(c));
|
||||
|
||||
this.usedFonts.add(f1 = f1.deriveFont(0, (float)this.font.getSize()));
|
||||
return f1;
|
||||
}
|
||||
|
||||
f = (Font)fa.next();
|
||||
} while(!f.canDisplay(c));
|
||||
|
||||
return f;
|
||||
}
|
||||
}
|
||||
|
||||
public void drawTexturedModalRect(float p_73729_1_, float p_73729_2_, float p_73729_3_, float p_73729_4_, float p_73729_5_, float p_73729_6_)
|
||||
{
|
||||
float f = 0.00390625F;
|
||||
float f1 = 0.00390625F;
|
||||
byte zLevel = 0;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + p_73729_6_), (double)zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
|
||||
tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + p_73729_6_), (double)zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + p_73729_6_) * f1));
|
||||
tessellator.addVertexWithUV((double)(p_73729_1_ + p_73729_5_), (double)(p_73729_2_ + 0), (double)zLevel, (double)((float)(p_73729_3_ + p_73729_5_) * f), (double)((float)(p_73729_4_ + 0) * f1));
|
||||
tessellator.addVertexWithUV((double)(p_73729_1_ + 0), (double)(p_73729_2_ + 0), (double)zLevel, (double)((float)(p_73729_3_ + 0) * f), (double)((float)(p_73729_4_ + 0) * f1));
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
public int width(String text) {
|
||||
TrueTypeFont.GlyphCache cache = this.getOrCreateCache(text);
|
||||
return (int)((float)cache.width * this.scale * this.textureScale());
|
||||
}
|
||||
|
||||
public int height(String text) {
|
||||
if(text != null && !text.trim().isEmpty()) {
|
||||
TrueTypeFont.GlyphCache cache = this.getOrCreateCache(text);
|
||||
return Math.max(1, (int)((float)cache.height * this.scale * this.textureScale()));
|
||||
} else {
|
||||
return (int)((float)this.lineHeight * this.scale * this.textureScale());
|
||||
}
|
||||
}
|
||||
|
||||
private float textureScale() {
|
||||
return 0.5F;
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
Iterator var1 = this.textures.iterator();
|
||||
|
||||
while(var1.hasNext()) {
|
||||
TrueTypeFont.TextureCache cache = (TrueTypeFont.TextureCache)var1.next();
|
||||
GL11.glDeleteTextures(cache.textureId);
|
||||
}
|
||||
|
||||
this.textcache.clear();
|
||||
}
|
||||
|
||||
public String getFontName() {
|
||||
return this.font.getFontName();
|
||||
}
|
||||
|
||||
class GlyphCache {
|
||||
public int width;
|
||||
public int height;
|
||||
List<TrueTypeFont.Glyph> glyphs = new ArrayList();
|
||||
|
||||
GlyphCache() {
|
||||
}
|
||||
}
|
||||
|
||||
class Glyph {
|
||||
TrueTypeFont.GlyphType type;
|
||||
int color;
|
||||
int x;
|
||||
int y;
|
||||
int height;
|
||||
int width;
|
||||
int texture;
|
||||
|
||||
Glyph() {
|
||||
this.type = TrueTypeFont.GlyphType.NORMAL;
|
||||
this.color = -1;
|
||||
}
|
||||
}
|
||||
|
||||
class TextureCache {
|
||||
int x;
|
||||
int y;
|
||||
int textureId = GL11.glGenTextures();
|
||||
BufferedImage bufferedImage = new BufferedImage(512, 512, 2);
|
||||
Graphics2D g;
|
||||
boolean full;
|
||||
|
||||
TextureCache() {
|
||||
this.g = (Graphics2D)this.bufferedImage.getGraphics();
|
||||
}
|
||||
}
|
||||
|
||||
static enum GlyphType {
|
||||
NORMAL,
|
||||
COLOR,
|
||||
RANDOM,
|
||||
BOLD,
|
||||
STRIKETHROUGH,
|
||||
UNDERLINE,
|
||||
ITALIC,
|
||||
RESET,
|
||||
OTHER;
|
||||
|
||||
private GlyphType() {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
package noppes.npcs.constants;
|
||||
|
||||
public enum EnumGuiType {
|
||||
MainMenuDisplay, MainMenuInv, MainMenuStats, ManageFactions, MainMenuAdvanced, MainMenuGlobal, PlayerBankSmall, PlayerFollowerHire, PlayerFollower, SetupItemGiver, SetupTrader, SetupFollower, PlayerTrader, PlayerTransporter, RedstoneBlock, SetupTransporter, ManageTransport, ManageBanks, MobSpawner, SetupBank, ManageDialogs, ManageQuests, PlayerAnvil, QuestReward, ManageRecipes, QuestItem, NpcRemote, MoneyBag, MainMenuAI, MovingPath, PlayerBankUnlock, PlayerBankUprade, PlayerBankLarge, MobSpawnerAdd, PlayerMailbox, PlayerMailman, Waypoint, MerchantAdd, MobSpawnerMounter, Crate, NpcDimensions, Border, BigSign, Script, Companion, CompanionInv, CompanionTalent, CompanionTrader, ManageLinked
|
||||
MainMenuDisplay, MainMenuInv, MainMenuStats, ManageFactions, MainMenuAdvanced, MainMenuGlobal, PlayerBankSmall, PlayerFollowerHire, PlayerFollower, SetupItemGiver, SetupTrader, SetupFollower, PlayerTrader, PlayerTransporter, RedstoneBlock, SetupTransporter, ManageTransport, ManageBanks, MobSpawner, SetupBank, ManageDialogs, ManageQuests, PlayerAnvil, QuestReward, ManageRecipes, QuestItem, NpcRemote, ScriptEvent, MoneyBag, MainMenuAI, MovingPath, PlayerBankUnlock, PlayerBankUprade, PlayerBankLarge, MobSpawnerAdd, PlayerMailbox, PlayerMailman, Waypoint, MerchantAdd, MobSpawnerMounter, Crate, NpcDimensions, Border, BigSign, Script, Companion, CompanionInv, CompanionTalent, CompanionTrader, ManageLinked
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package noppes.npcs.constants;
|
||||
|
||||
public enum EnumPacketClient {
|
||||
CHAT, MESSAGE, SYNCRECIPES_ADD, SYNCRECIPES_WORKBENCH, DIALOG, QUEST_COMPLETION, EDIT_NPC, PLAY_SOUND, PLAY_MUSIC, UPDATE_NPC, ROLE, GUI, PARTICLE, DELETE_NPC, SCROLL_LIST, SCROLL_DATA, SCROLL_DATA_PART, SCROLL_SELECTED, GUI_REDSTONE, GUI_WAYPOINT, GUI_DATA, GUI_ERROR, GUI_CLOSE, VILLAGER_LIST, CHATBUBBLE, SYNCRECIPES_CARPENTRYBENCH, CLONE, OPEN_BOOK, DIALOG_DUMMY, CONFIG
|
||||
CHAT, MESSAGE, SYNCRECIPES_ADD, SYNCRECIPES_WORKBENCH, DIALOG, QUEST_COMPLETION, EDIT_NPC, PLAY_SOUND, PLAY_MUSIC, UPDATE_NPC, ROLE, GUI, SCRIPTED_PARTICLE, PARTICLE, DELETE_NPC, SCROLL_LIST, SCROLL_DATA, SCROLL_DATA_PART, SCROLL_SELECTED, GUI_REDSTONE, GUI_WAYPOINT, GUI_DATA, GUI_ERROR, GUI_CLOSE, VILLAGER_LIST, CHATBUBBLE, SYNCRECIPES_CARPENTRYBENCH, CLONE, OPEN_BOOK, DIALOG_DUMMY, CONFIG, ISGUIOPEN
|
||||
|
||||
}
|
||||
@@ -34,6 +34,12 @@ public enum EnumPacketServer {
|
||||
|
||||
ClonePreSave(CustomNpcsPermissions.NPC_CLONE), CloneSave(CustomNpcsPermissions.NPC_CLONE), CloneRemove(CustomNpcsPermissions.NPC_CLONE), CloneList,
|
||||
|
||||
ScriptPlayerSave(CustomNpcsPermissions.TOOL_SCRIPTER, false),
|
||||
ScriptPlayerGet(false),
|
||||
|
||||
ScriptForgeSave(CustomNpcsPermissions.TOOL_SCRIPTER, false),
|
||||
ScriptForgeGet(false),
|
||||
|
||||
LinkedGetAll, LinkedRemove(CustomNpcsPermissions.GLOBAL_LINKED), LinkedAdd(CustomNpcsPermissions.GLOBAL_LINKED),
|
||||
ScriptDataSave(CustomNpcsPermissions.TOOL_SCRIPTER, true), ScriptDataGet(true),
|
||||
PlayerDataRemove(CustomNpcsPermissions.GLOBAL_PLAYERDATA),
|
||||
@@ -70,7 +76,7 @@ public enum EnumPacketServer {
|
||||
RemoteTpToNpc,QuestGet, QuestCategoryGet,
|
||||
SaveTileEntity,
|
||||
NaturalSpawnGetAll, MailOpenSetup,
|
||||
DimensionsGet, DimensionTeleport, GetTileEntity, Gui, ;
|
||||
DimensionsGet, DimensionTeleport, GetTileEntity, Gui, IsGuiOpen;
|
||||
|
||||
public CustomNpcsPermissions.Permission permission = null;
|
||||
public boolean needsNpc = false;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package noppes.npcs.constants;
|
||||
|
||||
public enum EnumPlayerPacket {
|
||||
FollowerHire,FollowerExtend,Trader, FollowerState, Transport, BankUnlock, BankUpgrade, Dialog, QuestLog, QuestCompletion, CheckQuestCompletion, BankSlotOpen, FactionsGet, MailGet, MailDelete, MailSend, MailRead, MailboxOpenMail, SignSave, SaveBook, CompanionOpenInv, RoleGet, CompanionTalentExp
|
||||
FollowerHire,FollowerExtend,Trader, FollowerState, Transport, BankUnlock, BankUpgrade, Dialog, QuestLog, QuestCompletion, CheckQuestCompletion, BankSlotOpen, FactionsGet, MailGet, MailDelete, MailSend, MailRead, MailboxOpenMail, SignSave, SaveBook, CompanionOpenInv, RoleGet, KeyPressed, MouseClicked, CompanionTalentExp
|
||||
}
|
||||
@@ -1,5 +1,86 @@
|
||||
package noppes.npcs.constants;
|
||||
|
||||
public enum EnumScriptType {
|
||||
INIT, TICK, INTERACT, DIALOG, DAMAGED, KILLED, ATTACK, TARGET, COLLIDE, KILLS, DIALOG_OPTION
|
||||
}
|
||||
INIT("init"),
|
||||
TICK("tick"),
|
||||
INTERACT("interact"),
|
||||
DIALOG("dialog"),
|
||||
DAMAGED("damaged"),
|
||||
KILLED("killed"),
|
||||
ATTACK("attack"),
|
||||
TARGET("target"),
|
||||
COLLIDE("collide"),
|
||||
KILLS("kills"),
|
||||
DIALOG_OPTION("dialogOption"),
|
||||
TIMER("timer"),
|
||||
|
||||
ATTACK_MELEE("meleeAttack"),
|
||||
TARGET_LOST("targetLost"),
|
||||
ROLE("role"),
|
||||
RANGED_CHARGE("rangedCharge"),
|
||||
RANGED_LAUNCHED("rangedLaunched"),
|
||||
CLICKED("clicked"),
|
||||
FALLEN_UPON("fallenUpon"),
|
||||
RAIN_FILLED("rainFilled"),
|
||||
BROKEN("broken"),
|
||||
HARVESTED("harvested"),
|
||||
EXPLODED("exploded"),
|
||||
NEIGHBOR_CHANGED("neighborChanged"),
|
||||
REDSTONE("redstone"),
|
||||
DOOR_TOGGLE("doorToggle"),
|
||||
TOSS("toss"),
|
||||
DROP("drop"),
|
||||
CONTAINER_OPEN("containerOpen"),
|
||||
CONTAINER_CLOSED("containerClosed"),
|
||||
LOGIN("login"),
|
||||
LOGOUT("logout"),
|
||||
CHAT("chat"),
|
||||
DAMAGED_ENTITY("damagedEntity"),
|
||||
DIALOG_CLOSE("dialogClose"),
|
||||
SPAWN("spawn"),
|
||||
TOSSED("tossed"),
|
||||
PICKEDUP("pickedUp"),
|
||||
PICKUP("pickUp"),
|
||||
PROJECTILE_TICK("projectileTick"),
|
||||
PROJECTILE_IMPACT("projectileImpact"),
|
||||
LEVEL_UP("levelUp"),
|
||||
QUEST_START("questStart"),
|
||||
QUEST_COMPLETED("questCompleted"),
|
||||
QUEST_TURNIN("questTurnIn"),
|
||||
KEY_PRESSED("keyPressed"),
|
||||
CUSTOM_CHEST_CLOSED("customChestClosed"),
|
||||
CUSTOM_CHEST_CLICKED("customChestClicked"),
|
||||
SCRIPT_COMMAND("scriptCommand"),
|
||||
CUSTOM_GUI_CLOSED("customGuiClosed"),
|
||||
CUSTOM_GUI_BUTTON("customGuiButton"),
|
||||
CUSTOM_GUI_SLOT("customGuiSlot"),
|
||||
CUSTOM_GUI_SCROLL("customGuiScroll"),
|
||||
PICKUP_XP("pickupXP"),
|
||||
MOUSE_CLICKED("mouseClicked"),
|
||||
START_USING_ITEM("startItem"),
|
||||
USING_ITEM("usingItem"),
|
||||
STOP_USING_ITEM("stopItem"),
|
||||
FINISH_USING_ITEM("finishItem"),
|
||||
USE_HOE("useHoe"),
|
||||
SLEEP("sleep"),
|
||||
WAKE_UP("wakeUp"),
|
||||
FILL_BUCKET("fillBucket"),
|
||||
BONEMEAL("bonemeal"),
|
||||
ACHIEVEMENT("achievement"),
|
||||
FALL("fall"),
|
||||
JUMP("jump"),
|
||||
LIGHTNING("lightning"),
|
||||
PLAYSOUND("playSound"),
|
||||
RESPAWN("respawn"),
|
||||
CHANGED_DIM("changedDim"),
|
||||
BREAK_BLOCK("breakBlock"),
|
||||
FORGE_INIT("forgeInit"),
|
||||
FORGE_ENTITY("forgeEntity"),
|
||||
FORGE_WORLD("forgeWorld");
|
||||
|
||||
public String function;
|
||||
|
||||
private EnumScriptType(String function) {
|
||||
this.function = function;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,13 @@ package noppes.npcs.containers;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import noppes.npcs.scripted.interfaces.IContainer;
|
||||
import noppes.npcs.scripted.ScriptContainer;
|
||||
|
||||
public class ContainerNpcInterface extends Container{
|
||||
private int posX, posZ;
|
||||
public EntityPlayer player;
|
||||
public IContainer scriptContainer;
|
||||
|
||||
public ContainerNpcInterface(EntityPlayer player){
|
||||
posX = MathHelper.floor_double(player.posX);
|
||||
@@ -18,4 +22,11 @@ public class ContainerNpcInterface extends Container{
|
||||
return !player.isDead && posX == MathHelper.floor_double(player.posX) && posZ == MathHelper.floor_double(player.posZ);
|
||||
}
|
||||
|
||||
public static IContainer getOrCreateIContainer(ContainerNpcInterface container) {
|
||||
if (container.scriptContainer != null) {
|
||||
return container.scriptContainer;
|
||||
} else {
|
||||
return container.scriptContainer = new ScriptContainer(container);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.controllers;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.constants.EnumScriptType;
|
||||
|
||||
public interface IScriptHandler {
|
||||
void callScript(EnumScriptType var1, Event var2, Object... obs);
|
||||
|
||||
boolean isClient();
|
||||
|
||||
boolean getEnabled();
|
||||
|
||||
void setEnabled(boolean var1);
|
||||
|
||||
String getLanguage();
|
||||
|
||||
void setLanguage(String var1);
|
||||
|
||||
List<EventScriptContainer> getScripts();
|
||||
|
||||
String noticeString();
|
||||
|
||||
Map<Long, String> getConsoleText();
|
||||
|
||||
void clearConsole();
|
||||
}
|
||||
@@ -2,13 +2,23 @@ package noppes.npcs.controllers;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.CompressedStreamTools;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.IExtendedEntityProperties;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.LogWriter;
|
||||
import noppes.npcs.constants.EnumRoleType;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.entity.data.DataTimers;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import noppes.npcs.util.NBTJsonUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
||||
public class PlayerData implements IExtendedEntityProperties{
|
||||
public PlayerDialogData dialogData = new PlayerDialogData();
|
||||
@@ -18,7 +28,9 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
public PlayerFactionData factionData = new PlayerFactionData();
|
||||
public PlayerItemGiverData itemgiverData = new PlayerItemGiverData();
|
||||
public PlayerMailData mailData = new PlayerMailData();
|
||||
|
||||
public PlayerDataScript scriptData;
|
||||
public DataTimers timers = new DataTimers(this);
|
||||
|
||||
public EntityNPCInterface editingNpc;
|
||||
public NBTTagCompound cloned;
|
||||
|
||||
@@ -26,10 +38,12 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
|
||||
public String playername = "";
|
||||
public String uuid = "";
|
||||
|
||||
|
||||
private EntityNPCInterface activeCompanion = null;
|
||||
public int companionID = 0;
|
||||
|
||||
public boolean isGUIOpen = false;
|
||||
|
||||
@Override
|
||||
public void saveNBTData(NBTTagCompound compound) {
|
||||
PlayerDataController.instance.savePlayerData(this);
|
||||
@@ -51,8 +65,8 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
transportData.loadNBTData(data);
|
||||
factionData.loadNBTData(data);
|
||||
itemgiverData.loadNBTData(data);
|
||||
mailData.loadNBTData(data);
|
||||
|
||||
mailData.loadNBTData(data);
|
||||
timers.readFromNBT(data);
|
||||
|
||||
if(player != null){
|
||||
playername = player.getCommandSenderName();
|
||||
@@ -73,6 +87,7 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
player.worldObj.spawnEntityInWorld(npc);
|
||||
}
|
||||
}
|
||||
isGUIOpen = data.getBoolean("isGUIOpen");
|
||||
}
|
||||
public NBTTagCompound getNBT() {
|
||||
if(player != null){
|
||||
@@ -87,10 +102,12 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
factionData.saveNBTData(compound);
|
||||
itemgiverData.saveNBTData(compound);
|
||||
mailData.saveNBTData(compound);
|
||||
|
||||
timers.writeToNBT(compound);
|
||||
|
||||
compound.setString("PlayerName", playername);
|
||||
compound.setString("UUID", uuid);
|
||||
compound.setInteger("PlayerCompanionId", companionID);
|
||||
compound.setBoolean("isGUIOpen",isGUIOpen);
|
||||
|
||||
if(hasCompanion()){
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
@@ -104,7 +121,17 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
public void init(Entity entity, World world) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void setGUIOpen(boolean bool) {
|
||||
isGUIOpen = bool;
|
||||
saveNBTData(null);
|
||||
}
|
||||
|
||||
public boolean getGUIOpen() {
|
||||
loadNBTData(null);
|
||||
return isGUIOpen;
|
||||
}
|
||||
|
||||
public boolean hasCompanion(){
|
||||
return activeCompanion != null && !activeCompanion.isDead;
|
||||
}
|
||||
@@ -138,4 +165,83 @@ public class PlayerData implements IExtendedEntityProperties{
|
||||
world.spawnEntityInWorld(npc);
|
||||
}
|
||||
|
||||
public static NBTTagCompound loadPlayerDataOld(String player) {
|
||||
File saveDir = CustomNpcs.getWorldSaveDirectory("playerdata");
|
||||
String filename = player;
|
||||
if (player.isEmpty()) {
|
||||
filename = "noplayername";
|
||||
}
|
||||
|
||||
filename = filename + ".dat";
|
||||
|
||||
File file;
|
||||
try {
|
||||
file = new File(saveDir, filename);
|
||||
if (file.exists()) {
|
||||
NBTTagCompound comp = CompressedStreamTools.readCompressed(new FileInputStream(file));
|
||||
file.delete();
|
||||
file = new File(saveDir, filename + "_old");
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
return comp;
|
||||
}
|
||||
} catch (Exception var6) {
|
||||
LogWriter.except(var6);
|
||||
}
|
||||
|
||||
try {
|
||||
file = new File(saveDir, filename + "_old");
|
||||
if (file.exists()) {
|
||||
return CompressedStreamTools.readCompressed(new FileInputStream(file));
|
||||
}
|
||||
} catch (Exception var5) {
|
||||
LogWriter.except(var5);
|
||||
}
|
||||
|
||||
return new NBTTagCompound();
|
||||
}
|
||||
|
||||
public static NBTTagCompound loadPlayerData(String player) {
|
||||
File saveDir = CustomNpcs.getWorldSaveDirectory("playerdata");
|
||||
String filename = player;
|
||||
if (player.isEmpty()) {
|
||||
filename = "noplayername";
|
||||
}
|
||||
|
||||
filename = filename + ".json";
|
||||
File file = null;
|
||||
|
||||
try {
|
||||
file = new File(saveDir, filename);
|
||||
if (file.exists()) {
|
||||
return NBTJsonUtil.LoadFile(file);
|
||||
}
|
||||
} catch (Exception var5) {
|
||||
LogWriter.error("Error loading: " + file.getAbsolutePath(), var5);
|
||||
}
|
||||
|
||||
return new NBTTagCompound();
|
||||
}
|
||||
|
||||
public static PlayerData get(EntityPlayer player) {
|
||||
if(player.worldObj.isRemote) {
|
||||
return CustomNpcs.proxy.getPlayerData(player);
|
||||
} else {
|
||||
PlayerData data = new PlayerData();
|
||||
if (data.player == null) {
|
||||
data.player = player;
|
||||
data.scriptData = new PlayerDataScript(player);
|
||||
NBTTagCompound compound = loadPlayerData(player.getPersistentID().toString());
|
||||
if (compound.hasNoTags()) {
|
||||
compound = loadPlayerDataOld(player.getCommandSenderName());
|
||||
}
|
||||
|
||||
data.setNBT(compound);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.monster.EntityMob;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.passive.EntityTameable;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
@@ -27,20 +28,23 @@ import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.LogWriter;
|
||||
import noppes.npcs.controllers.data.ForgeDataScript;
|
||||
import noppes.npcs.controllers.data.PlayerDataScript;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.ScriptAnimal;
|
||||
import noppes.npcs.scripted.ScriptEntity;
|
||||
import noppes.npcs.scripted.ScriptLiving;
|
||||
import noppes.npcs.scripted.ScriptLivingBase;
|
||||
import noppes.npcs.scripted.ScriptMonster;
|
||||
import noppes.npcs.scripted.ScriptPixelmon;
|
||||
import noppes.npcs.scripted.ScriptPlayer;
|
||||
import noppes.npcs.scripted.entity.ScriptAnimal;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
import noppes.npcs.scripted.entity.ScriptLiving;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
import noppes.npcs.scripted.entity.ScriptMonster;
|
||||
import noppes.npcs.scripted.entity.ScriptPixelmon;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.scripted.ScriptWorld;
|
||||
import noppes.npcs.util.JsonException;
|
||||
import noppes.npcs.util.NBTJsonUtil;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
public class ScriptController {
|
||||
|
||||
|
||||
public static ScriptController Instance;
|
||||
public static boolean HasStart = false;
|
||||
private ScriptEngineManager manager;
|
||||
@@ -49,10 +53,15 @@ public class ScriptController {
|
||||
public long lastLoaded = 0;
|
||||
public File dir;
|
||||
public NBTTagCompound compound = new NBTTagCompound();
|
||||
|
||||
|
||||
private boolean loaded = false;
|
||||
public boolean shouldSave = false;
|
||||
|
||||
|
||||
public PlayerDataScript playerScripts = new PlayerDataScript((EntityPlayer)null);
|
||||
public long lastPlayerUpdate = 0L;
|
||||
|
||||
public ForgeDataScript forgeScripts = new ForgeDataScript();
|
||||
|
||||
public ScriptController(){
|
||||
loaded = false;
|
||||
Instance = this;
|
||||
@@ -68,6 +77,78 @@ public class ScriptController {
|
||||
}
|
||||
}
|
||||
|
||||
private File forgeScriptsFile() {
|
||||
return new File(this.dir, "forge_scripts.json");
|
||||
}
|
||||
|
||||
public boolean loadForgeScripts() {
|
||||
this.forgeScripts.clear();
|
||||
File file = this.forgeScriptsFile();
|
||||
|
||||
try {
|
||||
if(!file.exists()) {
|
||||
return false;
|
||||
} else {
|
||||
this.forgeScripts.readFromNBT(NBTJsonUtil.LoadFile(file));
|
||||
return true;
|
||||
}
|
||||
} catch (Exception var3) {
|
||||
LogWriter.error("Error loading: " + file.getAbsolutePath(), var3);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setForgeScripts(NBTTagCompound compound) {
|
||||
this.forgeScripts.readFromNBT(compound);
|
||||
File file = this.forgeScriptsFile();
|
||||
|
||||
try {
|
||||
NBTJsonUtil.SaveFile(file, compound);
|
||||
this.forgeScripts.lastInited = -1L;
|
||||
} catch (IOException var4) {
|
||||
var4.printStackTrace();
|
||||
} catch (JsonException var5) {
|
||||
var5.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private File playerScriptsFile() {
|
||||
return new File(dir, "player_scripts.json");
|
||||
}
|
||||
|
||||
public boolean loadPlayerScripts() {
|
||||
this.playerScripts.clear();
|
||||
File file = this.playerScriptsFile();
|
||||
|
||||
try {
|
||||
if(!file.exists()) {
|
||||
return false;
|
||||
} else {
|
||||
this.playerScripts.readFromNBT(NBTJsonUtil.LoadFile(file));
|
||||
shouldSave = false;
|
||||
return true;
|
||||
}
|
||||
} catch (Exception var3) {
|
||||
LogWriter.error("Error loading: " + file.getAbsolutePath(), var3);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setPlayerScripts(NBTTagCompound compound) {
|
||||
this.playerScripts.readFromNBT(compound);
|
||||
File file = this.playerScriptsFile();
|
||||
|
||||
try {
|
||||
NBTJsonUtil.SaveFile(file, compound);
|
||||
this.lastPlayerUpdate = System.currentTimeMillis();
|
||||
} catch (IOException var4) {
|
||||
var4.printStackTrace();
|
||||
} catch (JsonException var5) {
|
||||
var5.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadCategories(){
|
||||
dir = new File(CustomNpcs.getWorldSaveDirectory(), "scripts");
|
||||
if(!dir.exists())
|
||||
@@ -103,39 +184,40 @@ public class ScriptController {
|
||||
}
|
||||
}
|
||||
public boolean loadStoredData(){
|
||||
loadCategories();
|
||||
File file = getSavedFile();
|
||||
try {
|
||||
if(!file.exists())
|
||||
return false;
|
||||
this.compound = NBTJsonUtil.LoadFile(file);
|
||||
shouldSave = false;
|
||||
}
|
||||
catch (Exception e) {
|
||||
loadCategories();
|
||||
File file = getSavedFile();
|
||||
try {
|
||||
if(!file.exists())
|
||||
return false;
|
||||
this.compound = NBTJsonUtil.LoadFile(file);
|
||||
shouldSave = false;
|
||||
}
|
||||
catch (Exception e) {
|
||||
LogWriter.error("Error loading: " + file.getAbsolutePath(), e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private File getSavedFile(){
|
||||
return new File(dir, "world_data.json");
|
||||
}
|
||||
private String readFile(File file) throws IOException {
|
||||
BufferedReader br = new BufferedReader(new FileReader(file));
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String line = br.readLine();
|
||||
|
||||
while (line != null) {
|
||||
sb.append(line);
|
||||
sb.append("\n");
|
||||
line = br.readLine();
|
||||
}
|
||||
return sb.toString();
|
||||
} finally {
|
||||
br.close();
|
||||
}
|
||||
private String readFile(File file) throws IOException {
|
||||
BufferedReader br = new BufferedReader(new FileReader(file));
|
||||
try {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String line = br.readLine();
|
||||
|
||||
while (line != null) {
|
||||
sb.append(line);
|
||||
sb.append("\n");
|
||||
line = br.readLine();
|
||||
}
|
||||
return sb.toString();
|
||||
} finally {
|
||||
br.close();
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptEngine getEngineByName(String language) {
|
||||
@@ -156,7 +238,7 @@ public class ScriptController {
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
private List<String> getScripts(String language){
|
||||
List<String> list = new ArrayList<String>();
|
||||
String ext = languages.get(language);
|
||||
@@ -202,14 +284,14 @@ public class ScriptController {
|
||||
public void saveWorld(WorldEvent.Save event){
|
||||
if(!shouldSave || event.world.isRemote || event.world != MinecraftServer.getServer().worldServers[0])
|
||||
return;
|
||||
|
||||
|
||||
try {
|
||||
NBTJsonUtil.SaveFile(getSavedFile(), compound);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
LogWriter.except(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
shouldSave = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import net.minecraft.entity.Entity;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.IExtendedEntityProperties;
|
||||
import noppes.npcs.scripted.ScriptEntity;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
|
||||
public class ScriptEntityData implements IExtendedEntityProperties{
|
||||
public ScriptEntity base;
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.controllers.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.EventHooks;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.NBTTags;
|
||||
import noppes.npcs.constants.EnumScriptType;
|
||||
import noppes.npcs.controllers.IScriptHandler;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.wrapper.WrapperNpcAPI;
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
|
||||
public class ForgeDataScript implements IScriptHandler {
|
||||
private List<EventScriptContainer> scripts = new ArrayList();
|
||||
private String scriptLanguage = "ECMAScript";
|
||||
public long lastInited = -1L;
|
||||
private boolean enabled = false;
|
||||
|
||||
public ForgeDataScript() {
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.scripts = new ArrayList();
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this);
|
||||
this.scriptLanguage = compound.getString("ScriptLanguage");
|
||||
this.enabled = compound.getBoolean("ScriptEnabled");
|
||||
}
|
||||
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
|
||||
compound.setTag("Scripts", NBTTags.NBTScript(this.scripts));
|
||||
compound.setString("ScriptLanguage", this.scriptLanguage);
|
||||
compound.setBoolean("ScriptEnabled", this.enabled);
|
||||
return compound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void callScript(EnumScriptType var1, Event var2, Object... obs) {
|
||||
callScript(var1.function, var2);
|
||||
}
|
||||
|
||||
public void callScript(String type, Event event) {
|
||||
if(this.isEnabled()) {
|
||||
//Minecraft.getMinecraft().func_152344_a(() -> {
|
||||
if (ScriptController.Instance.lastLoaded > this.lastInited) {
|
||||
this.lastInited = ScriptController.Instance.lastLoaded;
|
||||
if (!type.equals("init")) {
|
||||
EventHooks.onForgeInit(this);
|
||||
}
|
||||
}
|
||||
|
||||
Iterator var3 = this.scripts.iterator();
|
||||
|
||||
while (var3.hasNext()) {
|
||||
EventScriptContainer script = (EventScriptContainer) var3.next();
|
||||
|
||||
script.setEngine(scriptLanguage);
|
||||
if(script.engine == null)
|
||||
return;
|
||||
|
||||
Event result = (Event) script.engine.get("event");
|
||||
if(result == null)
|
||||
script.engine.put("event", event);
|
||||
script.engine.put("API", new WrapperNpcAPI());
|
||||
|
||||
ScriptEngine engine = script.engine;
|
||||
|
||||
script.run(type, event);
|
||||
}
|
||||
//});
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return this.enabled && ScriptController.HasStart && this.scripts.size() > 0;
|
||||
}
|
||||
|
||||
public boolean isClient() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean getEnabled() {
|
||||
return this.enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean bo) {
|
||||
this.enabled = bo;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return this.scriptLanguage;
|
||||
}
|
||||
|
||||
public void setLanguage(String lang) {
|
||||
this.scriptLanguage = lang;
|
||||
}
|
||||
|
||||
public List<EventScriptContainer> getScripts() {
|
||||
return this.scripts;
|
||||
}
|
||||
|
||||
public String noticeString() {
|
||||
return "ForgeScript";
|
||||
}
|
||||
|
||||
public Map<Long, String> getConsoleText() {
|
||||
TreeMap map = new TreeMap();
|
||||
int tab = 0;
|
||||
Iterator var3 = this.getScripts().iterator();
|
||||
|
||||
while(var3.hasNext()) {
|
||||
EventScriptContainer script = (EventScriptContainer)var3.next();
|
||||
++tab;
|
||||
Iterator var5 = script.console.entrySet().iterator();
|
||||
|
||||
while(var5.hasNext()) {
|
||||
Entry entry = (Entry)var5.next();
|
||||
map.put(entry.getKey(), " tab " + tab + ":\n" + (String)entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
public void clearConsole() {
|
||||
Iterator var1 = this.getScripts().iterator();
|
||||
|
||||
while(var1.hasNext()) {
|
||||
EventScriptContainer script = (EventScriptContainer)var1.next();
|
||||
script.console.clear();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,403 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.controllers.data;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import noppes.npcs.EventHooks;
|
||||
import noppes.npcs.EventScriptContainer;
|
||||
import noppes.npcs.NBTTags;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.constants.EnumScriptType;
|
||||
import noppes.npcs.controllers.IScriptHandler;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.ScriptWorld;
|
||||
import noppes.npcs.scripted.event.PlayerEvent;
|
||||
import noppes.npcs.scripted.interfaces.IPlayer;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
import noppes.npcs.scripted.wrapper.WrapperNpcAPI;
|
||||
|
||||
import javax.annotation.CheckForNull;
|
||||
import javax.script.ScriptEngine;
|
||||
|
||||
public class PlayerDataScript implements IScriptHandler {
|
||||
public List<EventScriptContainer> scripts = new ArrayList();
|
||||
public String scriptLanguage = "ECMAScript";
|
||||
private EntityPlayer player;
|
||||
private IPlayer playerAPI;
|
||||
private long lastPlayerUpdate = 0L;
|
||||
public long lastInited = -1L;
|
||||
public boolean hadInteract = true;
|
||||
public boolean enabled = false;
|
||||
private Map<Long, String> console = new TreeMap();
|
||||
public List<Integer> errored = new ArrayList();
|
||||
|
||||
public IPlayer dummyPlayer;
|
||||
public IWorld dummyWorld;
|
||||
|
||||
public PlayerDataScript(EntityPlayer player) {
|
||||
if(player != null) {
|
||||
this.player = player;
|
||||
if (player instanceof EntityPlayer)
|
||||
dummyPlayer = (IPlayer) ScriptController.Instance.getScriptForEntity(this.player);
|
||||
if (player.worldObj instanceof WorldServer)
|
||||
dummyWorld = (IWorld) NpcAPI.Instance().getIWorld((WorldServer) this.player.worldObj);
|
||||
}
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.console = new TreeMap();
|
||||
this.errored = new ArrayList();
|
||||
this.scripts = new ArrayList();
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this);
|
||||
this.scriptLanguage = compound.getString("ScriptLanguage");
|
||||
this.enabled = compound.getBoolean("ScriptEnabled");
|
||||
this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10));
|
||||
}
|
||||
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
|
||||
compound.setTag("Scripts", NBTTags.NBTScript(this.scripts));
|
||||
compound.setString("ScriptLanguage", this.scriptLanguage);
|
||||
compound.setBoolean("ScriptEnabled", this.enabled);
|
||||
compound.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.console));
|
||||
return compound;
|
||||
}
|
||||
|
||||
public void callScript(EnumScriptType type, Event event, Object... obs) {
|
||||
if(this.isEnabled()) {
|
||||
EventScriptContainer script;
|
||||
if(ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastPlayerUpdate > this.lastPlayerUpdate) {
|
||||
this.lastInited = ScriptController.Instance.lastLoaded;
|
||||
//ScriptController.Instance.playerScripts.errored.clear();
|
||||
if(this.player != null) {
|
||||
this.scripts.clear();
|
||||
Iterator i = ScriptController.Instance.playerScripts.scripts.iterator();
|
||||
|
||||
while(i.hasNext()) {
|
||||
script = (EventScriptContainer)i.next();
|
||||
EventScriptContainer s = new EventScriptContainer(this);
|
||||
s.readFromNBT(script.writeToNBT(new NBTTagCompound()));
|
||||
|
||||
this.scripts.add(s);
|
||||
}
|
||||
}
|
||||
|
||||
this.lastPlayerUpdate = ScriptController.Instance.lastPlayerUpdate;
|
||||
if(type != EnumScriptType.INIT) {
|
||||
EventHooks.onPlayerInit(this);
|
||||
}
|
||||
}
|
||||
|
||||
for(int var7 = 0; var7 < this.scripts.size(); ++var7) {
|
||||
script = (EventScriptContainer)this.scripts.get(var7);
|
||||
|
||||
if(!ScriptController.Instance.playerScripts.errored.contains(Integer.valueOf(var7))) {
|
||||
if(script == null || script.errored || !script.hasCode())
|
||||
return;
|
||||
script.setEngine(scriptLanguage);
|
||||
if(script.engine == null)
|
||||
return;
|
||||
for(int i = 0; i + 1 < obs.length; i += 2){
|
||||
Object ob = obs[i + 1];
|
||||
if(ob instanceof Entity)
|
||||
ob = ScriptController.Instance.getScriptForEntity((Entity)ob);
|
||||
script.engine.put(obs[i].toString(), ob);
|
||||
}
|
||||
|
||||
ScriptEngine engine = script.engine;
|
||||
engine.put("world", dummyWorld);
|
||||
engine.put("player", dummyPlayer);
|
||||
PlayerEvent result = (PlayerEvent) engine.get("event");
|
||||
if(result == null)
|
||||
engine.put("event", result = new PlayerEvent(this.getPlayer()));
|
||||
script.engine.put("API", new WrapperNpcAPI());
|
||||
script.run(type, event);
|
||||
|
||||
if (script.errored) {
|
||||
ScriptController.Instance.playerScripts.errored.add(var7);
|
||||
}
|
||||
|
||||
Iterator var8 = script.console.entrySet().iterator();
|
||||
|
||||
while(var8.hasNext()) {
|
||||
Entry<Long, String> entry = (Entry)var8.next();
|
||||
if (!ScriptController.Instance.playerScripts.console.containsKey(entry.getKey())) {
|
||||
ScriptController.Instance.playerScripts.console.put(entry.getKey(), " tab " + (var7 + 1) + ":\n" + (String)entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
script.console.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return ScriptController.Instance.playerScripts.enabled && ScriptController.HasStart && (this.player == null || !this.player.worldObj.isRemote);
|
||||
}
|
||||
|
||||
public boolean isClient() {
|
||||
return this.player.isClientWorld();
|
||||
}
|
||||
|
||||
public boolean getEnabled() {
|
||||
return ScriptController.Instance.playerScripts.enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean bo) {
|
||||
ScriptController.Instance.playerScripts.enabled = bo;
|
||||
this.enabled = bo;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return ScriptController.Instance.playerScripts.scriptLanguage;
|
||||
}
|
||||
|
||||
public void setLanguage(String lang) {
|
||||
this.scriptLanguage = lang;
|
||||
}
|
||||
|
||||
public List<EventScriptContainer> getScripts() {
|
||||
return this.scripts;
|
||||
}
|
||||
|
||||
public String noticeString() {
|
||||
if(this.player == null) {
|
||||
return "Global script";
|
||||
} else {
|
||||
BlockPos pos = new BlockPos(this.player);
|
||||
return PlayerDataScript.toStringHelper(this.player).add("x", pos.getX()).add("y", pos.getY()).add("z", pos.getZ()).toString();
|
||||
}
|
||||
}
|
||||
|
||||
public IPlayer getPlayer() {
|
||||
if (this.playerAPI == null) {
|
||||
this.playerAPI = (IPlayer) NpcAPI.Instance().getIEntity(this.player);
|
||||
}
|
||||
|
||||
return this.playerAPI;
|
||||
}
|
||||
|
||||
public Map<Long, String> getConsoleText() {
|
||||
return this.console;
|
||||
}
|
||||
|
||||
public void clearConsole() {
|
||||
this.console.clear();
|
||||
}
|
||||
|
||||
public static final class ToStringHelper {
|
||||
private final String className;
|
||||
private final PlayerDataScript.ToStringHelper.ValueHolder holderHead;
|
||||
private PlayerDataScript.ToStringHelper.ValueHolder holderTail;
|
||||
private boolean omitNullValues;
|
||||
private boolean omitEmptyValues;
|
||||
|
||||
private ToStringHelper(String className) {
|
||||
this.holderHead = new PlayerDataScript.ToStringHelper.ValueHolder();
|
||||
this.holderTail = this.holderHead;
|
||||
this.omitNullValues = false;
|
||||
this.omitEmptyValues = false;
|
||||
this.className = (String) Preconditions.checkNotNull(className);
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper omitNullValues() {
|
||||
this.omitNullValues = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, @CheckForNull Object value) {
|
||||
return this.addHolder(name, value);
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, boolean value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, char value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, double value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, float value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, int value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper add(String name, long value) {
|
||||
return this.addUnconditionalHolder(name, String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(@CheckForNull Object value) {
|
||||
return this.addHolder(value);
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(boolean value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(char value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(double value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(float value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(int value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
public PlayerDataScript.ToStringHelper addValue(long value) {
|
||||
return this.addUnconditionalHolder(String.valueOf(value));
|
||||
}
|
||||
|
||||
private static boolean isEmpty(Object value) {
|
||||
if (value instanceof CharSequence) {
|
||||
return ((CharSequence)value).length() == 0;
|
||||
} else if (value instanceof Collection) {
|
||||
return ((Collection)value).isEmpty();
|
||||
} else if (value instanceof Map) {
|
||||
return ((Map)value).isEmpty();
|
||||
} else if (value instanceof Optional) {
|
||||
return !((Optional)value).isPresent();
|
||||
} else if (value instanceof OptionalInt) {
|
||||
return !((OptionalInt)value).isPresent();
|
||||
} else if (value instanceof OptionalLong) {
|
||||
return !((OptionalLong)value).isPresent();
|
||||
} else if (value instanceof OptionalDouble) {
|
||||
return !((OptionalDouble)value).isPresent();
|
||||
} else if (value instanceof com.google.common.base.Optional) {
|
||||
return !((com.google.common.base.Optional)value).isPresent();
|
||||
} else if (value.getClass().isArray()) {
|
||||
return Array.getLength(value) == 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
boolean omitNullValuesSnapshot = this.omitNullValues;
|
||||
boolean omitEmptyValuesSnapshot = this.omitEmptyValues;
|
||||
String nextSeparator = "";
|
||||
StringBuilder builder = (new StringBuilder(32)).append(this.className).append('{');
|
||||
|
||||
for(PlayerDataScript.ToStringHelper.ValueHolder valueHolder = this.holderHead.next; valueHolder != null; valueHolder = valueHolder.next) {
|
||||
Object value = valueHolder.value;
|
||||
if (!(valueHolder instanceof PlayerDataScript.ToStringHelper.UnconditionalValueHolder)) {
|
||||
if (value == null) {
|
||||
if (omitNullValuesSnapshot) {
|
||||
continue;
|
||||
}
|
||||
} else if (omitEmptyValuesSnapshot && isEmpty(value)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
builder.append(nextSeparator);
|
||||
nextSeparator = ", ";
|
||||
if (valueHolder.name != null) {
|
||||
builder.append(valueHolder.name).append('=');
|
||||
}
|
||||
|
||||
if (value != null && value.getClass().isArray()) {
|
||||
Object[] objectArray = new Object[]{value};
|
||||
String arrayString = Arrays.deepToString(objectArray);
|
||||
builder.append(arrayString, 1, arrayString.length() - 1);
|
||||
} else {
|
||||
builder.append(value);
|
||||
}
|
||||
}
|
||||
|
||||
return builder.append('}').toString();
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper.ValueHolder addHolder() {
|
||||
PlayerDataScript.ToStringHelper.ValueHolder valueHolder = new PlayerDataScript.ToStringHelper.ValueHolder();
|
||||
this.holderTail = this.holderTail.next = valueHolder;
|
||||
return valueHolder;
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper addHolder(@CheckForNull Object value) {
|
||||
PlayerDataScript.ToStringHelper.ValueHolder valueHolder = this.addHolder();
|
||||
valueHolder.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper addHolder(String name, @CheckForNull Object value) {
|
||||
PlayerDataScript.ToStringHelper.ValueHolder valueHolder = this.addHolder();
|
||||
valueHolder.value = value;
|
||||
valueHolder.name = (String)Preconditions.checkNotNull(name);
|
||||
return this;
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper.UnconditionalValueHolder addUnconditionalHolder() {
|
||||
PlayerDataScript.ToStringHelper.UnconditionalValueHolder valueHolder = new PlayerDataScript.ToStringHelper.UnconditionalValueHolder();
|
||||
this.holderTail = this.holderTail.next = valueHolder;
|
||||
return valueHolder;
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper addUnconditionalHolder(Object value) {
|
||||
PlayerDataScript.ToStringHelper.UnconditionalValueHolder valueHolder = this.addUnconditionalHolder();
|
||||
valueHolder.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
private PlayerDataScript.ToStringHelper addUnconditionalHolder(String name, Object value) {
|
||||
PlayerDataScript.ToStringHelper.UnconditionalValueHolder valueHolder = this.addUnconditionalHolder();
|
||||
valueHolder.value = value;
|
||||
valueHolder.name = (String)Preconditions.checkNotNull(name);
|
||||
return this;
|
||||
}
|
||||
|
||||
private static final class UnconditionalValueHolder extends PlayerDataScript.ToStringHelper.ValueHolder {
|
||||
private UnconditionalValueHolder() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
private static class ValueHolder {
|
||||
@CheckForNull
|
||||
String name;
|
||||
@CheckForNull
|
||||
Object value;
|
||||
@CheckForNull
|
||||
PlayerDataScript.ToStringHelper.ValueHolder next;
|
||||
|
||||
private ValueHolder() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static PlayerDataScript.ToStringHelper toStringHelper(Object self) {
|
||||
return new PlayerDataScript.ToStringHelper(self.getClass().getSimpleName());
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,7 @@ package noppes.npcs.entity;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
@@ -28,7 +24,6 @@ import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.pathfinding.PathNavigate;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
@@ -63,9 +58,6 @@ import noppes.npcs.ai.EntityAIMoveIndoors;
|
||||
import noppes.npcs.ai.EntityAIPanic;
|
||||
import noppes.npcs.ai.EntityAIWander;
|
||||
import noppes.npcs.ai.EntityAIWatchClosest;
|
||||
import noppes.npcs.ai.pathfinder.FlyingMoveHelper;
|
||||
import noppes.npcs.ai.pathfinder.PathNavigateFlying;
|
||||
import noppes.npcs.ai.pathfinder.PathNavigateGround;
|
||||
import noppes.npcs.ai.selector.NPCAttackSelector;
|
||||
import noppes.npcs.ai.target.EntityAIClearTarget;
|
||||
import noppes.npcs.ai.target.EntityAIClosestTarget;
|
||||
@@ -92,23 +84,29 @@ import noppes.npcs.controllers.PlayerDataController;
|
||||
import noppes.npcs.controllers.PlayerQuestData;
|
||||
import noppes.npcs.controllers.QuestData;
|
||||
import noppes.npcs.controllers.TransformData;
|
||||
import noppes.npcs.entity.data.DataTimers;
|
||||
import noppes.npcs.roles.JobBard;
|
||||
import noppes.npcs.roles.JobFollower;
|
||||
import noppes.npcs.roles.JobInterface;
|
||||
import noppes.npcs.roles.RoleCompanion;
|
||||
import noppes.npcs.roles.RoleFollower;
|
||||
import noppes.npcs.roles.RoleInterface;
|
||||
import noppes.npcs.scripted.ScriptEventAttack;
|
||||
import noppes.npcs.scripted.ScriptEventDamaged;
|
||||
import noppes.npcs.scripted.ScriptEventKilled;
|
||||
import noppes.npcs.scripted.ScriptEventTarget;
|
||||
import noppes.npcs.scripted.entity.ScriptNpc;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.scripted.event.ScriptEventAttack;
|
||||
import noppes.npcs.scripted.event.ScriptEventDamaged;
|
||||
import noppes.npcs.scripted.event.ScriptEventKilled;
|
||||
import noppes.npcs.scripted.event.ScriptEventTarget;
|
||||
import noppes.npcs.scripted.interfaces.ICustomNpc;
|
||||
import noppes.npcs.util.GameProfileAlt;
|
||||
import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
|
||||
|
||||
public abstract class EntityNPCInterface extends EntityCreature implements IEntityAdditionalSpawnData, ICommandSender, IRangedAttackMob, IBossDisplayData{
|
||||
public ICustomNpc wrappedNPC;
|
||||
|
||||
private static final GameProfileAlt chateventProfile = new GameProfileAlt();
|
||||
private static FakePlayer chateventPlayer;
|
||||
public static final GameProfileAlt chateventProfile = new GameProfileAlt();
|
||||
public static FakePlayer chateventPlayer;
|
||||
public static FakePlayer CommandPlayer;
|
||||
public DataDisplay display;
|
||||
public DataStats stats;
|
||||
public DataAI ai;
|
||||
@@ -116,6 +114,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
public DataInventory inventory;
|
||||
public DataScript script;
|
||||
public TransformData transform;
|
||||
public DataTimers timers;
|
||||
|
||||
public String linkedName = "";
|
||||
public long linkedLast = 0;
|
||||
@@ -170,6 +169,10 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
setFaction(faction.id);
|
||||
setSize(1, 1);
|
||||
this.updateTasks();
|
||||
|
||||
if (!this.isRemote()) {
|
||||
this.wrappedNPC = new ScriptNpc(this);
|
||||
}
|
||||
}
|
||||
catch(Exception e){
|
||||
e.printStackTrace();
|
||||
@@ -187,7 +190,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
inventory = new DataInventory(this);
|
||||
transform = new TransformData(this);
|
||||
script = new DataScript(this);
|
||||
|
||||
timers = new DataTimers(this);
|
||||
this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage);
|
||||
|
||||
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(stats.maxHealth);
|
||||
@@ -223,6 +226,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
super.onUpdate();
|
||||
if(this.ticksExisted % 10 == 0)
|
||||
script.callScript(EnumScriptType.TICK);
|
||||
this.timers.update();
|
||||
}
|
||||
|
||||
public void setWorld(World world){
|
||||
@@ -521,7 +525,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
if(event.getTarget() == null)
|
||||
entity = null;
|
||||
else
|
||||
entity = event.getTarget().getMinecraftEntity();
|
||||
entity = event.getTarget().getMCEntity();
|
||||
}
|
||||
if (entity != null && entity != this && ai.onAttack != 3 && !isAttacking() && !isRemote()){
|
||||
Line line = advanced.getAttackLine();
|
||||
@@ -917,7 +921,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
stats.readToNBT(compound);
|
||||
ai.readToNBT(compound);
|
||||
script.readFromNBT(compound);
|
||||
|
||||
timers.readFromNBT(compound);
|
||||
advanced.readToNBT(compound);
|
||||
if (advanced.role != EnumRoleType.None && roleInterface != null)
|
||||
roleInterface.readFromNBT(compound);
|
||||
@@ -948,7 +952,7 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
stats.writeToNBT(compound);
|
||||
ai.writeToNBT(compound);
|
||||
script.writeToNBT(compound);
|
||||
|
||||
timers.writeToNBT(compound);
|
||||
advanced.writeToNBT(compound);
|
||||
if (advanced.role != EnumRoleType.None && roleInterface != null)
|
||||
roleInterface.writeToNBT(compound);
|
||||
@@ -1512,7 +1516,18 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
}
|
||||
display.readToNBT(compound);
|
||||
}
|
||||
|
||||
|
||||
public Entity func_174793_f() {
|
||||
if (this.worldObj.isRemote) {
|
||||
return this;
|
||||
} else {
|
||||
EntityUtil.Copy(this, CommandPlayer);
|
||||
CommandPlayer.setWorld(this.worldObj);
|
||||
CommandPlayer.setPosition(this.posX, this.posY, this.posZ);
|
||||
return CommandPlayer;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommandSenderName() {
|
||||
return display.name;
|
||||
@@ -1582,9 +1597,13 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti
|
||||
|
||||
@Override
|
||||
public boolean isInvisibleToPlayer(EntityPlayer player){
|
||||
return display.visible == 1 && (player.getHeldItem() == null || player.getHeldItem().getItem() != CustomItems.wand);
|
||||
return (scriptInvisibleToPlayer(player) || display.visible == 1) && (player.getHeldItem() == null || player.getHeldItem().getItem() != CustomItems.wand);
|
||||
}
|
||||
|
||||
public boolean scriptInvisibleToPlayer(EntityPlayer player){
|
||||
return display.invisibleToList != null && display.invisibleToList.contains(player.getPersistentID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInvisible(){
|
||||
return display.visible != 0;
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.entity.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import noppes.npcs.EventHooks;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.scripted.CustomNPCsException;
|
||||
|
||||
public class DataTimers implements ITimers {
|
||||
private Object parent;
|
||||
private Map<Integer, DataTimers.Timer> timers = new HashMap();
|
||||
|
||||
public DataTimers(Object parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public void start(int id, int ticks, boolean repeat) {
|
||||
if(this.timers.containsKey(Integer.valueOf(id))) {
|
||||
throw new CustomNPCsException("There is already a timer with id: " + id, new Object[0]);
|
||||
} else {
|
||||
this.timers.put(Integer.valueOf(id), new DataTimers.Timer(id, ticks, repeat));
|
||||
}
|
||||
}
|
||||
|
||||
public void forceStart(int id, int ticks, boolean repeat) {
|
||||
this.timers.put(Integer.valueOf(id), new DataTimers.Timer(id, ticks, repeat));
|
||||
}
|
||||
|
||||
public boolean has(int id) {
|
||||
return this.timers.containsKey(Integer.valueOf(id));
|
||||
}
|
||||
|
||||
public boolean stop(int id) {
|
||||
boolean remove = this.timers.remove(Integer.valueOf(id)) != null;
|
||||
return remove;
|
||||
}
|
||||
|
||||
public void reset(int id) {
|
||||
DataTimers.Timer timer = (DataTimers.Timer)this.timers.get(Integer.valueOf(id));
|
||||
if(timer == null) {
|
||||
throw new CustomNPCsException("There is no timer with id: " + id, new Object[0]);
|
||||
} else {
|
||||
timer.ticks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound compound) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
Iterator var3 = this.timers.values().iterator();
|
||||
|
||||
while(var3.hasNext()) {
|
||||
DataTimers.Timer timer = (DataTimers.Timer)var3.next();
|
||||
NBTTagCompound c = new NBTTagCompound();
|
||||
c.setInteger("ID", timer.id);
|
||||
c.setInteger("TimerTicks", timer.id);
|
||||
c.setBoolean("Repeat", timer.repeat);
|
||||
c.setInteger("Ticks", timer.ticks);
|
||||
list.appendTag(c);
|
||||
}
|
||||
|
||||
compound.setTag("NpcsTimers", list);
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
Map<Integer, DataTimers.Timer> timers = new HashMap();
|
||||
NBTTagList list = compound.getTagList("NpcsTimers", 10);
|
||||
|
||||
for(int i = 0; i < list.tagCount(); ++i) {
|
||||
NBTTagCompound c = list.getCompoundTagAt(i);
|
||||
DataTimers.Timer t = new DataTimers.Timer(c.getInteger("ID"), c.getInteger("TimerTicks"), c.getBoolean("Repeat"));
|
||||
t.ticks = c.getInteger("Ticks");
|
||||
timers.put(t.id, t);
|
||||
}
|
||||
|
||||
this.timers = timers;
|
||||
}
|
||||
|
||||
public void update() {
|
||||
Iterator var1 = (new ArrayList(this.timers.values())).iterator();
|
||||
|
||||
while(var1.hasNext()) {
|
||||
DataTimers.Timer timer = (DataTimers.Timer)var1.next();
|
||||
timer.update();
|
||||
}
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.timers = new HashMap();
|
||||
}
|
||||
|
||||
class Timer {
|
||||
public int id;
|
||||
private boolean repeat;
|
||||
private int timerTicks;
|
||||
private int ticks = 0;
|
||||
|
||||
public Timer(int id, int ticks, boolean repeat) {
|
||||
this.id = id;
|
||||
this.repeat = repeat;
|
||||
this.timerTicks = ticks;
|
||||
this.ticks = ticks;
|
||||
}
|
||||
|
||||
public void update() {
|
||||
if(this.ticks-- <= 0) {
|
||||
if(this.repeat) {
|
||||
this.ticks = this.timerTicks;
|
||||
} else {
|
||||
DataTimers.this.stop(this.id);
|
||||
}
|
||||
|
||||
Object ob = DataTimers.this.parent;
|
||||
if (ob instanceof EntityNPCInterface) {
|
||||
EventHooks.onNPCTimer((EntityNPCInterface)ob, this.id);
|
||||
}
|
||||
else if(ob instanceof PlayerData) {
|
||||
EventHooks.onPlayerTimer((PlayerData)ob, this.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,20 @@
|
||||
package noppes.npcs.items;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import noppes.npcs.CustomItems;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.constants.EnumGuiType;
|
||||
|
||||
public class ItemNpcScripter extends Item{
|
||||
|
||||
|
||||
public ItemNpcScripter(){
|
||||
maxStackSize = 1;
|
||||
setCreativeTab(CustomItems.tab);
|
||||
@@ -25,7 +29,15 @@ public class ItemNpcScripter extends Item{
|
||||
public boolean requiresMultipleRenderPasses(){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){
|
||||
if(!par2World.isRemote)
|
||||
return par1ItemStack;
|
||||
CustomNpcs.proxy.openGui(0, 0, 0, EnumGuiType.ScriptEvent, par3EntityPlayer);
|
||||
return par1ItemStack;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void registerIcons(IIconRegister par1IconRegister){
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
public class CustomNPCsException extends RuntimeException {
|
||||
public CustomNPCsException(String message, Object... obs) {
|
||||
super(String.format(message, obs));
|
||||
}
|
||||
|
||||
public CustomNPCsException(Exception ex, String message, Object... obs) {
|
||||
super(String.format(message, obs), ex);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
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 noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.scripted.interfaces.*;
|
||||
|
||||
public abstract class NpcAPI {
|
||||
private static NpcAPI instance = null;
|
||||
|
||||
public NpcAPI() {
|
||||
}
|
||||
|
||||
public abstract ICustomNpc createNPC(World var1);
|
||||
|
||||
public abstract ICustomNpc spawnNPC(World var1, int var2, int var3, int var4);
|
||||
|
||||
public abstract IEntity getIEntity(Entity var1);
|
||||
|
||||
public abstract IBlock getIBlock(World var1, BlockPos var2);
|
||||
|
||||
public abstract IBlock getIBlock(World world, int x, int y, int z);
|
||||
|
||||
public abstract IContainer getIContainer(IInventory var1);
|
||||
|
||||
public abstract IContainer getIContainer(Container var1);
|
||||
|
||||
public abstract IItemStack getIItemStack(ItemStack var1);
|
||||
|
||||
public abstract IWorld getIWorld(WorldServer var1);
|
||||
|
||||
public abstract IWorld getIWorld(int var1);
|
||||
|
||||
public abstract IWorld[] getIWorlds();
|
||||
|
||||
public abstract IDamageSource getIDamageSource(DamageSource var1);
|
||||
|
||||
public abstract EventBus events();
|
||||
|
||||
public abstract File getGlobalDir();
|
||||
|
||||
public abstract File getWorldDir();
|
||||
|
||||
public static boolean IsAvailable() {
|
||||
return Loader.isModLoaded("customnpcs");
|
||||
}
|
||||
|
||||
public static NpcAPI Instance() {
|
||||
if (instance != null) {
|
||||
return instance;
|
||||
} else if (!IsAvailable()) {
|
||||
return null;
|
||||
} else {
|
||||
try {
|
||||
Class c = Class.forName("noppes.npcs.scripted.wrapper.WrapperNpcAPI");
|
||||
instance = (NpcAPI) c.getMethod("Instance").invoke((Object) null);
|
||||
} catch (Exception var1) {
|
||||
var1.printStackTrace();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void executeCommand(IWorld var1, String var2);
|
||||
|
||||
public abstract String getRandomName(int var1, int var2);
|
||||
|
||||
public abstract INbt getINbt(NBTTagCompound entityData);
|
||||
|
||||
public abstract ScriptPlayer[] getAllServerPlayers();
|
||||
|
||||
public abstract ScriptItemStack createItem(String id, int damage, int size);
|
||||
|
||||
public abstract ScriptEntityParticle createEntityParticle(String directory);
|
||||
|
||||
public abstract int getServerTime();
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import java.util.Map;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import noppes.npcs.scripted.interfaces.*;
|
||||
import noppes.npcs.util.LRUHashMap;
|
||||
|
||||
public class ScriptBlock implements IBlock {
|
||||
private static final Map<String, ScriptBlock> blockCache = new LRUHashMap(400);
|
||||
protected final IWorld world;
|
||||
protected final Block block;
|
||||
protected final BlockPos pos;
|
||||
protected final ScriptBlockPos bPos;
|
||||
protected TileEntity tile;
|
||||
|
||||
public ScriptBlock(World world, Block block, BlockPos pos) {
|
||||
this.world = NpcAPI.Instance().getIWorld((WorldServer)world);
|
||||
this.block = block;
|
||||
this.pos = pos;
|
||||
this.bPos = new ScriptBlockPos(pos);
|
||||
}
|
||||
|
||||
public IPos getPos() {
|
||||
return this.bPos;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return this.pos.getX();
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return this.pos.getY();
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return this.pos.getZ();
|
||||
}
|
||||
|
||||
public void remove() {
|
||||
this.world.getMCWorld().setBlockToAir(getX(), getY(), getZ());
|
||||
}
|
||||
|
||||
public boolean isAir() {
|
||||
return this.block.isAir(this.world.getMCWorld(), getX(), getY(), getZ());
|
||||
}
|
||||
|
||||
public ScriptBlock setBlock(String name) {
|
||||
Block block = (Block)Block.blockRegistry.getObject(new ResourceLocation(name));
|
||||
if(block == null) {
|
||||
return this;
|
||||
} else {
|
||||
this.world.getMCWorld().setBlock(getX(),getY(),getZ(),block);
|
||||
return new ScriptBlock(this.world.getMCWorld(), block, this.pos);
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptBlock setBlock(IBlock block) {
|
||||
this.world.getMCWorld().setBlock(getX(),getY(),getZ(),block.getMCBlock());
|
||||
return new ScriptBlock(this.world.getMCWorld(), block.getMCBlock(), this.pos);
|
||||
}
|
||||
|
||||
public boolean isContainer() {
|
||||
return this.tile != null && this.tile instanceof IInventory?((IInventory)this.tile).getSizeInventory() > 0:false;
|
||||
}
|
||||
|
||||
public IContainer getContainer() {
|
||||
if(!this.isContainer()) {
|
||||
throw new CustomNPCsException("This block is not a container", new Object[0]);
|
||||
} else {
|
||||
return NpcAPI.Instance().getIContainer((IInventory)this.tile);
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return Block.blockRegistry.getNameForObject(this.block) + "";
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
return this.tile == null?this.getName():this.tile.blockType.getItemIconName();
|
||||
}
|
||||
|
||||
public IWorld getWorld() {
|
||||
return this.world;
|
||||
}
|
||||
|
||||
public Block getMCBlock() {
|
||||
return this.block;
|
||||
}
|
||||
|
||||
public static void clearCache() {
|
||||
blockCache.clear();
|
||||
}
|
||||
|
||||
public boolean hasTileEntity() {
|
||||
return this.tile != null;
|
||||
}
|
||||
|
||||
public TileEntity getMCTileEntity() {
|
||||
return this.tile;
|
||||
}
|
||||
|
||||
public INbt getTileEntityNBT() {
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
this.tile.writeToNBT(compound);
|
||||
return NpcAPI.Instance().getINbt(compound);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import noppes.npcs.scripted.interfaces.IPos;
|
||||
|
||||
public class ScriptBlockPos implements IPos {
|
||||
private BlockPos blockPos;
|
||||
|
||||
public ScriptBlockPos(BlockPos pos) {
|
||||
this.blockPos = pos;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return this.blockPos.getX();
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return this.blockPos.getY();
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return this.blockPos.getZ();
|
||||
}
|
||||
|
||||
public IPos up() {
|
||||
return new ScriptBlockPos(this.blockPos.up());
|
||||
}
|
||||
|
||||
public IPos up(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.up(n));
|
||||
}
|
||||
|
||||
public IPos down() {
|
||||
return new ScriptBlockPos(this.blockPos.down());
|
||||
}
|
||||
|
||||
public IPos down(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.down(n));
|
||||
}
|
||||
|
||||
public IPos north() {
|
||||
return new ScriptBlockPos(this.blockPos.north());
|
||||
}
|
||||
|
||||
public IPos north(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.north(n));
|
||||
}
|
||||
|
||||
public IPos east() {
|
||||
return new ScriptBlockPos(this.blockPos.east());
|
||||
}
|
||||
|
||||
public IPos east(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.east(n));
|
||||
}
|
||||
|
||||
public IPos south() {
|
||||
return new ScriptBlockPos(this.blockPos.south());
|
||||
}
|
||||
|
||||
public IPos south(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.south(n));
|
||||
}
|
||||
|
||||
public IPos west() {
|
||||
return new ScriptBlockPos(this.blockPos.west());
|
||||
}
|
||||
|
||||
public IPos west(int n) {
|
||||
return new ScriptBlockPos(this.blockPos.west(n));
|
||||
}
|
||||
|
||||
public IPos add(int x, int y, int z) {
|
||||
return new ScriptBlockPos(this.blockPos.add(x, y, z));
|
||||
}
|
||||
|
||||
public IPos add(IPos pos) {
|
||||
return new ScriptBlockPos(this.blockPos.add(pos.getMCBlockPos()));
|
||||
}
|
||||
|
||||
public IPos subtract(int x, int y, int z) {
|
||||
return new ScriptBlockPos(this.blockPos.add(-x, -y, -z));
|
||||
}
|
||||
|
||||
public IPos subtract(IPos pos) {
|
||||
return new ScriptBlockPos(this.blockPos.add(-pos.getX(), -pos.getY(), -pos.getZ()));
|
||||
}
|
||||
|
||||
public IPos offset(int direction) {
|
||||
return new ScriptBlockPos(this.blockPos.offset(EnumFacing.values()[direction]));
|
||||
}
|
||||
|
||||
public IPos offset(int direction, int n) {
|
||||
return new ScriptBlockPos(this.blockPos.offset(EnumFacing.values()[direction], n));
|
||||
}
|
||||
|
||||
public BlockPos getMCBlockPos() {
|
||||
return this.blockPos;
|
||||
}
|
||||
|
||||
public double[] normalize() {
|
||||
double d = Math.sqrt((double)(this.blockPos.getX() * this.blockPos.getX() + this.blockPos.getY() * this.blockPos.getY() + this.blockPos.getZ() * this.blockPos.getZ()));
|
||||
return new double[]{(double)this.getX() / d, (double)this.getY() / d, (double)this.getZ() / d};
|
||||
}
|
||||
|
||||
public double distanceTo(IPos pos) {
|
||||
double d0 = (double)(this.getX() - pos.getX());
|
||||
double d1 = (double)(this.getY() - pos.getY());
|
||||
double d2 = (double)(this.getZ() - pos.getZ());
|
||||
return Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import noppes.npcs.NoppesUtilPlayer;
|
||||
import noppes.npcs.scripted.interfaces.IContainer;
|
||||
import noppes.npcs.scripted.interfaces.IItemStack;
|
||||
|
||||
public class ScriptContainer implements IContainer {
|
||||
private IInventory inventory;
|
||||
private Container container;
|
||||
|
||||
public ScriptContainer(IInventory inventory) {
|
||||
this.inventory = inventory;
|
||||
}
|
||||
|
||||
public ScriptContainer(Container container) {
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
return this.inventory != null ? this.inventory.getSizeInventory() : this.container.inventorySlots.size();
|
||||
}
|
||||
|
||||
public IItemStack getSlot(int slot) {
|
||||
if (slot >= 0 && slot < this.getSize()) {
|
||||
return this.inventory != null ? NpcAPI.Instance().getIItemStack(this.inventory.getStackInSlot(slot)) : NpcAPI.Instance().getIItemStack(this.container.getSlot(slot).getStack());
|
||||
} else {
|
||||
throw new CustomNPCsException("Slot is out of range " + slot, new Object[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSlot(int slot, IItemStack item) {
|
||||
if (slot >= 0 && slot < this.getSize()) {
|
||||
ItemStack itemstack = item == null ? new ItemStack(Block.getBlockById(0)) : item.getMCItemStack();
|
||||
if (this.inventory != null) {
|
||||
this.inventory.setInventorySlotContents(slot, itemstack);
|
||||
} else {
|
||||
this.container.putStackInSlot(slot, itemstack);
|
||||
this.container.detectAndSendChanges();
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new CustomNPCsException("Slot is out of range " + slot, new Object[0]);
|
||||
}
|
||||
}
|
||||
|
||||
public int count(IItemStack item, boolean ignoreDamage, boolean ignoreNBT) {
|
||||
int count = 0;
|
||||
|
||||
for(int i = 0; i < this.getSize(); ++i) {
|
||||
IItemStack toCompare = this.getSlot(i);
|
||||
if (NoppesUtilPlayer.compareItems(item.getMCItemStack(), toCompare.getMCItemStack(), ignoreDamage, ignoreNBT)) {
|
||||
count += toCompare.getStackSize();
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public IInventory getMCInventory() {
|
||||
return this.inventory;
|
||||
}
|
||||
|
||||
public Container getMCContainer() {
|
||||
return this.container;
|
||||
}
|
||||
|
||||
public IItemStack[] getItems() {
|
||||
IItemStack[] items = new IItemStack[this.getSize()];
|
||||
|
||||
for(int i = 0; i < this.getSize(); ++i) {
|
||||
items[i] = this.getSlot(i);
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
|
||||
/**
|
||||
* Created by luisc on 9/8/2021.
|
||||
*/
|
||||
public class ScriptEntityParticle {
|
||||
private String directory;
|
||||
private int HEXcolor = 0xFFFFFF;
|
||||
private int amount = 1;
|
||||
private int maxAge = 20;
|
||||
private double x = 0,y = 0,z = 0;
|
||||
private double motionX = 0,motionY = 0,motionZ = 0;
|
||||
private float gravity = 0;
|
||||
private float scale1 = 1.0f,scale2 = 1.0f,scaleRate = 0.0f;
|
||||
private float alpha1 = 1.0f,alpha2 = 1.0f,alphaRate = 0.0f;
|
||||
private int scaleRateStart = 0, alphaRateStart = 0;
|
||||
|
||||
public ScriptEntityParticle(String directory){
|
||||
this.directory = directory;
|
||||
}
|
||||
|
||||
public void spawnOnEntity(ScriptEntity entity){
|
||||
int entityID = entity.getMCEntity().getEntityId();
|
||||
NoppesUtilServer.spawnScriptedParticle(entity.getMCEntity(), directory, HEXcolor, amount, maxAge,
|
||||
x, y, z,
|
||||
motionX, motionY, motionZ, gravity,
|
||||
scale1, scale2, scaleRate, scaleRateStart,
|
||||
alpha1, alpha2, alphaRate, alphaRateStart,
|
||||
entityID
|
||||
);
|
||||
}
|
||||
|
||||
public String getDirectory() {
|
||||
return directory;
|
||||
}
|
||||
|
||||
public int getHEXcolor() {
|
||||
return HEXcolor;
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public int getMaxAge() {
|
||||
return maxAge;
|
||||
}
|
||||
|
||||
public double getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public double getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public double getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public double getMotionX() {
|
||||
return motionX;
|
||||
}
|
||||
|
||||
public double getMotionY() {
|
||||
return motionY;
|
||||
}
|
||||
|
||||
public double getMotionZ() {
|
||||
return motionZ;
|
||||
}
|
||||
|
||||
public float getGravity() {
|
||||
return gravity;
|
||||
}
|
||||
|
||||
public float getScale1() {
|
||||
return scale1;
|
||||
}
|
||||
|
||||
public float getScale2() {
|
||||
return scale2;
|
||||
}
|
||||
|
||||
public float getScaleRate() {
|
||||
return scaleRate;
|
||||
}
|
||||
|
||||
public float getAlpha1() {
|
||||
return alpha1;
|
||||
}
|
||||
|
||||
public float getAlpha2() {
|
||||
return alpha2;
|
||||
}
|
||||
|
||||
public float getAlphaRate() {
|
||||
return alphaRate;
|
||||
}
|
||||
|
||||
public int getScaleRateStart() {
|
||||
return scaleRateStart;
|
||||
}
|
||||
|
||||
public int getAlphaRateStart() {
|
||||
return alphaRateStart;
|
||||
}
|
||||
|
||||
public void setDirectory(String directory) {
|
||||
this.directory = directory;
|
||||
}
|
||||
|
||||
public void setHEXcolor(int HEXcolor) {
|
||||
this.HEXcolor = HEXcolor;
|
||||
}
|
||||
|
||||
public void setAmount(int amount) {
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
public void setMaxAge(int maxAge) {
|
||||
this.maxAge = maxAge;
|
||||
}
|
||||
|
||||
public void setPosition(double x, double y, double z){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public void setX(double x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public void setY(double y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public void setZ(double z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public void setMotion(double motionX, double motionY, double motionZ, float gravity){
|
||||
this.motionX = motionX;
|
||||
this.motionY = motionY;
|
||||
this.motionZ = motionZ;
|
||||
this.gravity = gravity;
|
||||
}
|
||||
|
||||
public void setMotionX(double motionX) {
|
||||
this.motionX = motionX;
|
||||
}
|
||||
|
||||
public void setMotionY(double motionY) {
|
||||
this.motionY = motionY;
|
||||
}
|
||||
|
||||
public void setMotionZ(double motionZ) {
|
||||
this.motionZ = motionZ;
|
||||
}
|
||||
|
||||
public void setGravity(float gravity) {
|
||||
this.gravity = gravity;
|
||||
}
|
||||
|
||||
public void setScale(float scale1, float scale2, float scaleRate, int scaleRateStart){
|
||||
this.scale1 = scale1;
|
||||
this.scale2 = scale2;
|
||||
this.scaleRate = scaleRate;
|
||||
this.scaleRateStart = scaleRateStart;
|
||||
}
|
||||
|
||||
public void setScale1(float scale1) {
|
||||
this.scale1 = scale1;
|
||||
}
|
||||
|
||||
public void setScale2(float scale2) {
|
||||
this.scale2 = scale2;
|
||||
}
|
||||
|
||||
public void setScaleRate(float scaleRate) {
|
||||
this.scaleRate = scaleRate;
|
||||
}
|
||||
|
||||
public void setScaleRateStart(int scaleRateStart) {
|
||||
this.scaleRateStart = scaleRateStart;
|
||||
}
|
||||
|
||||
public void setAlpha(float alpha1, float alpha2, float alphaRate, int alphaRateStart){
|
||||
this.alpha1 = alpha1;
|
||||
this.alpha2 = alpha2;
|
||||
this.alphaRate = alphaRate;
|
||||
this.alphaRateStart = alphaRateStart;
|
||||
}
|
||||
|
||||
public void setAlpha1(float alpha1) {
|
||||
this.alpha1 = alpha1;
|
||||
}
|
||||
|
||||
public void setAlpha2(float alpha2) {
|
||||
this.alpha2 = alpha2;
|
||||
}
|
||||
|
||||
public void setAlphaRate(float alphaRate) {
|
||||
this.alphaRate = alphaRate;
|
||||
}
|
||||
|
||||
public void setAlphaRateStart(int alphaRateStart) {
|
||||
this.alphaRateStart = alphaRateStart;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
|
||||
public class ScriptEventDialog extends ScriptEvent{
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public boolean isClosing(){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import noppes.npcs.controllers.Faction;
|
||||
import noppes.npcs.scripted.entity.ScriptNpc;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
|
||||
public class ScriptFaction {
|
||||
private Faction faction;
|
||||
|
||||
@@ -13,9 +13,11 @@ import net.minecraft.nbt.NBTBase.NBTPrimitive;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import noppes.npcs.scripted.interfaces.IItemStack;
|
||||
import noppes.npcs.scripted.interfaces.INbt;
|
||||
|
||||
public class ScriptItemStack {
|
||||
protected ItemStack item;
|
||||
public class ScriptItemStack implements IItemStack {
|
||||
public ItemStack item;
|
||||
|
||||
public ScriptItemStack(ItemStack item){
|
||||
this.item = item;
|
||||
@@ -199,6 +201,21 @@ public class ScriptItemStack {
|
||||
return true;
|
||||
}
|
||||
|
||||
public INbt getNbt() {
|
||||
NBTTagCompound compound = this.item.getTagCompound();
|
||||
if(compound == null) {
|
||||
this.item.setTagCompound(compound = new NBTTagCompound());
|
||||
}
|
||||
|
||||
return NpcAPI.Instance().getINbt(compound);
|
||||
}
|
||||
|
||||
public INbt getItemNbt() {
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
this.item.writeToNBT(compound);
|
||||
return NpcAPI.Instance().getINbt(compound);
|
||||
}
|
||||
|
||||
/**
|
||||
* No support is given for this method. Dont use if you dont know what you are doing.
|
||||
* @return Minecraft ItemStack
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted;
|
||||
|
||||
import java.util.Iterator;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagDouble;
|
||||
import net.minecraft.nbt.NBTTagFloat;
|
||||
import net.minecraft.nbt.NBTTagInt;
|
||||
import net.minecraft.nbt.NBTTagIntArray;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import noppes.npcs.scripted.interfaces.INbt;
|
||||
import noppes.npcs.util.NBTJsonUtil;
|
||||
|
||||
public class ScriptNbt implements INbt {
|
||||
private NBTTagCompound compound;
|
||||
|
||||
public ScriptNbt(NBTTagCompound compound) {
|
||||
this.compound = compound;
|
||||
}
|
||||
|
||||
public void remove(String key) {
|
||||
this.compound.removeTag(key);
|
||||
}
|
||||
|
||||
public boolean has(String key) {
|
||||
return this.compound.hasKey(key);
|
||||
}
|
||||
|
||||
public boolean getBoolean(String key) {
|
||||
return this.compound.getBoolean(key);
|
||||
}
|
||||
|
||||
public void setBoolean(String key, boolean value) {
|
||||
this.compound.setBoolean(key, value);
|
||||
}
|
||||
|
||||
public short getShort(String key) {
|
||||
return this.compound.getShort(key);
|
||||
}
|
||||
|
||||
public void setShort(String key, short value) {
|
||||
this.compound.setShort(key, value);
|
||||
}
|
||||
|
||||
public int getInteger(String key) {
|
||||
return this.compound.getInteger(key);
|
||||
}
|
||||
|
||||
public void setInteger(String key, int value) {
|
||||
this.compound.setInteger(key, value);
|
||||
}
|
||||
|
||||
public byte getByte(String key) {
|
||||
return this.compound.getByte(key);
|
||||
}
|
||||
|
||||
public void setByte(String key, byte value) {
|
||||
this.compound.setByte(key, value);
|
||||
}
|
||||
|
||||
public long getLong(String key) {
|
||||
return this.compound.getLong(key);
|
||||
}
|
||||
|
||||
public void setLong(String key, long value) {
|
||||
this.compound.setLong(key, value);
|
||||
}
|
||||
|
||||
public double getDouble(String key) {
|
||||
return this.compound.getDouble(key);
|
||||
}
|
||||
|
||||
public void setDouble(String key, double value) {
|
||||
this.compound.setDouble(key, value);
|
||||
}
|
||||
|
||||
public float getFloat(String key) {
|
||||
return this.compound.getFloat(key);
|
||||
}
|
||||
|
||||
public void setFloat(String key, float value) {
|
||||
this.compound.setFloat(key, value);
|
||||
}
|
||||
|
||||
public String getString(String key) {
|
||||
return this.compound.getString(key);
|
||||
}
|
||||
|
||||
public void setString(String key, String value) {
|
||||
this.compound.setString(key, value);
|
||||
}
|
||||
|
||||
public byte[] getByteArray(String key) {
|
||||
return this.compound.getByteArray(key);
|
||||
}
|
||||
|
||||
public void setByteArray(String key, byte[] value) {
|
||||
this.compound.setByteArray(key, value);
|
||||
}
|
||||
|
||||
public int[] getIntegerArray(String key) {
|
||||
return this.compound.getIntArray(key);
|
||||
}
|
||||
|
||||
public void setIntegerArray(String key, int[] value) {
|
||||
this.compound.setIntArray(key, value);
|
||||
}
|
||||
|
||||
public Object[] getList(String key, int type) {
|
||||
NBTTagList list = this.compound.getTagList(key, type);
|
||||
Object[] nbts = new Object[list.tagCount()];
|
||||
|
||||
for(int i = 0; i < list.tagCount(); ++i) {
|
||||
if(list.func_150303_d() == 10) {
|
||||
nbts[i] = new ScriptNbt(list.getCompoundTagAt(i));
|
||||
} else if(list.func_150303_d() == 8) {
|
||||
nbts[i] = list.getStringTagAt(i);
|
||||
} else if(list.func_150303_d() == 6) {
|
||||
nbts[i] = Double.valueOf(list.func_150309_d(i));
|
||||
} else if(list.func_150303_d() == 5) {
|
||||
nbts[i] = Float.valueOf(list.func_150308_e(i));
|
||||
} else if(list.func_150303_d() == 3) {
|
||||
nbts[i] = Integer.valueOf(list.getStringTagAt(i));
|
||||
} else if(list.func_150303_d() == 11) {
|
||||
nbts[i] = list.func_150306_c(i);
|
||||
}
|
||||
}
|
||||
|
||||
return nbts;
|
||||
}
|
||||
|
||||
public int getListType(String key) {
|
||||
NBTBase b = this.compound.getTag(key);
|
||||
if(b == null) {
|
||||
return 0;
|
||||
} else if(b.getId() != 9) {
|
||||
throw new CustomNPCsException("NBT tag " + key + " isn\'t a list", new Object[0]);
|
||||
} else {
|
||||
return ((NBTTagList)b).func_150303_d();
|
||||
}
|
||||
}
|
||||
|
||||
public void setList(String key, Object[] value) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
Object[] var4 = value;
|
||||
int var5 = value.length;
|
||||
|
||||
for(int var6 = 0; var6 < var5; ++var6) {
|
||||
Object nbt = var4[var6];
|
||||
if(nbt instanceof INbt) {
|
||||
list.appendTag(((INbt) nbt).getMCNBT());
|
||||
} else if(nbt instanceof String) {
|
||||
list.appendTag(new NBTTagString((String) nbt));
|
||||
} else if(nbt instanceof Double) {
|
||||
list.appendTag(new NBTTagDouble(((Double) nbt).doubleValue()));
|
||||
} else if(nbt instanceof Float) {
|
||||
list.appendTag(new NBTTagFloat(((Float) nbt).floatValue()));
|
||||
} else if(nbt instanceof Integer) {
|
||||
list.appendTag(new NBTTagInt(((Integer) nbt).intValue()));
|
||||
} else if(nbt instanceof int[]) {
|
||||
list.appendTag(new NBTTagIntArray((int[]) ((int[]) nbt)));
|
||||
}
|
||||
}
|
||||
|
||||
this.compound.setTag(key, list);
|
||||
}
|
||||
|
||||
public INbt getCompound(String key) {
|
||||
return new ScriptNbt(this.compound.getCompoundTag(key));
|
||||
}
|
||||
|
||||
public void setCompound(String key, INbt value) {
|
||||
if(value == null) {
|
||||
throw new CustomNPCsException("Value cant be null", new Object[0]);
|
||||
} else {
|
||||
this.compound.setTag(key, value.getMCNBT());
|
||||
}
|
||||
}
|
||||
|
||||
public String[] getKeys() {
|
||||
return (String[])this.compound.func_150296_c().toArray(new String[this.compound.func_150296_c().size()]);
|
||||
}
|
||||
|
||||
public int getType(String key) {
|
||||
return this.compound.func_150299_b(key);
|
||||
}
|
||||
|
||||
public NBTTagCompound getMCNBT() {
|
||||
return this.compound;
|
||||
}
|
||||
|
||||
public String toJsonString() {
|
||||
return NBTJsonUtil.Convert(this.compound);
|
||||
}
|
||||
|
||||
public boolean isEqual(INbt nbt) {
|
||||
return nbt == null?false:this.compound.equals(nbt.getMCNBT());
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
Iterator var1 = this.compound.func_150296_c().iterator();
|
||||
|
||||
while(var1.hasNext()) {
|
||||
String name = (String)var1.next();
|
||||
this.compound.removeTag(name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import net.minecraft.entity.passive.EntityTameable;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.controllers.PixelmonHelper;
|
||||
import noppes.npcs.scripted.entity.ScriptPixelmon;
|
||||
|
||||
public class ScriptPixelmonPlayerData {
|
||||
private EntityPlayerMP player;
|
||||
|
||||
@@ -18,21 +18,29 @@ import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntitySign;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.blocks.tiles.TileBigSign;
|
||||
import noppes.npcs.blocks.tiles.TileSign;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.controllers.ServerCloneController;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.scripted.interfaces.IBlock;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
|
||||
public class ScriptWorld{
|
||||
public class ScriptWorld implements IWorld {
|
||||
private static Map<String,Object> tempData = new HashMap<String,Object>();
|
||||
protected WorldServer world;
|
||||
public WorldServer world;
|
||||
public ScriptWorld(WorldServer world){
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
|
||||
public static ScriptWorld createNew(WorldServer world) {
|
||||
return new ScriptWorld(world);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The worlds time
|
||||
*/
|
||||
@@ -53,11 +61,11 @@ public class ScriptWorld{
|
||||
* @param z World position z
|
||||
* @return The block at the given position. Returns null if there isn't a block
|
||||
*/
|
||||
public ScriptItemStack getBlock(int x, int y, int z){
|
||||
public IBlock getBlock(int x, int y, int z){
|
||||
Block block = world.getBlock(x, y, z);
|
||||
if(block == null || block.isAir(world, x, y, z))
|
||||
return null;
|
||||
return new ScriptItemStack(new ItemStack(block, 1, world.getBlockMetadata(x, y, z)));
|
||||
return new ScriptBlock(world, block, new BlockPos(x,y,z));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,6 +195,14 @@ public class ScriptWorld{
|
||||
return null;
|
||||
return new ScriptItemStack(new ItemStack(item, size, damage));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directory The particle's texture directory. Use only forward slashes when writing a directory. Example: "customnpcs:textures/particle/tail.png"
|
||||
* @return Returns ScriptEntityParticle object
|
||||
*/
|
||||
public ScriptEntityParticle createEntityParticle(String directory){
|
||||
return new ScriptEntityParticle(directory);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key Get temp data for this key
|
||||
@@ -333,13 +349,21 @@ public class ScriptWorld{
|
||||
public ScriptScoreboard getScoreboard(){
|
||||
return new ScriptScoreboard();
|
||||
}
|
||||
|
||||
|
||||
public BlockPos getMCBlockPos(int x, int y, int z){
|
||||
return new BlockPos(x,y,z);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* Expert use only
|
||||
* @return Returns minecraft world object
|
||||
*/
|
||||
public World getMCWorld(){
|
||||
return world;
|
||||
public WorldServer getMCWorld(){
|
||||
return this.world;
|
||||
}
|
||||
|
||||
public int getDimensionID(){
|
||||
return world.provider.dimensionId;
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -1,11 +1,12 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IAnimal;
|
||||
|
||||
public class ScriptAnimal extends ScriptLiving{
|
||||
public class ScriptAnimal<T extends EntityAnimal> extends ScriptLiving<T> implements IAnimal {
|
||||
|
||||
public ScriptAnimal(EntityAnimal entity) {
|
||||
public ScriptAnimal(T entity) {
|
||||
super(entity);
|
||||
}
|
||||
|
||||
+152
-52
@@ -1,4 +1,4 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -18,18 +18,79 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.controllers.ServerCloneController;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.scripted.CustomNPCsException;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.ScriptEntityParticle;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IEntity;
|
||||
import noppes.npcs.scripted.interfaces.INbt;
|
||||
|
||||
public class ScriptEntity {
|
||||
protected Entity entity;
|
||||
public class ScriptEntity<T extends Entity> implements IEntity {
|
||||
protected T entity;
|
||||
private Map<String,Object> tempData = new HashMap<String,Object>();
|
||||
|
||||
public ScriptEntity(Entity entity){
|
||||
|
||||
public ScriptEntity(T entity){
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directory The particle's directory. Use only forward slashes when writing a directory. Example: "customnpcs:textures/particle/tail.png"
|
||||
* @param HEXcolor The particle's color as a HEX integer
|
||||
* @param amount The amount of particles to spawn
|
||||
* @param maxAge The particle's maximum age in MC ticks
|
||||
|
||||
* @param x The particle's x position
|
||||
* @param y The particle's y position
|
||||
* @param z The particle's z position
|
||||
|
||||
* @param motionX The particle's speed in the x axis
|
||||
* @param motionY The particle's speed in the y axis
|
||||
* @param motionZ The particle's speed in the z axis
|
||||
* @param gravity The particle's gravity
|
||||
|
||||
* @param scale1 The particle's starting scale
|
||||
* @param scale2 The particle's ending scale
|
||||
* @param scaleRate Multiplier for the particle's scale growth rate
|
||||
* @param scaleRateStart The time at which the particle begins growing/shrinking
|
||||
|
||||
* @param alpha1 The particle's starting transparency
|
||||
* @param alpha2 The particle's ending transparency
|
||||
* @param scaleRate Multiplier for the particle's transparency growth rate
|
||||
* @param alphaRateStart The time at which the particle begins appearing/fading
|
||||
*/
|
||||
public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge,
|
||||
double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float gravity,
|
||||
float scale1, float scale2, float scaleRate, int scaleRateStart,
|
||||
float alpha1, float alpha2, float alphaRate, int alphaRateStart
|
||||
) {
|
||||
int entityID = entity.getEntityId();
|
||||
NoppesUtilServer.spawnScriptedParticle(entity, directory, HEXcolor, amount, maxAge,
|
||||
x, y, z,
|
||||
motionX, motionY, motionZ, gravity,
|
||||
scale1, scale2, scaleRate, scaleRateStart,
|
||||
alpha1, alpha2, alphaRate, alphaRateStart,
|
||||
entityID
|
||||
);
|
||||
}
|
||||
public void spawnParticle(ScriptEntityParticle entityParticle) { entityParticle.spawnOnEntity(this); }
|
||||
|
||||
public double getYOffset() { return entity.getYOffset(); }
|
||||
|
||||
/**
|
||||
* @return The entities width
|
||||
*/
|
||||
public double getWidth(){ return entity.width; }
|
||||
|
||||
/**
|
||||
* @return The entities height
|
||||
*/
|
||||
public double getHeight(){ return entity.height; }
|
||||
|
||||
/**
|
||||
* @return The entities x position
|
||||
@@ -37,35 +98,35 @@ public class ScriptEntity {
|
||||
public double getX(){
|
||||
return entity.posX;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param x The entities x position
|
||||
*/
|
||||
public void setX(double x){
|
||||
entity.posX = x;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return The entities y position
|
||||
*/
|
||||
public double getY(){
|
||||
return entity.posY;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param y The entities y position
|
||||
*/
|
||||
public void setY(double y){
|
||||
entity.posY = y;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return The entities x position
|
||||
*/
|
||||
public double getZ(){
|
||||
return entity.posZ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param z The entities x position
|
||||
*/
|
||||
@@ -93,7 +154,7 @@ public class ScriptEntity {
|
||||
public int getBlockZ(){
|
||||
return MathHelper.floor_double(entity.posZ);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param x The x position
|
||||
* @param y The y position
|
||||
@@ -103,7 +164,7 @@ public class ScriptEntity {
|
||||
entity.setPosition(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param range The search range for entities around this entity
|
||||
* @return Array of entities within range
|
||||
@@ -117,7 +178,7 @@ public class ScriptEntity {
|
||||
}
|
||||
return list.toArray(new ScriptEntity[list.size()]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param range The search range for entities around this entity
|
||||
* @param type The EntityType you want to find
|
||||
@@ -135,7 +196,7 @@ public class ScriptEntity {
|
||||
cls = EntityMob.class;
|
||||
else if(type == EntityType.NPC)
|
||||
cls = EntityNPCInterface.class;
|
||||
|
||||
|
||||
List<Entity> entities = entity.worldObj.getEntitiesWithinAABB(cls, entity.boundingBox.expand(range, range, range));
|
||||
List<ScriptEntity> list = new ArrayList<ScriptEntity>();
|
||||
for(Entity living : entities){
|
||||
@@ -143,16 +204,16 @@ public class ScriptEntity {
|
||||
list.add(ScriptController.Instance.getScriptForEntity(living));
|
||||
}
|
||||
return list.toArray(new ScriptEntity[list.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return Whether the entity is alive or not
|
||||
*/
|
||||
public boolean isAlive(){
|
||||
return entity.isEntityAlive();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key Get temp data for this key
|
||||
* @return Returns the stored temp data
|
||||
@@ -160,7 +221,7 @@ public class ScriptEntity {
|
||||
public Object getTempData(String key){
|
||||
return tempData.get(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tempdata gets cleared when the entity gets unloaded or the world restarts
|
||||
* @param key The key for the data stored
|
||||
@@ -169,7 +230,7 @@ public class ScriptEntity {
|
||||
public void setTempData(String key, Object value){
|
||||
tempData.put(key, value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key The key thats going to be tested against the temp data
|
||||
* @return Whether or not temp data containes the key
|
||||
@@ -177,21 +238,21 @@ public class ScriptEntity {
|
||||
public boolean hasTempData(String key){
|
||||
return tempData.containsKey(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key The key for the temp data to be removed
|
||||
*/
|
||||
public void removeTempData(String key){
|
||||
tempData.remove(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove all tempdata
|
||||
*/
|
||||
public void clearTempData(){
|
||||
tempData.clear();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be returned
|
||||
* @return Returns the stored data
|
||||
@@ -205,7 +266,7 @@ public class ScriptEntity {
|
||||
return ((NBTPrimitive)base).func_150286_g();
|
||||
return ((NBTTagString)base).func_150285_a_();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Stored data persists through world restart. Unlike tempdata only Strings and Numbers can be saved
|
||||
* @param key The key for the data stored
|
||||
@@ -220,7 +281,7 @@ public class ScriptEntity {
|
||||
compound.setString(key, (String)value);
|
||||
saveStoredCompound(compound);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be checked
|
||||
* @return Returns whether or not the stored data contains the key
|
||||
@@ -228,7 +289,7 @@ public class ScriptEntity {
|
||||
public boolean hasStoredData(String key){
|
||||
return getStoredCompound().hasKey(key);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be removed
|
||||
*/
|
||||
@@ -237,74 +298,74 @@ public class ScriptEntity {
|
||||
compound.removeTag(key);
|
||||
saveStoredCompound(compound);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove all stored data
|
||||
*/
|
||||
public void clearStoredData(){
|
||||
entity.getEntityData().removeTag("CNPCStoredData");
|
||||
}
|
||||
|
||||
|
||||
private NBTTagCompound getStoredCompound(){
|
||||
NBTTagCompound compound = entity.getEntityData().getCompoundTag("CNPCStoredData");
|
||||
if(compound == null)
|
||||
entity.getEntityData().setTag("CNPCStoredData", compound = new NBTTagCompound());
|
||||
return compound;
|
||||
}
|
||||
|
||||
|
||||
private void saveStoredCompound(NBTTagCompound compound){
|
||||
entity.getEntityData().setTag("CNPCStoredData", compound);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return The age of this entity in ticks
|
||||
*/
|
||||
public long getAge(){
|
||||
return entity.ticksExisted;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Despawns this entity. Removes it permanently
|
||||
*/
|
||||
public void despawn(){
|
||||
entity.isDead = true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in water
|
||||
*/
|
||||
public boolean inWater(){
|
||||
return entity.isInsideOfMaterial(Material.water);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in lava
|
||||
*/
|
||||
public boolean inLava(){
|
||||
return entity.isInsideOfMaterial(Material.lava);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in fire
|
||||
*/
|
||||
public boolean inFire(){
|
||||
return entity.isInsideOfMaterial(Material.fire);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is on fire
|
||||
*/
|
||||
public boolean isBurning(){
|
||||
return entity.isBurning();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param ticks Amount of world ticks this entity will burn. 20 ticks equals 1 second
|
||||
*/
|
||||
public void setBurning(int ticks){
|
||||
entity.setFire(ticks);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes fire from this entity
|
||||
*/
|
||||
@@ -318,7 +379,7 @@ public class ScriptEntity {
|
||||
public String getTypeName(){
|
||||
return EntityList.getEntityString(entity);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param item Item to be dropped
|
||||
*/
|
||||
@@ -332,7 +393,7 @@ public class ScriptEntity {
|
||||
public ScriptEntity getRider(){
|
||||
return ScriptController.Instance.getScriptForEntity(entity.riddenByEntity);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param entity The entity to ride this entity
|
||||
*/
|
||||
@@ -350,7 +411,7 @@ public class ScriptEntity {
|
||||
public ScriptEntity getMount(){
|
||||
return ScriptController.Instance.getScriptForEntity(entity.ridingEntity);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param entity The entity this entity will mount
|
||||
*/
|
||||
@@ -368,7 +429,7 @@ public class ScriptEntity {
|
||||
public int getType(){
|
||||
return EntityType.UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @param type @EntityType to check
|
||||
@@ -377,33 +438,49 @@ public class ScriptEntity {
|
||||
public boolean typeOf(int type){
|
||||
return type == EntityType.UNKNOWN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param rotation The rotation to be set (0-360)
|
||||
*/
|
||||
public void setRotation(float rotation){
|
||||
entity.rotationYaw = rotation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Current rotation of the npc
|
||||
*/
|
||||
public float getRotation(){
|
||||
return entity.rotationYaw;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param power How strong the knockback is
|
||||
* @param direction The direction in which he flies back (0-360). Usually based on getRotation()
|
||||
*/
|
||||
public void knockback(int power, float direction){
|
||||
float v = direction * (float)Math.PI / 180.0F;
|
||||
entity.addVelocity(-MathHelper.sin(v) * (float)power, 0.1D + power * 0.04f, MathHelper.cos(v) * (float)power);
|
||||
entity.motionX *= 0.6D;
|
||||
entity.motionZ *= 0.6D;
|
||||
entity.attackEntityFrom(DamageSource.outOfWorld, 0.0001F);
|
||||
entity.addVelocity(-MathHelper.sin(v) * (float)power, 0.1D + power * 0.04f, MathHelper.cos(v) * (float)power);
|
||||
entity.motionX *= 0.6D;
|
||||
entity.motionZ *= 0.6D;
|
||||
entity.attackEntityFrom(DamageSource.outOfWorld, 0.0001F);
|
||||
entity.hurtResistantTime = 0;
|
||||
}
|
||||
|
||||
|
||||
public void knockback(int xpower, int ypower, int zpower, float direction){
|
||||
float v = direction * (float)Math.PI / 180.0F;
|
||||
entity.addVelocity(-MathHelper.sin(v) * (float)xpower, 0.1D + ypower * 0.04f, MathHelper.cos(v) * (float)zpower);
|
||||
entity.attackEntityFrom(DamageSource.outOfWorld, 0.0001F);
|
||||
entity.hurtResistantTime = 0;
|
||||
}
|
||||
|
||||
public void setImmune(int ticks) {
|
||||
entity.hurtResistantTime = ticks;
|
||||
};
|
||||
|
||||
public boolean hasCollided() {
|
||||
return entity.isCollided;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @return Returns whether or not this entity is sneaking
|
||||
@@ -411,7 +488,7 @@ public class ScriptEntity {
|
||||
public boolean isSneaking(){
|
||||
return entity.isSneaking();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @return Returns whether or not this entity is sprinting
|
||||
@@ -419,13 +496,36 @@ public class ScriptEntity {
|
||||
public boolean isSprinting(){
|
||||
return entity.isSprinting();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* Expert users only
|
||||
* @return Returns minecrafts entity
|
||||
*/
|
||||
public Entity getMCEntity(){
|
||||
public T getMCEntity(){
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
public INbt getNbt() {
|
||||
return NpcAPI.Instance().getINbt(this.entity.getEntityData());
|
||||
}
|
||||
|
||||
public INbt getAllNbt() {
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
this.entity.writeToNBT(compound);
|
||||
return NpcAPI.Instance().getINbt(compound);
|
||||
}
|
||||
|
||||
public void setNbt(INbt nbt) {
|
||||
this.entity.readFromNBT(nbt.getMCNBT());
|
||||
}
|
||||
|
||||
public void storeAsClone(int tab, String name) {
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
if (!this.entity.writeToNBTOptional(compound)) {
|
||||
throw new CustomNPCsException("Cannot store dead entities", new Object[0]);
|
||||
} else {
|
||||
ServerCloneController.Instance.addClone(compound, name, tab);
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-9
@@ -1,17 +1,13 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.NPCEntityHelper;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IEntityLiving;
|
||||
|
||||
public class ScriptLiving extends ScriptLivingBase{
|
||||
public class ScriptLiving<T extends EntityLiving> extends ScriptLivingBase<T> implements IEntityLiving {
|
||||
|
||||
private EntityLiving entity;
|
||||
public ScriptLiving(EntityLiving entity) {
|
||||
private T entity;
|
||||
public ScriptLiving(T entity) {
|
||||
super(entity);
|
||||
this.entity = entity;
|
||||
}
|
||||
+22
-19
@@ -1,30 +1,21 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTBase.NBTPrimitive;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EntityDamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IEntityLivingBase;
|
||||
import noppes.npcs.scripted.wrapper.ScriptDamageSource;
|
||||
|
||||
public class ScriptLivingBase extends ScriptEntity{
|
||||
protected EntityLivingBase entity;
|
||||
public class ScriptLivingBase<T extends EntityLivingBase> extends ScriptEntity<T> implements IEntityLivingBase {
|
||||
protected T entity;
|
||||
|
||||
public ScriptLivingBase(EntityLivingBase entity){
|
||||
public ScriptLivingBase(T entity){
|
||||
super(entity);
|
||||
this.entity = entity;
|
||||
}
|
||||
@@ -42,6 +33,18 @@ public class ScriptLivingBase extends ScriptEntity{
|
||||
public void setHealth(float health){
|
||||
entity.setHealth(health);
|
||||
}
|
||||
|
||||
public void hurt(float damage){
|
||||
entity.attackEntityFrom(DamageSource.generic,damage);
|
||||
}
|
||||
|
||||
public void hurt(float damage, ScriptEntity source) {
|
||||
entity.attackEntityFrom(new EntityDamageSource(source.getTypeName(),source.getMCEntity()),damage);
|
||||
}
|
||||
|
||||
public void hurt(float damage, ScriptDamageSource damageSource) {
|
||||
entity.attackEntityFrom(damageSource.getMCDamageSource(),damage);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Entity's max health
|
||||
@@ -95,7 +98,7 @@ public class ScriptLivingBase extends ScriptEntity{
|
||||
* Expert use only
|
||||
* @return Returns the minecraft entity object
|
||||
*/
|
||||
public EntityLivingBase getMinecraftEntity(){
|
||||
public T getMCEntity(){
|
||||
return entity;
|
||||
}
|
||||
|
||||
+4
-4
@@ -1,12 +1,12 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.monster.EntityMob;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IMonster;
|
||||
|
||||
public class ScriptMonster extends ScriptLiving{
|
||||
public class ScriptMonster<T extends EntityMob> extends ScriptLiving<T> implements IMonster {
|
||||
|
||||
public ScriptMonster(EntityMob entity) {
|
||||
public ScriptMonster(T entity) {
|
||||
super(entity);
|
||||
}
|
||||
|
||||
+37
-10
@@ -1,9 +1,7 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.constants.EnumAnimation;
|
||||
import noppes.npcs.constants.EnumJobType;
|
||||
@@ -11,9 +9,12 @@ import noppes.npcs.constants.EnumRoleType;
|
||||
import noppes.npcs.controllers.Line;
|
||||
import noppes.npcs.entity.EntityCustomNpc;
|
||||
import noppes.npcs.entity.EntityNPCInterface;
|
||||
import noppes.npcs.roles.JobBard;
|
||||
import noppes.npcs.scripted.ScriptFaction;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.constants.AnimationType;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.ICustomNpc;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.scripted.roles.ScriptJobBard;
|
||||
import noppes.npcs.scripted.roles.ScriptJobConversation;
|
||||
import noppes.npcs.scripted.roles.ScriptJobFollower;
|
||||
@@ -31,12 +32,16 @@ import noppes.npcs.scripted.roles.ScriptRoleTrader;
|
||||
import noppes.npcs.scripted.roles.ScriptRoleTransporter;
|
||||
import noppes.npcs.util.ValueUtil;
|
||||
|
||||
public class ScriptNpc extends ScriptLiving{
|
||||
protected EntityCustomNpc npc;
|
||||
|
||||
public ScriptNpc(EntityCustomNpc npc){
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ScriptNpc<T extends EntityNPCInterface> extends ScriptLiving<T> implements ICustomNpc {
|
||||
public EntityCustomNpc npc;
|
||||
|
||||
public ScriptNpc(T npc){
|
||||
super(npc);
|
||||
this.npc = npc;
|
||||
this.npc = (EntityCustomNpc)npc;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -431,6 +436,24 @@ public class ScriptNpc extends ScriptLiving{
|
||||
public int getVisibleType(){
|
||||
return npc.display.visible;
|
||||
}
|
||||
|
||||
public void setVisibleTo(ScriptPlayer player, boolean visible) {
|
||||
UUID uuid = player.player.getPersistentID();
|
||||
ArrayList<UUID> uuidList = npc.display.invisibleToList;
|
||||
if(uuidList != null) {
|
||||
if (!uuidList.contains(uuid)) {
|
||||
if (!visible)
|
||||
npc.display.invisibleToList.add(uuid);
|
||||
} else if (visible) {
|
||||
npc.display.invisibleToList.remove(uuid);
|
||||
}
|
||||
}
|
||||
npc.script.clientNeedsUpdate = true;
|
||||
}
|
||||
|
||||
public boolean isVisibleTo(ScriptPlayer player) {
|
||||
return !npc.scriptInvisibleToPlayer(player.player);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type The visibility type of the name, 0:visible, 1:invisible, 2:when-attacking
|
||||
@@ -679,4 +702,8 @@ public class ScriptNpc extends ScriptLiving{
|
||||
public long getAge(){
|
||||
return npc.totalTicksAlive;
|
||||
}
|
||||
|
||||
public ITimers getTimers() {
|
||||
return ((EntityNPCInterface)this.npc).timers;
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -1,21 +1,21 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.passive.EntityTameable;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import noppes.npcs.controllers.PixelmonHelper;
|
||||
import noppes.npcs.scripted.interfaces.IPixelmon;
|
||||
import noppes.npcs.util.ValueUtil;
|
||||
|
||||
public class ScriptPixelmon extends ScriptAnimal{
|
||||
private EntityTameable pixelmon;
|
||||
public class ScriptPixelmon<T extends EntityTameable> extends ScriptAnimal<T> implements IPixelmon {
|
||||
private T pixelmon;
|
||||
private NBTTagCompound compound = null;
|
||||
public ScriptPixelmon(EntityTameable pixelmon){
|
||||
public ScriptPixelmon(T pixelmon){
|
||||
super(pixelmon);
|
||||
this.pixelmon = pixelmon;
|
||||
compound = new NBTTagCompound();
|
||||
pixelmon.writeEntityToNBT(compound);
|
||||
}
|
||||
public ScriptPixelmon(EntityTameable pixelmon, NBTTagCompound compound){
|
||||
public ScriptPixelmon(T pixelmon, NBTTagCompound compound){
|
||||
this(pixelmon);
|
||||
this.compound = compound;
|
||||
}
|
||||
+52
-7
@@ -1,5 +1,6 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.entity;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -14,6 +15,7 @@ import noppes.npcs.NoppesStringUtils;
|
||||
import noppes.npcs.NoppesUtilPlayer;
|
||||
import noppes.npcs.Server;
|
||||
import noppes.npcs.constants.EnumPacketClient;
|
||||
import noppes.npcs.constants.EnumQuestType;
|
||||
import noppes.npcs.controllers.PixelmonHelper;
|
||||
import noppes.npcs.controllers.PlayerData;
|
||||
import noppes.npcs.controllers.PlayerDataController;
|
||||
@@ -22,12 +24,17 @@ import noppes.npcs.controllers.PlayerQuestData;
|
||||
import noppes.npcs.controllers.Quest;
|
||||
import noppes.npcs.controllers.QuestController;
|
||||
import noppes.npcs.controllers.QuestData;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.ScriptPixelmonPlayerData;
|
||||
import noppes.npcs.scripted.constants.EntityType;
|
||||
import noppes.npcs.scripted.interfaces.IPlayer;
|
||||
import noppes.npcs.scripted.interfaces.ITimers;
|
||||
import noppes.npcs.util.ValueUtil;
|
||||
|
||||
public class ScriptPlayer extends ScriptLivingBase{
|
||||
protected EntityPlayerMP player;
|
||||
public ScriptPlayer(EntityPlayerMP player){
|
||||
public class ScriptPlayer<T extends EntityPlayerMP> extends ScriptLivingBase<T> implements IPlayer {
|
||||
public T player;
|
||||
public ScriptPlayer(T player){
|
||||
super(player);
|
||||
this.player = player;
|
||||
}
|
||||
@@ -50,6 +57,18 @@ public class ScriptPlayer extends ScriptLivingBase{
|
||||
public void setPosition(double x, double y, double z){
|
||||
NoppesUtilPlayer.teleportPlayer(player, x, y, z, player.dimension);
|
||||
}
|
||||
|
||||
public void setPosition(double x, double y, double z, int dimensionId){
|
||||
if (NpcAPI.Instance().getIWorld(dimensionId) == null)
|
||||
return;
|
||||
|
||||
NoppesUtilPlayer.teleportPlayer(player, x, y, z, dimensionId);
|
||||
}
|
||||
|
||||
public int getDimension(){
|
||||
return player.dimension;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasFinishedQuest(int id){
|
||||
PlayerQuestData data = PlayerDataController.instance.getPlayerData(player).questData;
|
||||
@@ -221,6 +240,7 @@ public class ScriptPlayer extends ScriptLivingBase{
|
||||
}
|
||||
}
|
||||
}
|
||||
this.updatePlayerInventory();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -245,8 +265,14 @@ public class ScriptPlayer extends ScriptLivingBase{
|
||||
* @return Returns whether or not it gave the item succesfully
|
||||
*/
|
||||
public boolean giveItem(ScriptItemStack item, int amount){
|
||||
String itemname = Item.itemRegistry.getNameForObject(item.getMCItemStack().getItem());
|
||||
return giveItem(itemname, item.getItemDamage(), amount);
|
||||
if(item != null && item.getMCItemStack() != null) {
|
||||
item.setStackSize(amount);
|
||||
boolean bool = this.player.inventory.addItemStackToInventory(item.getMCItemStack());
|
||||
this.updatePlayerInventory();
|
||||
return bool;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -290,7 +316,10 @@ public class ScriptPlayer extends ScriptLivingBase{
|
||||
player.inventory.mainInventory[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setRotation(float rotationYaw, float rotationPitch){
|
||||
NoppesUtilPlayer.teleportPlayer(player, player.posX, player.posY, player.posZ, rotationYaw, rotationPitch, player.dimension);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param achievement The achievement id. For a complete list see http://minecraft.gamepedia.com/Achievements
|
||||
@@ -338,4 +367,20 @@ public class ScriptPlayer extends ScriptLivingBase{
|
||||
return null;
|
||||
return new ScriptPixelmonPlayerData(player);
|
||||
}
|
||||
|
||||
public ITimers getTimers() {
|
||||
return PlayerDataController.instance.getPlayerData(player).timers;
|
||||
}
|
||||
|
||||
public void updatePlayerInventory() {
|
||||
((EntityPlayerMP)this.entity).inventoryContainer.detectAndSendChanges();
|
||||
PlayerQuestData playerdata = PlayerDataController.instance.getPlayerData(player).questData;
|
||||
playerdata.checkQuestCompletion((EntityPlayer)this.entity, EnumQuestType.Item);
|
||||
}
|
||||
|
||||
public boolean checkGUIOpen() {
|
||||
NoppesUtilPlayer.isGUIOpen(player);
|
||||
PlayerData data = PlayerDataController.instance.getPlayerData(player);
|
||||
return data.getGUIOpen();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
|
||||
public class CustomNPCsEvent extends Event{
|
||||
public final NpcAPI API = NpcAPI.Instance();
|
||||
|
||||
public CustomNPCsEvent() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import noppes.npcs.scripted.interfaces.IWorld;
|
||||
import noppes.npcs.scripted.interfaces.IEntity;
|
||||
|
||||
@Cancelable
|
||||
public class ForgeEvent extends CustomNPCsEvent {
|
||||
public final Event event;
|
||||
|
||||
public ForgeEvent(Event event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class WorldEvent extends ForgeEvent {
|
||||
public final IWorld world;
|
||||
|
||||
public WorldEvent(net.minecraftforge.event.world.WorldEvent event, IWorld world) {
|
||||
super(event);
|
||||
this.world = world;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class EntityEvent extends ForgeEvent {
|
||||
public final IEntity entity;
|
||||
|
||||
public EntityEvent(net.minecraftforge.event.entity.EntityEvent event, IEntity entity) {
|
||||
super(event);
|
||||
this.entity = entity;
|
||||
}
|
||||
}
|
||||
|
||||
public static class InitEvent extends ForgeEvent {
|
||||
public InitEvent() {
|
||||
super((Event)null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.scripted.NpcAPI;
|
||||
import noppes.npcs.scripted.interfaces.*;
|
||||
|
||||
public class NpcEvent extends CustomNPCsEvent {
|
||||
public final ICustomNpc npc;
|
||||
|
||||
public NpcEvent(ICustomNpc npc) {
|
||||
this.npc = npc;
|
||||
}
|
||||
|
||||
public static class TimerEvent extends NpcEvent {
|
||||
public final int id;
|
||||
|
||||
public TimerEvent(ICustomNpc npc, int id) {
|
||||
super(npc);
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
public static class CollideEvent extends NpcEvent {
|
||||
public final IEntity entity;
|
||||
|
||||
public CollideEvent(ICustomNpc npc, Entity entity) {
|
||||
super(npc);
|
||||
this.entity = NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class DamagedEvent extends NpcEvent {
|
||||
public final IDamageSource damageSource;
|
||||
public final IEntity source;
|
||||
public float damage;
|
||||
public boolean clearTarget = false;
|
||||
|
||||
public DamagedEvent(ICustomNpc npc, Entity source, float damage, DamageSource damagesource) {
|
||||
super(npc);
|
||||
this.source = NpcAPI.Instance().getIEntity(source);
|
||||
this.damage = damage;
|
||||
this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RangedLaunchedEvent extends NpcEvent {
|
||||
public final IEntityLivingBase target;
|
||||
public float damage;
|
||||
//public List<IProjectile> projectiles = new ArrayList();
|
||||
|
||||
public RangedLaunchedEvent(ICustomNpc npc, EntityLivingBase target, float damage) {
|
||||
super(npc);
|
||||
this.target = (IEntityLivingBase)NpcAPI.Instance().getIEntity(target);
|
||||
this.damage = damage;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class MeleeAttackEvent extends NpcEvent {
|
||||
public final IEntityLivingBase target;
|
||||
public float damage;
|
||||
|
||||
public MeleeAttackEvent(ICustomNpc npc, EntityLivingBase target, float damage) {
|
||||
super(npc);
|
||||
this.target = (IEntityLivingBase)NpcAPI.Instance().getIEntity(target);
|
||||
this.damage = damage;
|
||||
}
|
||||
}
|
||||
|
||||
public static class KilledEntityEvent extends NpcEvent {
|
||||
public final IEntityLivingBase entity;
|
||||
|
||||
public KilledEntityEvent(ICustomNpc npc, EntityLivingBase entity) {
|
||||
super(npc);
|
||||
this.entity = (IEntityLivingBase)NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
public static class DiedEvent extends NpcEvent {
|
||||
public final IDamageSource damageSource;
|
||||
public final String type;
|
||||
public final IEntity source;
|
||||
public IItemStack[] droppedItems;
|
||||
public int expDropped;
|
||||
|
||||
public DiedEvent(ICustomNpc npc, DamageSource damagesource, Entity entity) {
|
||||
super(npc);
|
||||
this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource);
|
||||
this.type = damagesource.damageType;
|
||||
this.source = NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class InteractEvent extends NpcEvent {
|
||||
public final IPlayer player;
|
||||
|
||||
public InteractEvent(ICustomNpc npc, EntityPlayer player) {
|
||||
super(npc);
|
||||
this.player = (IPlayer)NpcAPI.Instance().getIEntity(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class TargetLostEvent extends NpcEvent {
|
||||
public final IEntityLivingBase entity;
|
||||
|
||||
public TargetLostEvent(ICustomNpc npc, EntityLivingBase entity) {
|
||||
super(npc);
|
||||
this.entity = (IEntityLivingBase)NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class TargetEvent extends NpcEvent {
|
||||
public IEntityLivingBase entity;
|
||||
|
||||
public TargetEvent(ICustomNpc npc, EntityLivingBase entity) {
|
||||
super(npc);
|
||||
this.entity = (IEntityLivingBase) NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
public static class UpdateEvent extends NpcEvent {
|
||||
public UpdateEvent(ICustomNpc npc) {
|
||||
super(npc);
|
||||
}
|
||||
}
|
||||
|
||||
public static class InitEvent extends NpcEvent {
|
||||
public InitEvent(ICustomNpc npc) {
|
||||
super(npc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,444 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Cancelable;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityXPOrb;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import noppes.npcs.scripted.*;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
import noppes.npcs.scripted.interfaces.*;
|
||||
|
||||
public class PlayerEvent extends CustomNPCsEvent {
|
||||
public final IPlayer player;
|
||||
|
||||
public PlayerEvent(IPlayer player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class ChatEvent extends PlayerEvent {
|
||||
public String message;
|
||||
|
||||
public ChatEvent(IPlayer player, String message) {
|
||||
super(player);
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
||||
public static class KeyPressedEvent extends PlayerEvent {
|
||||
public final int key;
|
||||
public final boolean isCtrlPressed;
|
||||
public final boolean isAltPressed;
|
||||
public final boolean isShiftPressed;
|
||||
public final boolean isMetaPressed;
|
||||
public final boolean keyDown;
|
||||
|
||||
public KeyPressedEvent(IPlayer player, int key, boolean isCtrlPressed, boolean isAltPressed, boolean isShiftPressed, boolean isMetaPressed, boolean keyDown) {
|
||||
super(player);
|
||||
this.key = key;
|
||||
this.isCtrlPressed = isCtrlPressed;
|
||||
this.isAltPressed = isAltPressed;
|
||||
this.isShiftPressed = isShiftPressed;
|
||||
this.isMetaPressed = isMetaPressed;
|
||||
this.keyDown = keyDown;
|
||||
}
|
||||
}
|
||||
|
||||
public static class MouseClickedEvent extends PlayerEvent {
|
||||
public final int button;
|
||||
public final int mouseWheel;
|
||||
public final boolean buttonDown;
|
||||
|
||||
public MouseClickedEvent(IPlayer player, int button, int mouseWheel, boolean buttonDown){
|
||||
super(player);
|
||||
this.button = button;
|
||||
this.mouseWheel = mouseWheel;
|
||||
this.buttonDown = buttonDown;
|
||||
}
|
||||
}
|
||||
|
||||
public static class PickupXPEvent extends PlayerEvent {
|
||||
public final int amount;
|
||||
|
||||
public PickupXPEvent(IPlayer player, EntityXPOrb orb) {
|
||||
super(player);
|
||||
this.amount = orb.xpValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static class LevelUpEvent extends PlayerEvent {
|
||||
public final int change;
|
||||
|
||||
public LevelUpEvent(IPlayer player, int change) {
|
||||
super(player);
|
||||
this.change = change;
|
||||
}
|
||||
}
|
||||
|
||||
public static class LogoutEvent extends PlayerEvent {
|
||||
public LogoutEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class LoginEvent extends PlayerEvent {
|
||||
public LoginEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RespawnEvent extends PlayerEvent {
|
||||
public RespawnEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ChangedDimension extends PlayerEvent {
|
||||
public final int fromDim;
|
||||
public final int toDim;
|
||||
|
||||
public ChangedDimension(IPlayer player, int fromDim, int toDim){
|
||||
super(player);
|
||||
this.fromDim = fromDim;
|
||||
this.toDim = toDim;
|
||||
}
|
||||
}
|
||||
|
||||
public static class TimerEvent extends PlayerEvent {
|
||||
public final int id;
|
||||
|
||||
public TimerEvent(IPlayer player, int id) {
|
||||
super(player);
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class DamagedEvent extends PlayerEvent {
|
||||
public final IDamageSource damageSource;
|
||||
public final IEntity source;
|
||||
public float damage;
|
||||
public boolean clearTarget = false;
|
||||
|
||||
public DamagedEvent(IPlayer player, Entity source, float damage, DamageSource damagesource) {
|
||||
super(player);
|
||||
this.source = NpcAPI.Instance().getIEntity(source);
|
||||
this.damage = damage;
|
||||
this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class LightningEvent extends PlayerEvent {
|
||||
public LightningEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class SoundEvent extends PlayerEvent {
|
||||
public final String name;
|
||||
public final float pitch;
|
||||
public final float volume;
|
||||
|
||||
public SoundEvent(IPlayer player, String name, float pitch, float volume) {
|
||||
super(player);
|
||||
this.name = name;
|
||||
this.pitch = pitch;
|
||||
this.volume = volume;
|
||||
}
|
||||
}
|
||||
|
||||
public static class FallEvent extends PlayerEvent {
|
||||
public final float distance;
|
||||
|
||||
public FallEvent(IPlayer player, float distance){
|
||||
super(player);
|
||||
this.distance = distance;
|
||||
}
|
||||
}
|
||||
|
||||
public static class JumpEvent extends PlayerEvent {
|
||||
public JumpEvent(IPlayer player){
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class KilledEntityEvent extends PlayerEvent {
|
||||
public final IEntityLivingBase entity;
|
||||
|
||||
public KilledEntityEvent(IPlayer player, EntityLivingBase entity) {
|
||||
super(player);
|
||||
this.entity = new ScriptLivingBase<>(entity);//NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class DiedEvent extends PlayerEvent {
|
||||
public final IDamageSource damageSource;
|
||||
public final String type;
|
||||
public final IEntity source;
|
||||
|
||||
public DiedEvent(IPlayer player, DamageSource damagesource, Entity entity) {
|
||||
super(player);
|
||||
this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource);
|
||||
this.type = damagesource.getDamageType();
|
||||
this.source = NpcAPI.Instance().getIEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class RangedLaunchedEvent extends PlayerEvent {
|
||||
public final IItemStack bow;
|
||||
public int charge;
|
||||
|
||||
public RangedLaunchedEvent(IPlayer player, ItemStack bow, int charge) {
|
||||
super(player);
|
||||
this.bow = NpcAPI.Instance().getIItemStack(bow);
|
||||
this.charge = charge;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class DamagedEntityEvent extends PlayerEvent {
|
||||
public final IDamageSource damageSource;
|
||||
public final IEntity target;
|
||||
public float damage;
|
||||
|
||||
public DamagedEntityEvent(IPlayer player, Entity target, float damage, DamageSource damagesource) {
|
||||
super(player);
|
||||
this.target = NpcAPI.Instance().getIEntity(target);
|
||||
this.damage = damage;
|
||||
this.damageSource = NpcAPI.Instance().getIDamageSource(damagesource);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ContainerClosed extends PlayerEvent {
|
||||
public final IContainer container;
|
||||
|
||||
public ContainerClosed(IPlayer player, IContainer container) {
|
||||
super(player);
|
||||
this.container = container;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ContainerOpen extends PlayerEvent {
|
||||
public final IContainer container;
|
||||
|
||||
public ContainerOpen(IPlayer player, IContainer container) {
|
||||
super(player);
|
||||
this.container = container;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class PickUpEvent extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
|
||||
public PickUpEvent(IPlayer player, IItemStack item) {
|
||||
super(player);
|
||||
this.item = item;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class DropEvent extends PlayerEvent {
|
||||
public final IItemStack[] items;
|
||||
|
||||
public DropEvent(IPlayer player, IItemStack[] items) {
|
||||
super(player);
|
||||
this.items = items;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class TossEvent extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
|
||||
public TossEvent(IPlayer player, IItemStack item) {
|
||||
super(player);
|
||||
this.item = item;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class AttackEvent extends PlayerEvent {
|
||||
public final int type;
|
||||
public final Object target;
|
||||
|
||||
public AttackEvent(IPlayer player, int type, Object target) {
|
||||
super(player);
|
||||
this.type = type;
|
||||
this.target = target;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class InteractEvent extends PlayerEvent {
|
||||
public final int type;
|
||||
public final Object target;
|
||||
|
||||
public InteractEvent(IPlayer player, int type, Object target) {
|
||||
super(player);
|
||||
this.type = type;
|
||||
this.target = target;
|
||||
}
|
||||
}
|
||||
|
||||
public static class UpdateEvent extends PlayerEvent {
|
||||
public UpdateEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class InitEvent extends PlayerEvent {
|
||||
public InitEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
|
||||
public static class StartUsingItem extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
public final int duration;
|
||||
|
||||
public StartUsingItem(IPlayer player, ItemStack item, int duration){
|
||||
super(player);
|
||||
|
||||
this.item = NpcAPI.Instance().getIItemStack(item);
|
||||
this.duration = duration;
|
||||
}
|
||||
}
|
||||
public static class UsingItem extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
public final int duration;
|
||||
|
||||
public UsingItem(IPlayer player, ItemStack item, int duration){
|
||||
super(player);
|
||||
|
||||
this.item = NpcAPI.Instance().getIItemStack(item);
|
||||
this.duration = duration;
|
||||
}
|
||||
}
|
||||
public static class StopUsingItem extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
public final int duration;
|
||||
|
||||
public StopUsingItem(IPlayer player, ItemStack item, int duration){
|
||||
super(player);
|
||||
|
||||
this.item = NpcAPI.Instance().getIItemStack(item);
|
||||
this.duration = duration;
|
||||
}
|
||||
}
|
||||
public static class FinishUsingItem extends PlayerEvent {
|
||||
public final IItemStack item;
|
||||
public final int duration;
|
||||
|
||||
public FinishUsingItem(IPlayer player, ItemStack item, int duration){
|
||||
super(player);
|
||||
|
||||
this.item = NpcAPI.Instance().getIItemStack(item);
|
||||
this.duration = duration;
|
||||
}
|
||||
}
|
||||
|
||||
@Cancelable
|
||||
public static class BreakEvent extends PlayerEvent {
|
||||
public final IBlock block;
|
||||
public int exp;
|
||||
|
||||
public BreakEvent(IPlayer player, IBlock block, int exp) {
|
||||
super(player);
|
||||
this.block = block;
|
||||
this.exp = exp;
|
||||
}
|
||||
}
|
||||
|
||||
public static class UseHoe extends PlayerEvent {
|
||||
public final IItemStack hoe;
|
||||
public final int x;
|
||||
public final int y;
|
||||
public final int z;
|
||||
|
||||
public UseHoe(IPlayer player, ItemStack item, int x, int y, int z) {
|
||||
super(player);
|
||||
this.hoe = new ScriptItemStack(item);
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
}
|
||||
|
||||
public static class WakeUp extends PlayerEvent{
|
||||
public final boolean setSpawn;
|
||||
|
||||
public WakeUp(IPlayer player, boolean setSpawn) {
|
||||
super(player);
|
||||
this.setSpawn = setSpawn;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Sleep extends PlayerEvent {
|
||||
public final int x;
|
||||
public final int y;
|
||||
public final int z;
|
||||
|
||||
public Sleep(IPlayer player, int x, int y, int z) {
|
||||
super(player);
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Achievement extends PlayerEvent {
|
||||
public final String description;
|
||||
|
||||
public Achievement(IPlayer player, String description) {
|
||||
super(player);
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
|
||||
public static class FillBucket extends PlayerEvent {
|
||||
public final IItemStack current;
|
||||
public final IItemStack result;
|
||||
|
||||
public FillBucket(IPlayer player, ItemStack current, ItemStack result) {
|
||||
super(player);
|
||||
this.current = new ScriptItemStack(current);
|
||||
this.result = new ScriptItemStack(result);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Bonemeal extends PlayerEvent {
|
||||
public final IBlock block;
|
||||
public final int x;
|
||||
public final int y;
|
||||
public final int z;
|
||||
|
||||
public Bonemeal(IPlayer player, int x, int y, int z, World world) {
|
||||
super(player);
|
||||
this.block = API.getIBlock(world, x, y, z);
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
}
|
||||
|
||||
public static class RangedChargeEvent extends PlayerEvent {
|
||||
public RangedChargeEvent(IPlayer player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
public
|
||||
class ScriptEvent{
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
|
||||
public class ScriptEventAttack extends ScriptEvent{
|
||||
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
|
||||
public class ScriptEventDamaged extends ScriptEvent{
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
public class ScriptEventDialog extends ScriptEvent{
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public boolean isClosing(){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
|
||||
public class ScriptEventKilled extends ScriptEvent{
|
||||
|
||||
+3
-3
@@ -1,10 +1,10 @@
|
||||
package noppes.npcs.scripted;
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import noppes.npcs.controllers.ScriptController;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
|
||||
public class ScriptEventTarget extends ScriptEvent{
|
||||
public class ScriptEventTarget extends ScriptEvent {
|
||||
|
||||
private ScriptLivingBase target;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package noppes.npcs.scripted.event;
|
||||
|
||||
public class ScriptEventTimer extends ScriptEvent {
|
||||
private int id;
|
||||
|
||||
public ScriptEventTimer(int id){
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId(){
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
|
||||
public interface IAnimal<T extends EntityAnimal> extends IEntityLiving<T> {
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public interface IBlock {
|
||||
int getX();
|
||||
|
||||
int getY();
|
||||
|
||||
int getZ();
|
||||
|
||||
IPos getPos();
|
||||
|
||||
String getName();
|
||||
|
||||
void remove();
|
||||
|
||||
boolean isAir();
|
||||
|
||||
IBlock setBlock(String var1);
|
||||
|
||||
IBlock setBlock(IBlock var1);
|
||||
|
||||
boolean isContainer();
|
||||
|
||||
IContainer getContainer();
|
||||
|
||||
IWorld getWorld();
|
||||
|
||||
TileEntity getMCTileEntity();
|
||||
|
||||
Block getMCBlock();
|
||||
|
||||
String getDisplayName();
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
||||
public interface IContainer {
|
||||
int getSize();
|
||||
|
||||
IItemStack getSlot(int var1);
|
||||
|
||||
void setSlot(int slot, IItemStack item);
|
||||
|
||||
IInventory getMCInventory();
|
||||
|
||||
Container getMCContainer();
|
||||
|
||||
int count(IItemStack var1, boolean var2, boolean var3);
|
||||
|
||||
IItemStack[] getItems();
|
||||
}
|
||||
@@ -0,0 +1,403 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.EntityCreature;
|
||||
import noppes.npcs.scripted.ScriptFaction;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
import noppes.npcs.scripted.entity.ScriptPlayer;
|
||||
import noppes.npcs.scripted.roles.*;
|
||||
|
||||
public interface ICustomNpc<T extends EntityCreature> extends IEntityLiving<T> {
|
||||
/**
|
||||
* @return Returns the current npcs size 1-30
|
||||
*/
|
||||
public int getSize();
|
||||
|
||||
/**
|
||||
* @param size The size of the npc (1-30) default is 5
|
||||
*/
|
||||
public void setSize(int size);
|
||||
|
||||
/**
|
||||
* @return Returns the current npcs modelType of the NPC
|
||||
*/
|
||||
public int getModelType();
|
||||
|
||||
/**
|
||||
* @param modelType The modelType of the NPC. 0: Steve, 1: Steve64, 2: Alex
|
||||
*/
|
||||
public void setModelType(int modelType);
|
||||
|
||||
/**
|
||||
* @return The npcs name
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
public void setRotation(float rotation);
|
||||
/**
|
||||
* @param name The name of the npc
|
||||
*/
|
||||
public void setName(String name);
|
||||
|
||||
/**
|
||||
* @since 1.7.10
|
||||
* @return The npcs title
|
||||
*/
|
||||
public String getTitle();
|
||||
|
||||
/**
|
||||
* @since 1.7.10
|
||||
* @param title The title of the npc
|
||||
*/
|
||||
public void setTitle(String title);
|
||||
|
||||
/**
|
||||
* @return The npcs texture
|
||||
*/
|
||||
public String getTexture();
|
||||
|
||||
/**
|
||||
* @param texture The texture of the npc
|
||||
*/
|
||||
public void setTexture(String texture);
|
||||
|
||||
/**
|
||||
* @return Home position x
|
||||
*/
|
||||
public int getHomeX();
|
||||
|
||||
/**
|
||||
* @param x The home x position
|
||||
*/
|
||||
public void setHomeX(int x);
|
||||
|
||||
/**
|
||||
* @return Home position x
|
||||
*/
|
||||
public int getHomeY();
|
||||
|
||||
/**
|
||||
* @param y The home y position
|
||||
*/
|
||||
public void setHomeY(int y);
|
||||
|
||||
/**
|
||||
* @return Home position x
|
||||
*/
|
||||
public int getHomeZ();
|
||||
|
||||
/**
|
||||
* @param z The home x position
|
||||
*/
|
||||
public void setHomeZ(int z);
|
||||
|
||||
/**
|
||||
* @param x The home x position
|
||||
* @param y The home y position
|
||||
* @param z The home z position
|
||||
*/
|
||||
public void setHome(int x, int y, int z);
|
||||
/**
|
||||
* @param health New max health
|
||||
*/
|
||||
public void setMaxHealth(int health);
|
||||
|
||||
/**
|
||||
* @param bo Whether or not the npc will try to return to his home position
|
||||
*/
|
||||
public void setReturnToHome(boolean bo);
|
||||
|
||||
/**
|
||||
* @return Whether or not the npc returns home
|
||||
*/
|
||||
public boolean getReturnToHome();
|
||||
|
||||
/**
|
||||
* @return The faction of the npc
|
||||
*/
|
||||
public ScriptFaction getFaction();
|
||||
|
||||
/**
|
||||
* @param id The id of the new faction
|
||||
*/
|
||||
public void setFaction(int id);
|
||||
|
||||
public int getType();
|
||||
|
||||
public boolean typeOf(int type);
|
||||
|
||||
/**
|
||||
* @param target The targeted npc
|
||||
* @param item The item you want to shoot
|
||||
* @param accuracy Accuracy of the shot (0-100)
|
||||
*/
|
||||
public void shootItem(ScriptLivingBase target, ScriptItemStack item, int accuracy);
|
||||
|
||||
/**
|
||||
* @param message The message the npc will say
|
||||
*/
|
||||
public void say(String message);
|
||||
|
||||
/**
|
||||
* @param message The message the npc will say
|
||||
*/
|
||||
public void say(ScriptPlayer player, String message);
|
||||
|
||||
/**
|
||||
* Kill the npc, doesnt't despawn it
|
||||
*/
|
||||
public void kill();
|
||||
|
||||
/**
|
||||
* Basically completely resets the npc. This will also call the Init script
|
||||
*/
|
||||
public void reset();
|
||||
|
||||
/**
|
||||
* @return Returns the npcs current role
|
||||
*/
|
||||
public ScriptRoleInterface getRole();
|
||||
|
||||
/**
|
||||
* @return Returns the npcs current job
|
||||
*/
|
||||
public ScriptJobInterface getJob();
|
||||
|
||||
/**
|
||||
* @return The item held in the right hand
|
||||
*/
|
||||
public ScriptItemStack getRightItem();
|
||||
|
||||
/**
|
||||
* @param item Item to be held in the right hand
|
||||
*/
|
||||
public void setRightItem(ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* @return The item held in the left hand
|
||||
*/
|
||||
public ScriptItemStack getLefttItem();
|
||||
|
||||
/**
|
||||
* @param item Item to be held in the left hand
|
||||
*/
|
||||
public void setLeftItem(ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* @return Returns the projectile the npc uses
|
||||
*/
|
||||
public ScriptItemStack getProjectileItem();
|
||||
|
||||
/**
|
||||
* @param item Item to be used as projectile
|
||||
*/
|
||||
public void setProjectileItem(ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* @param slot The armor slot to return. 0:head, 1:body, 2:legs, 3:boots
|
||||
* @return Returns the worn armor in slot
|
||||
*/
|
||||
public ScriptItemStack getArmor(int slot);
|
||||
|
||||
/**
|
||||
* @param slot The armor slot to set. 0:head, 1:body, 2:legs, 3:boots
|
||||
* @param item Item to be set as armor
|
||||
*/
|
||||
public void setArmor(int slot, ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* @param type The AnimationType
|
||||
*/
|
||||
public void setAnimation(int type);
|
||||
|
||||
/**
|
||||
* @param type The visibility type of the npc, 0:visible, 1:invisible, 2:semi-visible
|
||||
*/
|
||||
public void setVisibleType(int type);
|
||||
|
||||
/**
|
||||
* @return The visibility type of the npc, 0:visible, 1:invisible, 2:semi-visible
|
||||
*/
|
||||
public int getVisibleType();
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player The player this NPC becomes visible/invisible to
|
||||
* @param visible True if you want the NPC to be invisible to the player, false otherwise
|
||||
*/
|
||||
public void setVisibleTo(ScriptPlayer player, boolean visible);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param player The player this NPC is visible/invisible to
|
||||
* @return False if the NPC has been toggled to be invisible to this player, true otherwise.
|
||||
* If setVisibleTo(player,visible) was not called to make this NPC invisible to the player at any point
|
||||
* in the NPC's life, this function will return true regardless of the value of isVisible().
|
||||
*/
|
||||
public boolean isVisibleTo(ScriptPlayer player);
|
||||
|
||||
/**
|
||||
* @param type The visibility type of the name, 0:visible, 1:invisible, 2:when-attacking
|
||||
*/
|
||||
public void setShowName(int type);
|
||||
|
||||
/**
|
||||
* @return Returns the visibility type of the name, 0:visible, 1:invisible, 2:when-attacking
|
||||
*/
|
||||
public int getShowName();
|
||||
|
||||
/**
|
||||
* @return Returns the visiblity of the boss bar, 0:invisible, 1:visible, 2:when-attacking
|
||||
*/
|
||||
public int getShowBossBar();
|
||||
|
||||
/**
|
||||
* @param type The visibility type of the boss bar, 0:invisible, 1:visible, 2:when-attacking
|
||||
*/
|
||||
public void setShowBossBar(int type);
|
||||
|
||||
/**
|
||||
* @return The melee strength
|
||||
*/
|
||||
public int getMeleeStrength();
|
||||
|
||||
/**
|
||||
* @param strength The melee strength
|
||||
*/
|
||||
public void setMeleeStrength(int strength);
|
||||
|
||||
/**
|
||||
* @return The melee speed
|
||||
*/
|
||||
public int getMeleeSpeed();
|
||||
|
||||
/**
|
||||
* @param speed The melee speed
|
||||
*/
|
||||
public void setMeleeSpeed(int speed);
|
||||
|
||||
/**
|
||||
* @return The ranged strength
|
||||
*/
|
||||
public int getRangedStrength();
|
||||
|
||||
/**
|
||||
* @param strength The ranged strength
|
||||
*/
|
||||
public void setRangedStrength(int strength);
|
||||
|
||||
/**
|
||||
* @return The ranged speed
|
||||
*/
|
||||
public int getRangedSpeed();
|
||||
|
||||
/**
|
||||
* @param speed The ranged speed
|
||||
*/
|
||||
public void setRangedSpeed(int speed);
|
||||
|
||||
/**
|
||||
* @return The ranged burst count
|
||||
*/
|
||||
public int getRangedBurst();
|
||||
|
||||
/**
|
||||
* @param count The ranged burst count
|
||||
*/
|
||||
public void setRangedBurst(int count);
|
||||
|
||||
/**
|
||||
* @param player The player to give the item to
|
||||
* @param item The item given to the player
|
||||
*/
|
||||
public void giveItem(ScriptPlayer player, ScriptItemStack item);
|
||||
|
||||
|
||||
/**
|
||||
* On servers the enable-command-block option in the server.properties needs to be set to true
|
||||
* @param command The command to be executed
|
||||
*/
|
||||
public void executeCommand(String command);
|
||||
|
||||
public void setHeadScale(float x, float y, float z);
|
||||
|
||||
public void setBodyScale(float x, float y, float z);
|
||||
|
||||
public void setArmsScale(float x, float y, float z);
|
||||
|
||||
public void setLegsScale(float x, float y, float z);
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @param resistance Explosion resistance (0-2) default is 1
|
||||
*/
|
||||
public void setExplosionResistance(float resistance);
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @return Returns Explosion Resistance
|
||||
*/
|
||||
public float getExplosionResistance();
|
||||
|
||||
/**
|
||||
* @param resistance Melee resistance (0-2) default is 1
|
||||
*/
|
||||
public void setMeleeResistance(float resistance);
|
||||
|
||||
/**
|
||||
* @return Returns Melee Resistance
|
||||
*/
|
||||
public float getMeleeResistance();
|
||||
|
||||
/**
|
||||
* @param resistance Arrow resistance (0-2) default is 1
|
||||
*/
|
||||
public void setArrowResistance(float resistance);
|
||||
|
||||
/**
|
||||
* @return Returns Arrow Resistance
|
||||
*/
|
||||
public float getArrowResistance();
|
||||
|
||||
/**
|
||||
* @param resistance Knockback resistance (0-2) default is 1
|
||||
*/
|
||||
public void setKnockbackResistance(float resistance);
|
||||
|
||||
/**
|
||||
* @return Returns Knockback Resistance
|
||||
*/
|
||||
public float getKnockbackResistance();
|
||||
|
||||
/**
|
||||
* @param type Retaliation type. 0:normal, 1:panic, 2:retreat, 3:nothing
|
||||
*/
|
||||
public void setRetaliateType(int type);
|
||||
|
||||
/**
|
||||
* @return Returns the combat health regen per second
|
||||
*/
|
||||
public int getCombatRegen();
|
||||
|
||||
/**
|
||||
* @param regen The combat health regen per second
|
||||
*/
|
||||
public void setCombatRegen(int regen);
|
||||
|
||||
/**
|
||||
* @return Returns the health regen per second when not in combat
|
||||
*/
|
||||
public int getHealthRegen();
|
||||
|
||||
/**
|
||||
* @param regen The health regen per second when not in combat
|
||||
*/
|
||||
public void setHealthRegen(int regen);
|
||||
|
||||
public long getAge();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.util.DamageSource;
|
||||
|
||||
public interface IDamageSource {
|
||||
String getType();
|
||||
|
||||
boolean isProjectile();
|
||||
|
||||
IEntity getTrueSource();
|
||||
|
||||
IEntity getImmediateSource();
|
||||
|
||||
DamageSource getMCDamageSource();
|
||||
}
|
||||
@@ -0,0 +1,311 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by FernFlower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
|
||||
public interface IEntity<T extends Entity> {
|
||||
/**
|
||||
* @param directory The particle's directory. Use only forward slashes when writing a directory. Example: "customnpcs:textures/particle/tail.png"
|
||||
* @param HEXcolor The particle's color as a HEX integer
|
||||
* @param amount The amount of particles to spawn
|
||||
* @param maxAge The particle's maximum age in MC ticks
|
||||
|
||||
* @param x The particle's x position
|
||||
* @param y The particle's y position
|
||||
* @param z The particle's z position
|
||||
|
||||
* @param motionX The particle's speed in the x axis
|
||||
* @param motionY The particle's speed in the y axis
|
||||
* @param motionZ The particle's speed in the z axis
|
||||
* @param gravity The particle's gravity
|
||||
|
||||
* @param scale1 The particle's starting scale
|
||||
* @param scale2 The particle's ending scale
|
||||
* @param scaleRate Multiplier for the particle's scale growth rate
|
||||
* @param scaleRateStart The time at which the particle begins growing/shrinking
|
||||
|
||||
* @param alpha1 The particle's starting transparency
|
||||
* @param alpha2 The particle's ending transparency
|
||||
* @param scaleRate Multiplier for the particle's transparency growth rate
|
||||
* @param alphaRateStart The time at which the particle begins appearing/fading
|
||||
*/
|
||||
public void spawnParticle(String directory, int HEXcolor, int amount, int maxAge,
|
||||
double x, double y, double z,
|
||||
double motionX, double motionY, double motionZ, float gravity,
|
||||
float scale1, float scale2, float scaleRate, int scaleRateStart,
|
||||
float alpha1, float alpha2, float alphaRate, int alphaRateStart
|
||||
);
|
||||
|
||||
public double getYOffset();
|
||||
|
||||
/**
|
||||
* @return The entities width
|
||||
*/
|
||||
public double getWidth();
|
||||
|
||||
/**
|
||||
* @return The entities height
|
||||
*/
|
||||
public double getHeight();
|
||||
|
||||
/**
|
||||
* @return The entities x position
|
||||
*/
|
||||
public double getX();
|
||||
|
||||
/**
|
||||
* @param x The entities x position
|
||||
*/
|
||||
public void setX(double x);
|
||||
|
||||
/**
|
||||
* @return The entities y position
|
||||
*/
|
||||
public double getY();
|
||||
|
||||
/**
|
||||
* @param y The entities y position
|
||||
*/
|
||||
public void setY(double y);
|
||||
|
||||
/**
|
||||
* @return The entities x position
|
||||
*/
|
||||
public double getZ();
|
||||
|
||||
/**
|
||||
* @param z The entities x position
|
||||
*/
|
||||
public void setZ(double z);
|
||||
|
||||
/**
|
||||
* @return The block x position
|
||||
*/
|
||||
public int getBlockX();
|
||||
|
||||
/**
|
||||
* @return The block y position
|
||||
*/
|
||||
public int getBlockY();
|
||||
|
||||
/**
|
||||
* @return The block z position
|
||||
*/
|
||||
public int getBlockZ();
|
||||
|
||||
/**
|
||||
* @param x The x position
|
||||
* @param y The y position
|
||||
* @param z The z position
|
||||
*/
|
||||
public void setPosition(double x, double y, double z);
|
||||
|
||||
|
||||
/**
|
||||
* @param range The search range for entities around this entity
|
||||
* @return Array of entities within range
|
||||
*/
|
||||
public ScriptEntity[] getSurroundingEntities(int range);
|
||||
|
||||
/**
|
||||
* @param range The search range for entities around this entity
|
||||
* @param type The EntityType you want to find
|
||||
* @return Array of entities within range
|
||||
*/
|
||||
public ScriptEntity[] getSurroundingEntities(int range, int type);
|
||||
|
||||
/**
|
||||
* @return Whether the entity is alive or not
|
||||
*/
|
||||
public boolean isAlive();
|
||||
|
||||
/**
|
||||
* @param key Get temp data for this key
|
||||
* @return Returns the stored temp data
|
||||
*/
|
||||
public Object getTempData(String key);
|
||||
|
||||
/**
|
||||
* Tempdata gets cleared when the entity gets unloaded or the world restarts
|
||||
* @param key The key for the data stored
|
||||
* @param value The data stored
|
||||
*/
|
||||
public void setTempData(String key, Object value);
|
||||
|
||||
/**
|
||||
* @param key The key thats going to be tested against the temp data
|
||||
* @return Whether or not temp data containes the key
|
||||
*/
|
||||
public boolean hasTempData(String key);
|
||||
|
||||
/**
|
||||
* @param key The key for the temp data to be removed
|
||||
*/
|
||||
public void removeTempData(String key);
|
||||
|
||||
/**
|
||||
* Remove all tempdata
|
||||
*/
|
||||
public void clearTempData();
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be returned
|
||||
* @return Returns the stored data
|
||||
*/
|
||||
public Object getStoredData(String key);
|
||||
|
||||
/**
|
||||
* Stored data persists through world restart. Unlike tempdata only Strings and Numbers can be saved
|
||||
* @param key The key for the data stored
|
||||
* @param value The data stored. This data can be either a Number or a String. Other data is not stored
|
||||
*/
|
||||
public void setStoredData(String key, Object value);
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be checked
|
||||
* @return Returns whether or not the stored data contains the key
|
||||
*/
|
||||
public boolean hasStoredData(String key);
|
||||
|
||||
/**
|
||||
* @param key The key of the data to be removed
|
||||
*/
|
||||
public void removeStoredData(String key);
|
||||
|
||||
/**
|
||||
* Remove all stored data
|
||||
*/
|
||||
public void clearStoredData();
|
||||
|
||||
/**
|
||||
* @return The age of this entity in ticks
|
||||
*/
|
||||
public long getAge();
|
||||
|
||||
/**
|
||||
* Despawns this entity. Removes it permanently
|
||||
*/
|
||||
public void despawn();
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in water
|
||||
*/
|
||||
public boolean inWater();
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in lava
|
||||
*/
|
||||
public boolean inLava();
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is standing in fire
|
||||
*/
|
||||
public boolean inFire();
|
||||
|
||||
/**
|
||||
* @return Return whether or not this entity is on fire
|
||||
*/
|
||||
public boolean isBurning();
|
||||
|
||||
/**
|
||||
* @param ticks Amount of world ticks this entity will burn. 20 ticks equals 1 second
|
||||
*/
|
||||
public void setBurning(int ticks);
|
||||
|
||||
/**
|
||||
* Removes fire from this entity
|
||||
*/
|
||||
public void extinguish();
|
||||
|
||||
/**
|
||||
* @return Name as which it's registered in minecraft
|
||||
*/
|
||||
public String getTypeName();
|
||||
|
||||
/**
|
||||
* @param item Item to be dropped
|
||||
*/
|
||||
public void dropItem(ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* @return Return the rider
|
||||
*/
|
||||
public ScriptEntity getRider();
|
||||
|
||||
/**
|
||||
* @param entity The entity to ride this entity
|
||||
*/
|
||||
public void setRider(ScriptEntity entity);
|
||||
|
||||
/**
|
||||
* @return Return the entity, this entity is riding
|
||||
*/
|
||||
public ScriptEntity getMount();
|
||||
|
||||
/**
|
||||
* @param entity The entity this entity will mount
|
||||
*/
|
||||
public void setMount(ScriptEntity entity);
|
||||
|
||||
/**
|
||||
* @see noppes.npcs.scripted.constants.EntityType
|
||||
* @return Returns the EntityType of this entity
|
||||
*/
|
||||
public int getType();
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @param type @EntityType to check
|
||||
* @return Returns whether the entity is type of the given @EntityType
|
||||
*/
|
||||
public boolean typeOf(int type);
|
||||
|
||||
/**
|
||||
* @param rotation The rotation to be set (0-360)
|
||||
*/
|
||||
public void setRotation(float rotation);
|
||||
|
||||
/**
|
||||
* @return Current rotation of the npc
|
||||
*/
|
||||
public float getRotation();
|
||||
|
||||
/**
|
||||
* @param power How strong the knockback is
|
||||
* @param direction The direction in which he flies back (0-360). Usually based on getRotation()
|
||||
*/
|
||||
public void knockback(int power, float direction);
|
||||
|
||||
public void knockback(int xpower, int ypower, int zpower, float direction);
|
||||
|
||||
public void setImmune(int ticks);
|
||||
|
||||
public boolean hasCollided();
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @return Returns whether or not this entity is sneaking
|
||||
*/
|
||||
public boolean isSneaking();
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @return Returns whether or not this entity is sprinting
|
||||
*/
|
||||
public boolean isSprinting();
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* Expert users only
|
||||
* @return Returns minecrafts entity
|
||||
*/
|
||||
public T getMCEntity();
|
||||
|
||||
void storeAsClone(int tab, String name);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
|
||||
public interface IEntityLiving<T extends EntityLiving> extends IEntityLivingBase<T> {
|
||||
boolean isNavigating();
|
||||
|
||||
void clearNavigation();
|
||||
|
||||
void navigateTo(double var1, double var3, double var5, double var7);
|
||||
|
||||
T getMCEntity();
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import noppes.npcs.scripted.entity.ScriptEntity;
|
||||
import noppes.npcs.scripted.ScriptItemStack;
|
||||
import noppes.npcs.scripted.entity.ScriptLivingBase;
|
||||
|
||||
public interface IEntityLivingBase<T extends EntityLivingBase> extends IEntity<T> {
|
||||
/**
|
||||
* @return The entity's current health
|
||||
*/
|
||||
public float getHealth();
|
||||
|
||||
/**
|
||||
* @param health The new health of this entity
|
||||
*/
|
||||
public void setHealth(float health);
|
||||
|
||||
/**
|
||||
* @return Entity's max health
|
||||
*/
|
||||
public float getMaxHealth();
|
||||
/**
|
||||
* @return Whether or not this entity is attacking something
|
||||
*/
|
||||
public boolean isAttacking();
|
||||
|
||||
/**
|
||||
* @param living Entity which this entity will attack
|
||||
*/
|
||||
public void setAttackTarget(ScriptLivingBase living);
|
||||
|
||||
/**
|
||||
* @return The entity which this entity is attacking
|
||||
*/
|
||||
public ScriptLivingBase getAttackTarget();
|
||||
|
||||
public int getType();
|
||||
|
||||
public boolean typeOf(int type);
|
||||
|
||||
/**
|
||||
* @param entity Entity to check
|
||||
* @return Whether or not this entity can see the given entity
|
||||
*/
|
||||
public boolean canSeeEntity(ScriptEntity entity);
|
||||
|
||||
/**
|
||||
* Expert use only
|
||||
* @return Returns the minecraft entity object
|
||||
*/
|
||||
public T getMCEntity();
|
||||
|
||||
/**
|
||||
* Makes the entity swing its hand
|
||||
*/
|
||||
public void swingHand();
|
||||
|
||||
/**
|
||||
* Works the same as the <a href="http://minecraft.gamepedia.com/Commands#effect">/effect command</a>
|
||||
* @param effect
|
||||
* @param duration The duration in seconds
|
||||
* @param strength The amplifier of the potion effect
|
||||
* @param hideParticles Whether or not you want to hide potion particles
|
||||
*/
|
||||
public void addPotionEffect(int effect, int duration, int strength, boolean hideParticles);
|
||||
|
||||
/**
|
||||
* Clears all potion effects
|
||||
*/
|
||||
public void clearPotionEffects();
|
||||
|
||||
/**
|
||||
* @since 1.7.10c
|
||||
* @param effect Potion effect to check
|
||||
* @return Returns -1 if its not active. Otherwise returns the strenght of the potion
|
||||
*/
|
||||
public int getPotionEffect(int effect);
|
||||
|
||||
/**
|
||||
* Note not all Living Entities support this
|
||||
* @since 1.7.10c
|
||||
* @return The item the entity is holding
|
||||
*/
|
||||
public ScriptItemStack getHeldItem();
|
||||
|
||||
/**
|
||||
* Note not all Living Entities support this
|
||||
* @since 1.7.10c
|
||||
* @param item The item to be set
|
||||
*/
|
||||
public void setHeldItem(ScriptItemStack item);
|
||||
|
||||
/**
|
||||
* Note not all Living Entities support this
|
||||
* @param slot Slot of what armor piece to get, 0:boots, 1:pants, 2:body, 3:head
|
||||
* @return The item in the given slot
|
||||
*/
|
||||
public ScriptItemStack getArmor(int slot);
|
||||
|
||||
/**
|
||||
* Note not all Living Entities support this
|
||||
* @since 1.7.10c
|
||||
* @param slot Slot of what armor piece to set, 0:boots, 1:pants, 2:body, 3:head
|
||||
* @param item Item to be set
|
||||
*/
|
||||
public void setArmor(int slot, ScriptItemStack item);
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IItemStack {
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* @return Returns the stacksize
|
||||
*/
|
||||
public int getStackSize();
|
||||
|
||||
/**
|
||||
* @return Return whether or not the item has a custom name
|
||||
*/
|
||||
public boolean hasCustomName();
|
||||
|
||||
/**
|
||||
* @param name The custom name this item will get
|
||||
*/
|
||||
public void setCustomName(String name);
|
||||
|
||||
/**
|
||||
* @return Return the ingame displayed name. This is either the item name or the custom name if it has one.
|
||||
*/
|
||||
public String getDisplayName();
|
||||
|
||||
/**
|
||||
* @return Get the items ingame name. Use this incase the item ingame has custom name and you want the original name.
|
||||
*/
|
||||
public String getItemName();
|
||||
|
||||
/**
|
||||
* @param size The size of the itemstack. A number between 1 and 64
|
||||
*/
|
||||
public void setStackSize(int size);
|
||||
|
||||
/**
|
||||
* @return Returns the item damage of this item. For tools this is the durability for other items the color and more.
|
||||
*/
|
||||
public int getItemDamage();
|
||||
|
||||
/**
|
||||
* @param value The value to be set as item damage. For tools this is the durability for other items the color and more.
|
||||
*/
|
||||
public void setItemDamage(int value);
|
||||
|
||||
/**
|
||||
* @param key The key of this NBTTag
|
||||
* @param value The value to be stored. Can be a Number or String
|
||||
*/
|
||||
public void setTag(String key, Object value);
|
||||
|
||||
/**
|
||||
* @param key The key of the NBTTag
|
||||
* @return Returns whether or not the key exists
|
||||
*/
|
||||
public boolean hasTag(String key);
|
||||
|
||||
/**
|
||||
* @param key The key of the NBTTag
|
||||
* @return Returns the value associated with the key. Returns null of it doesnt exist
|
||||
*/
|
||||
public Object getTag(String key);
|
||||
|
||||
public boolean isEnchanted();
|
||||
|
||||
/**
|
||||
* @since 1.7.10d
|
||||
* @param id The enchantment id
|
||||
* @return
|
||||
*/
|
||||
public boolean hasEnchant(int id);
|
||||
|
||||
/**
|
||||
* @since 1.7.10d
|
||||
* @return Returns whether this item is a book
|
||||
*/
|
||||
public boolean isWrittenBook();
|
||||
|
||||
/**
|
||||
* @since 1.7.10d
|
||||
* @return Returns the books title
|
||||
*/
|
||||
public String getBookTitle();
|
||||
|
||||
/**
|
||||
* @since 1.7.10d
|
||||
* @return Returns the books author
|
||||
*/
|
||||
public String getBookAuthor();
|
||||
|
||||
/**
|
||||
* @since 1.7.10d
|
||||
* @return If the item is a book, returns a string array with book pages
|
||||
*/
|
||||
public String[] getBookText();
|
||||
|
||||
/**
|
||||
* @return Returns whether or not this item is a block
|
||||
*/
|
||||
public boolean isBlock();
|
||||
|
||||
public INbt getNbt();
|
||||
|
||||
public INbt getItemNbt();
|
||||
|
||||
/**
|
||||
* No support is given for this method. Dont use if you dont know what you are doing.
|
||||
* @return Minecraft ItemStack
|
||||
*/
|
||||
public ItemStack getMCItemStack();
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.entity.monster.EntityMob;
|
||||
|
||||
public interface IMonster<T extends EntityMob> extends IEntityLiving<T> {
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
//
|
||||
// Source code recreated from a .class file by IntelliJ IDEA
|
||||
// (powered by Fernflower decompiler)
|
||||
//
|
||||
|
||||
package noppes.npcs.scripted.interfaces;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public interface INbt {
|
||||
void remove(String var1);
|
||||
|
||||
boolean has(String var1);
|
||||
|
||||
boolean getBoolean(String var1);
|
||||
|
||||
void setBoolean(String var1, boolean var2);
|
||||
|
||||
short getShort(String var1);
|
||||
|
||||
void setShort(String var1, short var2);
|
||||
|
||||
int getInteger(String var1);
|
||||
|
||||
void setInteger(String var1, int var2);
|
||||
|
||||
byte getByte(String var1);
|
||||
|
||||
void setByte(String var1, byte var2);
|
||||
|
||||
long getLong(String var1);
|
||||
|
||||
void setLong(String var1, long var2);
|
||||
|
||||
double getDouble(String var1);
|
||||
|
||||
void setDouble(String var1, double var2);
|
||||
|
||||
float getFloat(String var1);
|
||||
|
||||
void setFloat(String var1, float var2);
|
||||
|
||||
String getString(String var1);
|
||||
|
||||
void setString(String var1, String var2);
|
||||
|
||||
byte[] getByteArray(String var1);
|
||||
|
||||
void setByteArray(String var1, byte[] var2);
|
||||
|
||||
int[] getIntegerArray(String var1);
|
||||
|
||||
void setIntegerArray(String var1, int[] var2);
|
||||
|
||||
Object[] getList(String var1, int var2);
|
||||
|
||||
int getListType(String var1);
|
||||
|
||||
void setList(String var1, Object[] var2);
|
||||
|
||||
INbt getCompound(String var1);
|
||||
|
||||
void setCompound(String var1, INbt var2);
|
||||
|
||||
String[] getKeys();
|
||||
|
||||
int getType(String var1);
|
||||
|
||||
NBTTagCompound getMCNBT();
|
||||
|
||||
String toJsonString();
|
||||
|
||||
boolean isEqual(INbt var1);
|
||||
|
||||
void clear();
|
||||
}
|
||||
Loaded 100 of 117 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user