Minecraft Programmieren : Kiste öffnen richtig cancelln
Hallo Leute, ich programmiere gerade ein Minispiel. Wie in vielen Spielen blockt man auch das Kisten öffnen. (Außer natürlich bei Minispielen, wo Kisten etc... benötigt werden)... Ich habe mit dem InventoryOpenEvent probiert das Kisten öffnen zu verhindern:
@EventHandler
public void onInventoryOpen(InventoryOpenEvent e) {
if(e.getView().getType() != null) {
if(e.getView().getType() == InventoryType.CHEST) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.BEACON) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.BREWING) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.ANVIL) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.CRAFTING) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.DISPENSER) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.DROPPER) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.ENCHANTING) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.ENDER_CHEST) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.FURNACE) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.HOPPER) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.WORKBENCH) {
e.setCancelled(true);
}
if(e.getView().getType() == InventoryType.MERCHANT) {
e.setCancelled(true);
}
}
}
Das ganze funnktioniert relativ gut. Das Inventar wird geschlossen. Aber die Kiste bleibt offen... Zeit schließt sie sich wieder. Es sieht also so aus als würde ein Unsichtbarer die Kiste noch geöffnet haben.
Wie kann ich das unterbinden? Sodass die Kiste wie bei Gommehd.net auch zu bleibt?
2 Antworten
Du könntest versuchen, das öffnen der Truhe bereits bei einem früheren Event abzufangen - Hier wäre das zum Beispiel das PlayerInteractEvent. Das PlayerInteractEvent wird aufgerufen, wenn ein Spieler Links- oder Rechtsklickt. Hier müsstest du überprüfen, ob der entsprechende Block eine Truhe (oder ein anderer Block mit Inventar) ist und dann einfach das Event canceln.
MFG Nummer378
Hab es schon probiert, es aber nicht hinbekommen. Könntest du mir vielleicht einen Code Ausschnitt schicken?
Hier an alle der Code:
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {
Block block = e.getClickedBlock();
if(block.getType() == Material.CHEST) {
e.setCancelled(true);
}
}
}
Der funktioniert... Mfg Miki