creatureSetter Cannot find symbol

Discussion in 'Plugin Development' started by tappestry, Mar 11, 2016.

Thread Status:
Not open for further replies.
  1. Offline

    tappestry

    Anyone have any idea what would be causing a cannot find symbol with creatureSetter?
    Now I have tried a static string variable but this causes issues with writing to the map...

    Heres the code..

    Code:
     public class MobNameToEntityMapper
           
    {
       private static final Map<String, EntityType> CREATURES = Collections.unmodifiableMap(creatureSetter);
      
      {
        Map creatureSetter = new HashMap();
         creatureSetter.put("creeper", EntityType.CREEPER);
         creatureSetter.put("zombie", EntityType.ZOMBIE);
        creatureSetter.put("giant", EntityType.GIANT);
         creatureSetter.put("skeleton", EntityType.SKELETON);
         creatureSetter.put("skele", EntityType.SKELETON);
        creatureSetter.put("pigzombie", EntityType.PIG_ZOMBIE);
         creatureSetter.put("wither", EntityType.WITHER);
        creatureSetter.put("dragon", EntityType.ENDER_DRAGON);
       creatureSetter.put("enderdragon", EntityType.ENDER_DRAGON);
        creatureSetter.put("enderman", EntityType.ENDERMAN);
       creatureSetter.put("ghast", EntityType.GHAST);
        creatureSetter.put("slime", EntityType.SLIME);
         creatureSetter.put("spider", EntityType.SPIDER);
        creatureSetter.put("cavespider", EntityType.CAVE_SPIDER);
        creatureSetter.put("witch", EntityType.WITCH);
       }
       public EntityType getEntityTypeByCreatureName(String name)
       {
         return (EntityType)CREATURES.get(name.toLowerCase());
      }
    }
     
  2. Offline

    HoeMC

    You need to include type parameters in the Map declaration for creatureSetter, i.e. Map<Type,Type>.
     
    Last edited: Mar 11, 2016
  3. Offline

    tappestry

    See I tried that already and still the same cannot find symbol. Currently I have the error gone BUT what I did was this and I have a feelings it is going to break the code...
    Code:
     public class MobNameToEntityMapper
    {
      private static final Map<String, EntityType> CREATURES = Collections.unmodifiableMap(creatureSetter);
    
      public EntityType getEntityTypeByCreatureName(String name)
      {
        return (EntityType)CREATURES.get(name.toLowerCase());
      }
    
      static 
      {
        Map<String, EntityType> creatureSetter = new HashMap();
        creatureSetter.put("creeper", EntityType.CREEPER);
        creatureSetter.put("zombie", EntityType.ZOMBIE);
        creatureSetter.put("giant", EntityType.GIANT);
        creatureSetter.put("skeleton", EntityType.SKELETON);
        creatureSetter.put("skele", EntityType.SKELETON);
        creatureSetter.put("pigzombie", EntityType.PIG_ZOMBIE);
        creatureSetter.put("wither", EntityType.WITHER);
        creatureSetter.put("dragon", EntityType.ENDER_DRAGON);
        creatureSetter.put("enderdragon", EntityType.ENDER_DRAGON);
        creatureSetter.put("enderman", EntityType.ENDERMAN);
        creatureSetter.put("ghast", EntityType.GHAST);
        creatureSetter.put("slime", EntityType.SLIME);
        creatureSetter.put("spider", EntityType.SPIDER);
        creatureSetter.put("cavespider", EntityType.CAVE_SPIDER);
        creatureSetter.put("witch", EntityType.WITCH);
      }
    }
    
    So I changed the Collections.unmodifiableMap(creatureSetter); to Collection.EMPTYMAP
     
    Last edited: Mar 12, 2016
  4. Offline

    I Al Istannen

    @tappestry
    Maybe it is because you first declare and intialize the CREATURES Map and AFTER that the map used in the constructor of CREATURES.

    At line 4 the variable creatureSetter isn't known. It gets introduced in line 13.
    Also you are declaring the "creatureSetter" map inside of an instruction? (only know the german name) block, so it is just available inside the curled brackets.

    You will have to declare the creatureSetter as a field, ABOVE the CREATURES map and then intialize it in a static block.

    And your CREATURES map doesn't need to be unmodifiable, which will save you a lot of the hassle. Just keep it private and never write to it. You have full control over that.
     
  5. Offline

    tappestry

    I figured this out, I had to add a statis private delcaration for the Map creatureSetters.
     
Thread Status:
Not open for further replies.

Share This Page