Last active
July 19, 2018 02:34
-
-
Save joserobjr/a8410c7418681990b290750ff9b36f6b to your computer and use it in GitHub Desktop.
Impedir que jogadores alterem baús
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.inventory.InventoryClickEvent; | |
import org.bukkit.event.inventory.InventoryDragEvent; | |
import org.bukkit.event.inventory.InventoryType; | |
import org.bukkit.plugin.java.JavaPlugin; | |
public class NoChestForYouJavaPlugin extends JavaPlugin implements Listener { | |
@Override | |
public void onEnable() { | |
getServer().getPluginManager().registerEvents(this, this); | |
} | |
/** | |
* Impede que o jogador altere baús clicando ou trocando com atalhos de teclado. | |
*/ | |
@EventHandler(ignoreCancelled = true) | |
public void onInventoryClick(InventoryClickEvent event) { | |
if (event.getView().getTopInventory().getType() != InventoryType.CHEST) { | |
return; | |
} | |
// Forma completa e mais segura em atualizações. Se uma action nova for adicionada ela é recusada. | |
switch (event.getAction()) { | |
// Nada foi alterado, clicou no vazio com nada no ponteiro. | |
case NOTHING: | |
break; | |
// Moveu de um inventário para outro, cancelar. | |
case MOVE_TO_OTHER_INVENTORY: | |
case HOTBAR_SWAP: | |
event.setCancelled(true); | |
break; | |
// Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia | |
// Isso não altera o inventário de cima (baú no caso) | |
case CLONE_STACK: | |
case COLLECT_TO_CURSOR: | |
event.setCancelled(false); | |
break; | |
// Indefinido, melhor rejeitar | |
case UNKNOWN: | |
event.setCancelled(true); | |
break; | |
// Todos esses aqui são alterações com clique, verificar se o slot clicado faz parte do inventário de cima | |
// Se for o inventário de baixo então o jogador está mexendo no próprio inventário e não no baú | |
case PICKUP_ALL: | |
case PICKUP_SOME: | |
case PICKUP_HALF: | |
case PICKUP_ONE: | |
case PLACE_ALL: | |
case PLACE_SOME: | |
case PLACE_ONE: | |
case SWAP_WITH_CURSOR: | |
case DROP_ALL_CURSOR: | |
case DROP_ONE_CURSOR: | |
case DROP_ALL_SLOT: | |
case DROP_ONE_SLOT: | |
case HOTBAR_MOVE_AND_READD: | |
event.setCancelled(event.getClickedInventory().equals(event.getView().getTopInventory())); | |
break; | |
default: | |
event.setCancelled(true); | |
break; | |
} | |
// Forma resumida mas precisa ser revisada em novas versões Bukkit caso [InventoryAction] seja alterado. | |
/*switch (event.getAction()) { | |
// Moveu de um inventário para outro, cancelar. | |
case MOVE_TO_OTHER_INVENTORY: | |
case HOTBAR_SWAP: | |
event.setCancelled(true); | |
break; | |
// Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia | |
// Isso não altera o inventário de cima (baú no caso) | |
case CLONE_STACK: | |
case COLLECT_TO_CURSOR: | |
case NOTHING: | |
event.setCancelled(false); | |
break; | |
// Indefinido, melhor rejeitar | |
case UNKNOWN: | |
event.setCancelled(true); | |
break; | |
default: | |
event.setCancelled(event.getClickedInventory().equals(event.getView().getTopInventory())); | |
break; | |
}*/ | |
} | |
/** | |
* Impede que jogadores alterem baús arrastando o item na mão em no inventário. | |
*/ | |
@EventHandler(ignoreCancelled = true) | |
public void onInventoryDrag(InventoryDragEvent event) { | |
// O número do primeiro slot (raw) do inventário de baixo é sempre o tamanho do inventário de cima. | |
int primeiroSlotInventorioDeBaixo = event.getView().getTopInventory().getSize(); | |
// Cancelar se alterar algum slot do inventário de cima. | |
event.setCancelled(event.getRawSlots().stream().anyMatch(slot-> slot >= primeiroSlotInventorioDeBaixo)); | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package exemplo | |
import org.bukkit.event.EventHandler | |
import org.bukkit.event.Listener | |
import org.bukkit.event.inventory.InventoryAction | |
import org.bukkit.event.inventory.InventoryAction.* | |
import org.bukkit.event.inventory.InventoryClickEvent | |
import org.bukkit.event.inventory.InventoryDragEvent | |
import org.bukkit.event.inventory.InventoryType | |
import org.bukkit.plugin.java.JavaPlugin | |
class NoChestForYouPlugin: JavaPlugin(), Listener { | |
override fun onEnable() { | |
server.pluginManager.registerEvents(this, this) | |
} | |
/** | |
* Impede que o jogador altere baús clicando ou trocando com atalhos de teclado. | |
*/ | |
@EventHandler(ignoreCancelled = true) | |
fun onInventoryClick(event: InventoryClickEvent) { | |
if (event.view.topInventory.type != InventoryType.CHEST) { | |
return | |
} | |
// Forma completa e mais segura em atualizações. Se uma action nova for adicionada ela é recusada. | |
event.isCancelled = when (checkNotNull(event.action)) { | |
// Nada foi alterado, clicou no vazio com nada no ponteiro. | |
NOTHING -> false | |
// Moveu de um inventário para outro, cancelar. | |
MOVE_TO_OTHER_INVENTORY, HOTBAR_SWAP -> true | |
// Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia | |
// Isso não altera o inventário de cima (baú no caso) | |
CLONE_STACK, COLLECT_TO_CURSOR -> false | |
// Indefinido, melhor rejeitar | |
UNKNOWN -> true | |
// Todos esses aqui são alterações com clique, verificar se o slot clicado faz parte do inventário de cima | |
// Se for o inventário de baixo então o jogador está mexendo no próprio inventário e não no baú | |
PICKUP_ALL, PICKUP_SOME, PICKUP_HALF, PICKUP_ONE, | |
PLACE_ALL, PLACE_SOME, PLACE_ONE, | |
SWAP_WITH_CURSOR, | |
DROP_ALL_CURSOR, DROP_ONE_CURSOR, | |
DROP_ALL_SLOT, DROP_ONE_SLOT, | |
HOTBAR_MOVE_AND_READD -> event.clickedInventory == event.view.topInventory | |
// Em caso de | |
else -> true | |
} | |
// Forma resumida mas precisa ser revisada em novas versões Bukkit caso [InventoryAction] seja alterado. | |
/*event.isCancelled = when(checkNotNull(event.action)) { | |
// Moveu de um inventário para outro, cancelar. | |
MOVE_TO_OTHER_INVENTORY, HOTBAR_SWAP -> true | |
// Copiou no modo criativo ou selecionou com o botão do meio no modo sobrevivencia | |
// Isso não altera o inventário de cima (baú no caso) | |
CLONE_STACK, COLLECT_TO_CURSOR, NOTHING -> false | |
// Indefinido, melhor rejeitar | |
UNKNOWN -> true | |
// Só sobrou as alterações com clique. Verificar se o slot clicado faz parte do inventário de cima | |
// Se for o inventário de baixo então o jogador está mexendo no próprio inventário e não no baú | |
else -> event.clickedInventory == event.view.topInventory | |
}*/ | |
} | |
/** | |
* Impede que jogadores alterem baús arrastando o item na mão em no inventário. | |
*/ | |
@EventHandler(ignoreCancelled = true) | |
fun onInventoryDrag(event: InventoryDragEvent) { | |
// O número do primeiro slot (raw) do inventário de baixo é sempre o tamanho do inventário de cima. | |
val primeiroSlotInventorioDeBaixo = event.view.topInventory.size | |
// Cancelar se alterar algum slot do inventário de cima. | |
event.isCancelled = event.rawSlots.any { slot-> slot >= primeiroSlotInventorioDeBaixo } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment