我是java的新手,但我尝试为游戏Lineage2编写脚本。
下载代码:
package ZergZ.ZTeleport;
import javolution.util.FastMap;
import com.l2jserver.Config;
import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.handler.VoicedCommandHandler;
public class ZTeleport implements IVoicedCommandHandler
{
private static final String[] VOICED_COMMANDS =
{
"teleport"
};
@Override
public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
{
if (activeChar == null)
return false;
if (params.equalsIgnoreCase("aden"))
{
activeChar.teleToLocation(147736,-56243,-2781);
}
if (params.equalsIgnoreCase("gracia"))
{
activeChar.teleToLocation(-186742,244167,2675);
}
if (params.equalsIgnoreCase("pvp1"))
{
activeChar.teleToLocation(147736,-56243,-2781);
}
if (params.equalsIgnoreCase("pvp2"))
{
activeChar.teleToLocation(179337,221937,4475);
}
}
@Override
public String[] getVoicedCommandList()
{
return VOICED_COMMANDS;
}
}
当服务器启动java时说:
1. \ ZTeleport.java中的错误(第17行)
包ZergZ.ZTeleport;
^^^^^^^^^^^^^^^^^^^^
ZergZ.ZTeleport包与类型
该脚本位于ZergZ / ZTeleport.java
我会给你另一个工作正常的脚本:
package custom.HeroCirclet;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
public class HeroCirclet extends Quest
{
______
}
感谢。
答案 0 :(得分:2)
这是因为你在ZergZ包中有一个名为ZTeleport
的类和一个名为ZergZ.ZTeleport
的包。
package
名称基本上是Java文件所在的项目目录。
这意味着如果ZTeleport.java
位于ZergZ
目录中,则包名称为
package ZergZ;
您没有在包声明上指定类名,并且目录由.
而不是目录文件夹标记分隔。
答案 1 :(得分:2)
你说“脚本位于ZergZ / ZTeleport.java”。这意味着类ZTeleport
属于包ZergZ
。但是您已声明它属于另一个包ZergZ.ZTeleport
。
在你的第二个例子中,我敢打赌源文件位于custom / HeroCirclet / HeroCirclet.java中,它与包声明匹配,并且不会产生命名冲突。
您需要将源文件(人们通常不会将java源文件“脚本”,btw)调用到与其声明的包匹配的目录中,或者更改包声明以匹配其位置。
答案 2 :(得分:1)
此处的冲突位于您的包名和您的类名之间,它们是相同的。如果你坚持通常的命名约定(用起始小写命名你的包,用起始大写字母命名你的类),你应该避免这种情况。
答案 3 :(得分:0)
您应遵循Java命名约定。将您的包裹更改为:
package zergZ.zTeleport; // all name is begin with lower
// no change, but for clearer : all class name should begin with higher character
public class ZTeleport implements IVoicedCommandHandler
{
}
在那之后,当然,您应该刷新或/并重建您的项目,看它是否有效。
希望这有帮助:)
答案 4 :(得分:0)
如果你看到它说的错误......
package ZergZ.ZTeleport;
^^^^^^^^^^^^^^^^^^^^
The package ZergZ.ZTeleport collides with a type
所以基本上你已经在命名类和包的方式之间产生了冲突。如果你坚持使用java约定,你可以将它们命名为:
// Notice the first character of package name is small character
package zergZ.zTeleport;
// Class Name's first character is capital.
public class ZTeleport implements IVoicedCommandHandler{
..
}