1

我已经搜索了两天,试图让 PyDev 识别我的外部 .JAR (为了保护它被混淆了),但是无论我做什么它都不想工作。我已经连续阅读了将近一个小时的文档,试图让它工作。

我正在帮助开发一个使用 Jython 进行脚本编写的仿真服务器。我可以编译和运行模拟服务器,但脚本工作得很好,但是不需要对服务器引擎部分内部的方法使用自动完成,这些方法在外部 .jar 中被混淆。这是一个脚本的示例代码,它使用来自混淆 .JAR 的方法(它不适用于自动完成,因此我必须浏览包资源管理器以找到我想要使用的方法):

import sys

def CreateStartingCharacter(core, object):

testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet())
testObject.setCustomName('This is a Jython Rifle')
testObject.setStringAttribute('crafter', 'Light')
inventory = object.getSlottedObject('inventory')
inventory.add(testObject)

testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet())
testClothing.setCustomName('Test Cape')
testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet())
testCloak.setCustomName('Test Cloak')

inventory.add(testClothing)
inventory.add(testCloak)

return

这个脚本在Java中通过如下命令执行(核心是外部JAR里面的类,经过混淆处理) core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", object);

对象是... CreatureObject object = (CreatureObject)core.objectService.createObject(sharedRaceTemplate, core.terrainService.getPlanetList().get(0));

就像我上面所说的,我在脚本中使用的所有这些方法都来自无法使用自动完成功能的模糊 JAR。但是,我可以使用该 JAR 中没有的方法,例如:

from resources.common import RadialOptions
from services.sui import SUIWindow
from services.sui.SUIWindow import Trigger
from java.util import Vector
import sys

def createRadial(core, owner, target, radials):
radials.clear()
bank = owner.getSlottedObject('bank')
if bank:
    radials.add(RadialOptions(0, 21, 1, ''))
    radials.add(RadialOptions(0, 7, 1, ''))
    radials.add(RadialOptions(1, RadialOptions.bankTransfer, 3, '@sui:bank_credits'))
    radials.add(RadialOptions(1, RadialOptions.bankitems, 3, '@sui:bank_items'))    
    if owner.getBankCredits() > 0:
        radials.add(RadialOptions(1, RadialOptions.bankWithdrawAll, 3, '@sui:bank_withdrawall'))
    if owner.getCashCredits() > 0:
        radials.add(RadialOptions(1, RadialOptions.bankDepositAll, 3, '@sui:bank_depositall'))

return

...并使用 RadialOptions。control+space 将向我展示所有方法。

帮助将不胜感激。在这一点上,我觉得它不起作用,因为 JAR 文件被混淆了或类似的东西。是的,我已经将它添加到我的 PYTHONPATH 并更新了解释器,就像我的项目的 bin 文件夹一样。

4

0 回答 0