[1.6.4] Модификация классов IC [часть 2]

Статус
В этой теме нельзя размещать новые ответы.
675
2
Доброго времени суток.

Такие дела:
Я декомпилю IC, подключаю его чистую deobf-версию без цифровых подписей к проекту в качестве бибилиотеки, беру декомпильнутый класс и ложу его в папочку src, сохраняя путь(например ic2.core.item.tool).

Для начала взял класс ItemToolMeter, дабы вынести оттуда весь на данный момент не работающий код и вывести сообщение, мол "не работает пока":
Код:
public class ItemToolMeter extends ItemIC2 implements IBoxable {

   public ItemToolMeter(Configuration config, InternalName internalName) {
      super(config, internalName);
      super.maxStackSize = 1;
      this.setMaxDamage(0);
   }

   public boolean onItemUseFirst(ItemStack itemstack, EntityPlayer entityplayer, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
       if(!world.isRemote) {
           EntityPlayer player = (EntityPlayer) entityplayer;
           player.addChatMessage(I18n.getString("message.bug.MEtr"));
       }
       return false;
   }

   public boolean canBeStoredInToolbox(ItemStack itemstack) {
      return true;
   }
}

В эклипсе все работает, но после копиляции и последующего добавления потроганых классов в джарник IC, опять же без подписей, я получаю ошибки по полям суперклассов, аля:
Код:
cpw.mods.fml.common.LoaderException: java.lang.NoSuchFieldError: maxStackSize
    at cpw.mods.fml.common.LoadController.transition(LoadController.java:156)
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:523)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:183)
    at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:474)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:817)
    at net.minecraft.client.main.Main.main(SourceFile:101)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.launcher.ub.<init>(Unknown Source)
    at net.launcher.kb.run(Unknown Source)
    at net.launcher.gb.b(Unknown Source)
    at net.launcher.gb$1.run(Unknown Source)
Caused by: java.lang.NoSuchFieldError: maxStackSize
    at ic2.core.item.tool.ItemToolMeter.<init>(ItemToolMeter.java:29)
    at ic2.core.IC2.load(IC2.java:833)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:545)
    at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
    at com.google.common.eventbus.EventBus.post(EventBus.java:267)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:201)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:181)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
    at com.google.common.eventbus.EventBus.post(EventBus.java:267)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:112)
    at cpw.mods.fml.common.Loader.loadMods(Loader.java:522)
    ... 18 more

Не могу понять, почему так. Есть идеи?
 
2,955
12
может надо писать setMaxStackSize(1) вместо super.maxStackSize = 1;
А вообще его легко можно сделать работающим. Как то так;
public boolean onItemUseFirst(ItemStack itemstack, EntityPlayer entityplayer, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
if(world.hasTileEntityAt(x, y, z)) {
if(world.getBlockTileEntityAt(x, y, z) instanceof IElecticalTile) {
player.addChatMessage(((IElectricalTile)world.getBlockTileEntityAt(x, y, z)).getEuInput() //чет такое //+ "EU/t");
}
}
return true;
}
 
675
2
Dragon2488 написал(а):
может надо писать setMaxStackSize(1) вместо super.maxStackSize = 1;
А вообще его легко можно сделать работающим. Как то так;
  public boolean onItemUseFirst(ItemStack itemstack, EntityPlayer entityplayer, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
      if(world.hasTileEntityAt(x, y, z)) {
           if(world.getBlockTileEntityAt(x, y, z) instanceof IElecticalTile) {
          player.addChatMessage(((IElectricalTile)world.getBlockTileEntityAt(x, y, z)).getEuInput() //чет такое //+ "EU/t");
      }
}
      return true;
  }
Неа, на руведре мне подсказали кой-чо, попозже проверю.
В оригинале там в 6 раз больше кода и инфы, но я попробую, спасибо.
 
771
5
Такой вопросик не в тему:
Чем отличается onItemUseFirst от onItemUse?
 

timaxa007

Модератор
5,831
409
672
Majestic написал(а):
Такой вопросик не в тему:
Чем отличается onItemUseFirst от onItemUse?
На сколько помню:
onItemUse - ванильный метод,
onItemUseFirst - добавленный Forge'ем,
И отличается тем.. Ну к примеру:
onItemUse ты можно отрывать GUI какого нибудь блока, а при onItemUseFirst делается что написано в onItemUseFirst. Я не знаю как тебе ещё написать, приоритет такой у него. "Когда предмет используется, прежде блок активируется."
 
675
2
Dragon2488 написал(а):
может надо писать setMaxStackSize(1) вместо super.maxStackSize = 1;
А вообще его легко можно сделать работающим. Как то так;
  public boolean onItemUseFirst(ItemStack itemstack, EntityPlayer entityplayer, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
      if(world.hasTileEntityAt(x, y, z)) {
           if(world.getBlockTileEntityAt(x, y, z) instanceof IElecticalTile) {
          player.addChatMessage(((IElectricalTile)world.getBlockTileEntityAt(x, y, z)).getEuInput() //чет такое //+ "EU/t");
      }
}
      return true;
  }
Там все через хитро-мудрую EnergyNet делается, а вот она как раз таки в 1.6 сделана на половину и не без косяков. Геттера, похожего на getEuInput я не нашел.
 
675
2
Нужно так же доставать и компилировать суперклассы. В данном случае ItemIC2.
Можно закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху