Merge pull request #13 from c0508383/master

Scripting Update Approved
This commit is contained in:
Kamron Vaswani authored and GitHub committed 2021-11-26 04:06:37 -05:00
commit edabe3890f
117 files changed
+8726 -440

No files matched your search

+86
View File
@@ -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>
+3
View File
@@ -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;
+36 -18
View File
@@ -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;
}
}
+36
View File
@@ -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;
+12 -9
View File
@@ -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)
+313
View File
@@ -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;
}
}
+11 -11
View File
@@ -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;
}
}
}
+58 -7
View File
@@ -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);
}
}*/
}
+137 -109
View File
@@ -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;
}
}
@@ -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);
}
@@ -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);
}
}
}
@@ -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;
}
@@ -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;
}
@@ -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);
}
@@ -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;
}
}
@@ -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;
}
@@ -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,4 +1,4 @@
package noppes.npcs.scripted;
package noppes.npcs.scripted.event;
public
class ScriptEvent{
@@ -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{
@@ -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;
}
}
@@ -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{
@@ -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