Ir para conteúdo
  • 0

Dados.


Nome de Exibição

Pergunta

5 respostass a esta questão

Posts Recomendados

Eu encontrei um tópico que faz isso, porém o código já não se encontra disponivel.. achei uma versão dele mas muito antiga que pode nem funcionar.

 

 

package me.gervobis.AnvilGUI;
 
import java.util.HashMap;
 
import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.ChatMessage;
import net.minecraft.server.v1_8_R3.ContainerAnvil;
import net.minecraft.server.v1_8_R3.EntityHuman;
import net.minecraft.server.v1_8_R3.EntityPlayer;
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
 
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
 
/**
* Created by chasechocolate.
*/
public class AnvilGUI {
    private class AnvilContainer extends ContainerAnvil {
        public AnvilContainer(EntityHuman entity){
            super(entity.inventory, entity.world,new BlockPosition(0, 0, 0), entity);
        }
 
        @Override
        public boolean a(EntityHuman entityhuman){
            return true;
        }
    }
 
    public enum AnvilSlot {
        INPUT_LEFT(0),
        INPUT_RIGHT(1),
        OUTPUT(2);
 
        private int slot;
 
        private AnvilSlot(int slot){
            this.slot = slot;
        }
 
        public int getSlot(){
            return slot;
        }
 
        public static AnvilSlot bySlot(int slot){
            for(AnvilSlot anvilSlot : values()){
                if(anvilSlot.getSlot() == slot){
                    return anvilSlot;
                }
            }
 
            return null;
        }
    }
 
    public class AnvilClickEvent {
        private AnvilSlot slot;
 
        private String name;
 
        private boolean close = true;
        private boolean destroy = true;
 
        public AnvilClickEvent(AnvilSlot slot, String name){
            this.slot = slot;
            this.name = name;
        }
 
        public AnvilSlot getSlot(){
            return slot;
        }
 
        public String getName(){
            return name;
        }
 
        public boolean getWillClose(){
            return close;
        }
 
        public void setWillClose(boolean close){
            this.close = close;
        }
 
        public boolean getWillDestroy(){
            return destroy;
        }
 
        public void setWillDestroy(boolean destroy){
            this.destroy = destroy;
        }
    }
 
    public interface AnvilClickEventHandler {
        public void onAnvilClick(AnvilClickEvent event);
    }
 
    private Player player;
 
    private AnvilClickEventHandler handler;
 
    private HashMap<AnvilSlot, ItemStack> items = new HashMap<AnvilSlot, ItemStack>();
 
    private Inventory inv;
 
    private Listener listener;
 
    public AnvilGUI(Player player, final AnvilClickEventHandler handler){
        this.player = player;
        this.handler = handler;
 
        this.listener = new Listener(){
            @EventHandler
            public void onInventoryClick(InventoryClickEvent event){
                if(event.getWhoClicked() instanceof Player){
                    Player clicker = (Player) event.getWhoClicked();
 
                    if(event.getInventory().equals(inv)){
                        event.setCancelled(true);
 
                        ItemStack item = event.getCurrentItem();
                        int slot = event.getRawSlot();
                        String name = "";
 
                        if(item != null){
                            if(item.hasItemMeta()){
                                ItemMeta meta = item.getItemMeta();
 
                                if(meta.hasDisplayName()){
                                    name = meta.getDisplayName();
                                }
                            }
                        }
 
                        AnvilClickEvent clickEvent = new AnvilClickEvent(AnvilSlot.bySlot(slot), name);
 
                        handler.onAnvilClick(clickEvent);
 
                        if(clickEvent.getWillClose()){
                            event.getWhoClicked().closeInventory();
                        }
 
                        if(clickEvent.getWillDestroy()){
                            destroy();
                        }
                    }
                }
            }
 
            @EventHandler
            public void onInventoryClose(InventoryCloseEvent event){
                if(event.getPlayer() instanceof Player){
                    Player player = (Player) event.getPlayer();
                    Inventory inv = event.getInventory();
 
                    if(inv.equals(AnvilGUI.this.inv)){
                        inv.clear();
                        destroy();
                    }
                }
            }
 
            @EventHandler
            public void onPlayerQuit(PlayerQuitEvent event){
                if(event.getPlayer().equals(getPlayer())){
                    destroy();
                }
            }
        };
 
        Bukkit.getPluginManager().registerEvents(listener, Main.getInstance()); //Replace with instance of main class
    }
 
    public Player getPlayer(){
        return player;
    }
 
    public void setSlot(AnvilSlot slot, ItemStack item){
        items.put(slot, item);
    }
 
    public void open(){
        EntityPlayer p = ((CraftPlayer) player).getHandle();
 
        AnvilContainer container = new AnvilContainer(p);
 
        //Set the items to the items from the inventory given
        inv = container.getBukkitView().getTopInventory();
 
        for(AnvilSlot slot : items.keySet()){
            inv.setItem(slot.getSlot(), items.get(slot));
        }
 
        //Counter stuff that the game uses to keep track of inventories
        int c = p.nextContainerCounter();
 
        //Send the packet
        p.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing", new Object[]{}), 0));
 
        //Set their active container to the container
        p.activeContainer = container;
 
        //Set their active container window id to that counter stuff
        p.activeContainer.windowId = c;
 
        //Add the slot listener
        p.activeContainer.addSlotListener(p);
    }
 
    public void destroy(){
        player = null;
        handler = null;
        items = null;
 
        HandlerList.unregisterAll(listener);
 
        listener = null;
    }
} 

 

 

 

como usar

 

 

                        final Player player = event.getPlayer();
                        AnvilGUI gui = new AnvilGUI(player, new AnvilGUI.AnvilClickEventHandler() {
                               
                                @Override
                                public void onAnvilClick(AnvilClickEvent event) {
                                        if(event.getSlot() == AnvilGUI.AnvilSlot.OUTPUT){
                                                event.setWillClose(true);
                                                event.setWillDestroy(true);
                                                player.sendMessage(event.getName());
                                        }else{
                                                event.setWillClose(false);
                                                event.setWillDestroy(false);
                                        }
                                }
                        });
                       
                        ItemStack i = new ItemStack(Material.SKULL_ITEM,1,(short)3);
                        SkullMeta im = (SkullMeta)i.getItemMeta();
                        im.setDisplayName("Nick-Name");
                        im.setOwner(player.getName());
                        i.setItemMeta(im);
                       
                        gui.setSlot(AnvilGUI.AnvilSlot.INPUT_LEFT, i);
                       
                        gui.open(); 

 

 

 

Eu já precisei algo assim, e usei a placa e não uma bigorna.. se quiser a classe que eu usei só pedir.

Link para o comentário
Compartilhar em outros sites

Eu encontrei um tópico que faz isso, porém o código já não se encontra disponivel.. achei uma versão dele mas muito antiga que pode nem funcionar.

 

 

package me.gervobis.AnvilGUI;
 
import java.util.HashMap;
 
import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.ChatMessage;
import net.minecraft.server.v1_8_R3.ContainerAnvil;
import net.minecraft.server.v1_8_R3.EntityHuman;
import net.minecraft.server.v1_8_R3.EntityPlayer;
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
 
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
 
/**
* Created by chasechocolate.
*/
public class AnvilGUI {
    private class AnvilContainer extends ContainerAnvil {
        public AnvilContainer(EntityHuman entity){
            super(entity.inventory, entity.world,new BlockPosition(0, 0, 0), entity);
        }
 
        @Override
        public boolean a(EntityHuman entityhuman){
            return true;
        }
    }
 
    public enum AnvilSlot {
        INPUT_LEFT(0),
        INPUT_RIGHT(1),
        OUTPUT(2);
 
        private int slot;
 
        private AnvilSlot(int slot){
            this.slot = slot;
        }
 
        public int getSlot(){
            return slot;
        }
 
        public static AnvilSlot bySlot(int slot){
            for(AnvilSlot anvilSlot : values()){
                if(anvilSlot.getSlot() == slot){
                    return anvilSlot;
                }
            }
 
            return null;
        }
    }
 
    public class AnvilClickEvent {
        private AnvilSlot slot;
 
        private String name;
 
        private boolean close = true;
        private boolean destroy = true;
 
        public AnvilClickEvent(AnvilSlot slot, String name){
            this.slot = slot;
            this.name = name;
        }
 
        public AnvilSlot getSlot(){
            return slot;
        }
 
        public String getName(){
            return name;
        }
 
        public boolean getWillClose(){
            return close;
        }
 
        public void setWillClose(boolean close){
            this.close = close;
        }
 
        public boolean getWillDestroy(){
            return destroy;
        }
 
        public void setWillDestroy(boolean destroy){
            this.destroy = destroy;
        }
    }
 
    public interface AnvilClickEventHandler {
        public void onAnvilClick(AnvilClickEvent event);
    }
 
    private Player player;
 
    private AnvilClickEventHandler handler;
 
    private HashMap<AnvilSlot, ItemStack> items = new HashMap<AnvilSlot, ItemStack>();
 
    private Inventory inv;
 
    private Listener listener;
 
    public AnvilGUI(Player player, final AnvilClickEventHandler handler){
        this.player = player;
        this.handler = handler;
 
        this.listener = new Listener(){
            @EventHandler
            public void onInventoryClick(InventoryClickEvent event){
                if(event.getWhoClicked() instanceof Player){
                    Player clicker = (Player) event.getWhoClicked();
 
                    if(event.getInventory().equals(inv)){
                        event.setCancelled(true);
 
                        ItemStack item = event.getCurrentItem();
                        int slot = event.getRawSlot();
                        String name = "";
 
                        if(item != null){
                            if(item.hasItemMeta()){
                                ItemMeta meta = item.getItemMeta();
 
                                if(meta.hasDisplayName()){
                                    name = meta.getDisplayName();
                                }
                            }
                        }
 
                        AnvilClickEvent clickEvent = new AnvilClickEvent(AnvilSlot.bySlot(slot), name);
 
                        handler.onAnvilClick(clickEvent);
 
                        if(clickEvent.getWillClose()){
                            event.getWhoClicked().closeInventory();
                        }
 
                        if(clickEvent.getWillDestroy()){
                            destroy();
                        }
                    }
                }
            }
 
            @EventHandler
            public void onInventoryClose(InventoryCloseEvent event){
                if(event.getPlayer() instanceof Player){
                    Player player = (Player) event.getPlayer();
                    Inventory inv = event.getInventory();
 
                    if(inv.equals(AnvilGUI.this.inv)){
                        inv.clear();
                        destroy();
                    }
                }
            }
 
            @EventHandler
            public void onPlayerQuit(PlayerQuitEvent event){
                if(event.getPlayer().equals(getPlayer())){
                    destroy();
                }
            }
        };
 
        Bukkit.getPluginManager().registerEvents(listener, Main.getInstance()); //Replace with instance of main class
    }
 
    public Player getPlayer(){
        return player;
    }
 
    public void setSlot(AnvilSlot slot, ItemStack item){
        items.put(slot, item);
    }
 
    public void open(){
        EntityPlayer p = ((CraftPlayer) player).getHandle();
 
        AnvilContainer container = new AnvilContainer(p);
 
        //Set the items to the items from the inventory given
        inv = container.getBukkitView().getTopInventory();
 
        for(AnvilSlot slot : items.keySet()){
            inv.setItem(slot.getSlot(), items.get(slot));
        }
 
        //Counter stuff that the game uses to keep track of inventories
        int c = p.nextContainerCounter();
 
        //Send the packet
        p.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing", new Object[]{}), 0));
 
        //Set their active container to the container
        p.activeContainer = container;
 
        //Set their active container window id to that counter stuff
        p.activeContainer.windowId = c;
 
        //Add the slot listener
        p.activeContainer.addSlotListener(p);
    }
 
    public void destroy(){
        player = null;
        handler = null;
        items = null;
 
        HandlerList.unregisterAll(listener);
 
        listener = null;
    }
} 

 

 

 

como usar

 

 

                        final Player player = event.getPlayer();
                        AnvilGUI gui = new AnvilGUI(player, new AnvilGUI.AnvilClickEventHandler() {
                               
                                @Override
                                public void onAnvilClick(AnvilClickEvent event) {
                                        if(event.getSlot() == AnvilGUI.AnvilSlot.OUTPUT){
                                                event.setWillClose(true);
                                                event.setWillDestroy(true);
                                                player.sendMessage(event.getName());
                                        }else{
                                                event.setWillClose(false);
                                                event.setWillDestroy(false);
                                        }
                                }
                        });
                       
                        ItemStack i = new ItemStack(Material.SKULL_ITEM,1,(short)3);
                        SkullMeta im = (SkullMeta)i.getItemMeta();
                        im.setDisplayName("Nick-Name");
                        im.setOwner(player.getName());
                        i.setItemMeta(im);
                       
                        gui.setSlot(AnvilGUI.AnvilSlot.INPUT_LEFT, i);
                       
                        gui.open(); 

 

 

 

Eu já precisei algo assim, e usei a placa e não uma bigorna.. se quiser a classe que eu usei só pedir.

já tentei usar esse :(

,mas não server para oque eu preciso ;-;

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...