Help me with this please....

fa1thDEV

Heir
Customer
I create this mods, the same from "ItemFakeAppaerance.clas" but without condition of the chest, but not working for me :(


JavaScript:
package services;

import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import l2.gameserver.Config;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.listener.actor.player.OnPlayerEnterListener;
import l2.gameserver.listener.inventory.OnDisplayListener;
import l2.gameserver.listener.inventory.OnEquipListener;
import l2.gameserver.model.Playable;
import l2.gameserver.model.Player;
import l2.gameserver.model.actor.listener.PlayerListenerList;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.model.items.ItemInstance;
import l2.gameserver.model.items.PcInventory;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;
import l2.gameserver.utils.ItemFunctions;
import org.apache.commons.lang3.tuple.Pair;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ItemFake implements OnPlayerEnterListener, ScriptFile {
    private static final Logger logger = LoggerFactory.getLogger(ItemFake.class);
    private static final ItemFake instance = new ItemFake();
    private static final File configFile;
    private static Map<Integer, Map<Integer, Integer>> fakeAppearanceConfig;

    public ItemFake() {
    }

    private Pair<Boolean, Map<Integer, Map<Integer, Integer>>> loadConfig() {
        try {
            SAXReader reader = new SAXReader(true);
            Document document = reader.read(configFile);
            Element rootElement = document.getRootElement();
            if (!"list".equalsIgnoreCase(rootElement.getName())) {
                throw new RuntimeException();
            } else if (!Boolean.parseBoolean(rootElement.attributeValue("enabled", "false"))) {
                return Pair.of(Boolean.FALSE, Collections.emptyMap());
            } else {
                HashMap<Integer, Map<Integer, Integer>> configMap = new HashMap<>();
                Iterator<Element> itemIterator = rootElement.elementIterator();

                while (itemIterator.hasNext()) {
                    Element itemElement = itemIterator.next();
                    if ("item".equalsIgnoreCase(itemElement.getName())) {
                        int itemId = Integer.parseInt(itemElement.attributeValue("itemId"));
                        HashMap<Integer, Integer> appearanceMap = new HashMap<>();
                        Iterator<Element> displayIterator = itemElement.elementIterator();

                        while (displayIterator.hasNext()) {
                            Element displayElement = displayIterator.next();
                            if ("display".equalsIgnoreCase(displayElement.getName())) {
                                int displayItemId = Integer.parseInt(displayElement.attributeValue("itemId"));
                                ItemTemplate itemTemplate = ItemHolder.getInstance().getTemplate(displayItemId);
                                int paperdollIndex = ItemFunctions.getPaperdollIndex(itemTemplate.getBodyPart());
                                appearanceMap.put(paperdollIndex, itemTemplate.getItemId());
                            }
                        }

                        configMap.put(itemId, appearanceMap);
                    }
                }

                return Pair.of(Boolean.TRUE, configMap);
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return Pair.of(Boolean.FALSE, Collections.emptyMap());
        }
    }

    public void onLoad() {
        Pair<Boolean, Map<Integer, Map<Integer, Integer>>> configResult = instance.loadConfig();
        if (!configResult.getLeft()) {
            fakeAppearanceConfig.clear();
            logger.info("ItemFake: Disabled.");
        } else if (configResult.getRight().isEmpty()) {
            fakeAppearanceConfig.clear();
            logger.info("ItemFake: No item(s). Disabled.");
        } else {
            fakeAppearanceConfig = configResult.getRight();
            logger.info("ItemFake: Loaded " + fakeAppearanceConfig.size() + " item(s) appearance.");
            PlayerListenerList.addGlobal(instance);
        }
    }

    public void onReload() {
        this.onShutdown();
        this.onLoad();
    }

    public void onShutdown() {
        PlayerListenerList.removeGlobal(instance);
    }

    public void onPlayerEnter(Player player) {
        if (!fakeAppearanceConfig.isEmpty()) {
            player.getInventory().addListener(new ItemFakeEquipListener());

            for (ItemInstance itemInstance : player.getInventory().getPaperdollItems()) {
                if (itemInstance != null && fakeAppearanceConfig.containsKey(itemInstance.getItemId()) && this.applyFakeAppearance(player, itemInstance.getItemId())) {
                    return;
                }
            }
        }
    }

    private boolean applyFakeAppearance(Player player, int itemId) {
        Map<Integer, Integer> appearanceMap = fakeAppearanceConfig.get(itemId);
        if (appearanceMap != null && !appearanceMap.isEmpty()) {
            player.getInventory().setOnDisplayListener(new ItemFakeDisplayListener(appearanceMap));
            return true;
        } else {
            return false;
        }
    }

    private boolean removeFakeAppearance(Player player) {
        if (player.getInventory().getOnDisplayListener() == null) {
            return false;
        } else {
            player.getInventory().setOnDisplayListener(null);
            return true;
        }
    }

    static {
        configFile = new File(Config.DATAPACK_ROOT, "data/item_fake.xml");
        fakeAppearanceConfig = new HashMap<>();
    }

    private static class ItemFakeDisplayListener implements OnDisplayListener {
        private final Map<Integer, Integer> appearanceMap;

        private ItemFakeDisplayListener(Map<Integer, Integer> appearanceMap) {
            this.appearanceMap = appearanceMap;
        }

        public Integer onDisplay(int paperdollSlot, ItemInstance itemInstance, Playable playable) {
            return this.appearanceMap.get(paperdollSlot);
        }
    }

    private static final class ItemFakeEquipListener implements OnEquipListener {
        private ItemFakeEquipListener() {
        }

        public void onEquip(int slot, ItemInstance equippedItem, Playable playable) {
            Player player = playable.getPlayer();
            if (equippedItem != null && player != null) {
                int itemId = equippedItem.getItemId();
                PcInventory playerInventory = player.getInventory();
                Map<Integer, Integer> fakeAppearanceMap = fakeAppearanceConfig.get(itemId);
                if (fakeAppearanceMap != null && !fakeAppearanceMap.isEmpty()) {
                    ((Inventory) playerInventory).writeLock();
                    try {
                        // Aplica la apariencia falsa sin desequipar los ítems actuales
                        ItemFake.instance.applyFakeAppearance(player, itemId);
                        player.sendUserInfo(true);
                    } catch (Exception exception) {
                        exception.printStackTrace();
                    } finally {
                        ((Inventory) playerInventory).writeUnlock();
                    }
                }
            }
        }

        public void onUnequip(int slot, ItemInstance unequippedItem, Playable playable) {
            Player player = playable.getPlayer();
            if (unequippedItem != null && player != null) {
                int itemId = unequippedItem.getItemId();
                PcInventory playerInventory = player.getInventory();
                Map<Integer, Integer> fakeAppearanceMap = fakeAppearanceConfig.get(itemId);
                if (fakeAppearanceMap != null && !fakeAppearanceMap.isEmpty()) {
                    ((Inventory) playerInventory).writeLock();
                    LinkedHashMap<Integer, ItemInstance> itemsToUnEquip = new LinkedHashMap<>();

                    try {
                        for (Integer paperdollSlot : fakeAppearanceMap.keySet()) {
                            ItemInstance paperdollItem = ((Inventory) playerInventory).getPaperdollItem(paperdollSlot);
                            if (paperdollItem != null && paperdollItem != unequippedItem) {
                                itemsToUnEquip.put(paperdollSlot, paperdollItem);
                            }
                        }

                        for (ItemInstance itemToUnEquip : itemsToUnEquip.values()) {
                            ((Inventory) playerInventory).unEquipItem(itemToUnEquip);
                        }

                        ItemFake.instance.removeFakeAppearance(player);
                        player.sendUserInfo(true);
                    } catch (Exception exception) {
                        exception.printStackTrace();
                    } finally {
                        for (ItemInstance itemToEquip : itemsToUnEquip.values()) {
                            ((Inventory) playerInventory).equipItem(itemToEquip);
                        }

                        ((Inventory) playerInventory).writeUnlock();
                    }
                }
            }
        }
    }
}
 
Back
Top