[All] {UP} невозможно преобразовать Object в String

1,239
2
24
Вечер недобрый добрый.Ошибка в названии темы думаю понятна.Вот сам зловещий код:

Код:
        packet_handler = new XPacketHandeler();

        for (String channel : packet_handler.map.keySet()) {
            FMLEventChannel eventChannel = NetworkRegistry.INSTANCE
                    .newEventDrivenChannel(channel);
            eventChannel.register(packet_handler);
            packet_handler.channels.put(channel, eventChannel);
        }
А подчеркивает packet_handler.map.keySet. Потом я посмотрел и понял что проблема в классе XPacketHandeler в котором эти пакеты.Самостоятельно ошибку найти не удалось,надеюсь на вашу помощь 
Код:
public class XPacketHandeler {

   public Map map = new Hashtable();
   public Map channels = new Hashtable();


   public XPacketHandeler() {
      this.map.put("LD | CIA", new ConsumeInventoryAmmo()); 
      
      this.map.put("LD | PSP", new PlaySoundPacket());             
    
      this.map.put("LD | SI", new SyncInventory());
      this.map.put("LD | TPV", new ThirdPersonView());*/
      this.map.put("LD | WRP", new WeaponReloadPacket());
   
      this.map.put("LD | WRCP", new WeaponRecoilPacket());            
    
      this.map.put("LD | HMP", new HitMarkerPacket());
   
   }

   @SubscribeEvent
   public void onServerPacket(ServerCustomPacketEvent var1) {
      ((AbstractPacket)this.map.get(var1.packet.channel())).processServer(var1.packet.payload(), ((NetHandlerPlayServer)var1.handler).playerEntity);
   }

   @SubscribeEvent
   public void onClientPacket(ClientCustomPacketEvent var1) {
      ((AbstractPacket)this.map.get(var1.packet.channel())).processClient(var1.packet.payload(), Minecraft.getMinecraft().thePlayer);
   }

   @SideOnly(Side.CLIENT)
   private static EntityPlayer a() {
      return Minecraft.getMinecraft().thePlayer;
   }

   public void sendTo(FMLProxyPacket var1, EntityPlayerMP var2) {
      ((FMLEventChannel)this.channels.get(var1.channel())).sendTo(var1, var2);
   }

   public void sendPacketToServer(FMLProxyPacket var1) {
      ((FMLEventChannel)this.channels.get(var1.channel())).sendToServer(var1);
   }

   public void sendPacketAround(Entity var1, double var2, FMLProxyPacket var4) {
      ((FMLEventChannel)this.channels.get(var4.channel())).sendToAllAround(var4, new TargetPoint(var1.dimension, var1.posX, var1.posY, var1.posZ, var2));
   }

   public void sendPacketToAll(FMLProxyPacket var1) {
      ((FMLEventChannel)this.channels.get(var1.channel())).sendToAll(var1);
   }
}

Только давайте без всяких "фууу очередной дейз-мод" , "опять оружие,достали!" , я захотел сделать полноценное одно ружье с анимацией , звуком и не более.Увы, но тут я не знаю что делать
 
XuPuPG написал(а):
Только давайте без всяких "фууу очередной дейз-мод" , "опять оружие,достали!"....
Ок.Выкинь код LastDays и купи книгу по джаве.
[merge_posts_bbcode]Добавлено: 05.06.2015 21:17:47[/merge_posts_bbcode]

Почитай про генерики.
public Map<String,ЧоТоТам> map = new Hashtable<>();
 
В моем городе таких книг нет :(
Я так и не понял что делать
 
Охох,с интернета скачай
По поводу темы,ты не знаешь про генерики(не удивлен),поэтому в том цикле смело можешь кастить
 
То есть нужно преобразовать тип String в Object в ручную? Ну ок =/
 
называется "кастинг","приведение типов".У тебя 2 варианта-мапа или же кастинг
 
не мапа, а дженерики - тот же кастинг, только на уровне compile-time
 
Решил,всем спасибо.
 Iterator var4 = (packet_handler = new XPacketHandeler()).map.keySet().iterator();


 
     while(var4.hasNext()) {
          String var2 = (String)var4.next();
          FMLEventChannel var3;
          (var3 = NetworkRegistry.INSTANCE.newEventDrivenChannel(var2)).register(packet_handler);
          packet_handler.channels.put(var2, var3);

       } 
 
Ага,а ещё лучше преобразуй мапу в 2 листа,а те в массивы.
Человеческое решение в пару символов
Код:
   public Map<String,AbstractPacket> map = new Hashtable<>();
 
Возникла еще 1 проблема с которой я опять не смог справится,из за нее предмет не хочет иметь модельку
(так как я еще не умею добавлять модель очень большую и как то ее уменьшать до нормальных размеров в коде я взял этот способ с LastDays и очень пожалел)
 Класс на самом деле очень большой,поэтому я выложу главные моменты:
Статические переменные:
Код:
 private static String a = "null";
   private static ResourceLocation a1;
Код с проблемой:
Код:
   public boolean handleRenderType(ItemStack var1, ItemRenderType var2) {
      switch(a.a1[var2.ordinal()]) {
      case 1:
         return true;
      case 2:
         return true;
      case 3:
         return true;
      default:
         return false;
      }
   }
А подчеркивает a1 с ошибкой "a1 cannot be resolved or is not a field" 
Ошибки 2,строчки полностью одинаковые.
Эти case хранят в себе все рендеры.Вот весь класс http://pastebin.com/CNTLN35t
Из за это ошибки предметы не могут иметь модель которую я указываю(я так думаю)
 
Код:
a.a1
На сколько я понимаю, это не то что должно быть написано.
[merge_posts_bbcode]Добавлено: 07.06.2015 14:03:14[/merge_posts_bbcode]

Код:
a1[var2.ordinal()]
А, "a1" должен быть массивом.
 
Я неправильно уточнил, т.е. не должен быть массивом, сам код неправильно написан, по этому смысл написания кода какой-то не правильный. Может быть должно, что-то вроде этого (в нём больше смысла):
Код:
switch(var2.ordinal())
 
Просто код декомпилированный, хирург свое написать не может.
 
Либо пустой, либо нет не каких значений (т.е. равен значению null), по этому и крашнулся.
 
Код:
--- Minecraft Crash Report ----
// Quite honestly, I wouldn't worry myself about that.
Time: 07.06.15 15:53
Description: Rendering item
java.lang.ArrayIndexOutOfBoundsException: 1
at com.xupupg.api.GunRenderHandler.renderItem(GunRenderHandler.java:756)
at net.minecraftforge.client.ForgeHooksClient.renderInventoryItem(ForgeHooksClient.java:202)
at net.minecraft.client.renderer.entity.RenderItem.func_82406_b(RenderItem.java:563)
at net.minecraft.client.gui.inventory.GuiContainer.func_146977_a(GuiContainer.java:271)
at net.minecraft.client.gui.inventory.GuiContainer.func_73863_a(GuiContainer.java:99)
at net.minecraft.client.renderer.InventoryEffectRenderer.func_73863_a(InventoryEffectRenderer.java:38)
at net.minecraft.client.gui.inventory.GuiContainerCreative.func_73863_a(GuiContainerCreative.java:638)
at net.minecraft.client.renderer.EntityRenderer.func_78480_b(EntityRenderer.java:1061)
at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1001)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:898)
at net.minecraft.client.main.Main.main(SourceFile:148)
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:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)


756 строка:
Код:
if((var14 = (var7 = (EntityItem)var3[1]).getEntityItem().getTagCompound()) == null) {
 
Dragon2488 написал(а):

Dragon2488 - В чем проблема? У тебя личная неприязнь к Хирургу? В твоих сообщениях я не заметил желания помочь. Мы все здесь делаем одно - помогаем. Это и есть главная задача, вне зависимости от вида кода.
 
Просто я не понимаю, как можно писать такой код? Ну хорошо, даже если декомпилированный, надо подправить его для читабельности, а не сразу идти на форум и создавать темы.
[merge_posts_bbcode]Добавлено: 12.06.2015 16:28:05[/merge_posts_bbcode]

UPD: 
Все, что ниже - чистое предположение по 1 строчке кода.
А вообще, проблема очень легко решается.
XuPuPG написал(а):
if((var14 = (var7 = (EntityItem)var3[1]).getEntityItem().getTagCompound()) == null) {
Массив начинается с 0 индекса, то бишь индекс 0 - первый элемент. 
А в этом коде обращаются к элементу с индексом 1, а не 0.
 
Назад
Сверху