dimanche 31 janvier 2021

how to modify the index of a private static final array that is in another class

Ive been trying everything online and have yet to find it. Heres my code. Please tell me what to fix Im so confused.

private void loadProtectionEnchant() {
    
    int protectionID = 0;
    
    try {
        Field id = net.minecraft.server.v1_8_R3.Enchantment.class.getDeclaredField("byId");
        Field protEnchant = Enchantment.class.getDeclaredField("PROTECTION_ENVIRONMENTAL");
        
        id.setAccessible(true);
        protEnchant.setAccessible(true);
        
         Object[] byID = (Object[]) id.get(null);
        byID[protectionID] = null;
        
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(id, id.getModifiers() & ~Modifier.FINAL & ~Modifier.PRIVATE);
        id.setAccessible(true);
        System.out.println(byID.toString());
        
        System.out.println(id.toString());
        
        id.set(null, byID);
        protEnchant.set(null, new CustomProtectionEnchantment(protectionID, new MinecraftKey("protection"), 10, 0));
        
    } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
        e.printStackTrace();
    }
    
    System.out.println(Enchantment.PROTECTION_ENVIRONMENTAL.toString());
    
}

and heres my error java.lang.IllegalAccessException: Can not set static final [Lnet.minecraft.server.v1_8_R3.Enchantment; field net.minecraft.server.v1_8_R3.Enchantment.byId to [Lnet.minecraft.server.v1_8_R3.Enchantment;

Please tell me if u know whats wrong TY.





Aucun commentaire:

Enregistrer un commentaire