You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

1

Sunday, July 12th 2015, 12:08pm

Verhindern das Spieler sehen das man in eine Chest schaut

Hey Leute ich versuch grad ein Event zu schreiben das wenn man in eine Chest schaut das Event gecancelt wird und das so geöffnet wird ohne das man sieht das es sich öffnet (Inv manuell öffnen).



Problem: Inventar öffnet sich nicht, kiste öffnet sich normal ;(
In der Konsole gibt es keine Fehler
Leider hab ich damit nicht so viel gearbeitet und weiß nun nicht was hier falsch ist:


Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	@EventHandler
	public void onPlayerInteract(PlayerInteractEvent e) {

	    if(e.getAction() == Action.RIGHT_CLICK_BLOCK) {

	        Block block = e.getClickedBlock();

	        if(block.getType() == Material.CHEST) {
	        
	        	BlockState state = block.getState();

                chest = (Chest) block.getLocation().getBlock().getState();
   
                
	         
                	e.getPlayer().openInventory(chest.getInventory());

	e.setCancelled(true);
	       
	        }
	    }

	}
	

Rincewind34

User / Kunde

Posts: 112

  • Send private message

2

Sunday, July 12th 2015, 12:10pm

Kannst du mal versuchen zu debugen? Also so ansich würde ich das genauso machen xD. Vlt kommt es ja garnicht zur Zeile 16

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

3

Sunday, July 12th 2015, 12:12pm

OKay ich debug mal :)

Thx für deine Hilfe

xlson

User / Kunde

  • "xlson" is male

Posts: 513

  • Send private message

4

Sunday, July 12th 2015, 12:15pm

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	@EventHandler
	public void onInteract(PlayerInteractEvent e){
		Player p = e.getPlayer();
		if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
			if(p.getInventory().getItemInHand().getType() == Material.CHEST){
				e.setCancelled(true);
				
				
				
				
				//DEINE FUNKTION
				
				
				
				
			}
		}
	}

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

5

Sunday, July 12th 2015, 12:19pm

Debug ergebniss :


Source code

1
2
3
4
5
6
[12:18:53 INFO]: [DEBUG] Zeile 8 IF CHEST erfolgreich ausgeführt Ergebnis == true
[12:18:53 INFO]: [DEBUG] Zeile 10 BlockState state = block.getState(); erfolgreich ausgeführt!
[12:18:53 INFO]: [DEBUG] Zeile 12 Block zur Chest gecastet Ergebnis:org.bukkit.craftbukkit.v1_8_R3.block.CraftChest@84b406ad
[12:18:53 INFO]: [DEBUG] Zeile 16 Inventar wird geöffnet...
[12:18:53 INFO]: [DEBUG] Zeile 16 Inventar wurde geöffnet
[12:18:53 INFO]: [DEBUG] Zeile 17 Event Gecanncelt!



@xlson du hast es falsch verstanden ich will wenn man rechts auf die chest klickt und nicht das man rechts mit einer chest klickt :)

xlson

User / Kunde

  • "xlson" is male

Posts: 513

  • Send private message

6

Sunday, July 12th 2015, 12:28pm

@Benjamin2000
Dann probier es mal so aus :)

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	@EventHandler
	public void onInteract(PlayerInteractEvent e){
		Player p = e.getPlayer();
		if( e.getAction() == Action.RIGHT_CLICK_BLOCK){
			if(p.getInventory().getItemInHand().getType() == Material.CHEST){
				e.setCancelled(true);
				
				Inventory chest = Bukkit.createInventory(null, 27,
				
				
				//INENTAR
				
				
				p.openInventory(chest);
				
			}
		}
	}

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

7

Sunday, July 12th 2015, 12:30pm

@ xlson

Das geht auch nicht da ich ja schon das richtige Inventar der Chest öffnen will :D

xlson

User / Kunde

  • "xlson" is male

Posts: 513

  • Send private message

8

Sunday, July 12th 2015, 12:36pm

Das geht auch nicht da ich ja schon das richtige Inventar der Chest öffnen will

Achso :D

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

9

Sunday, July 12th 2015, 12:53pm

# Brauch pls nochmal ne antwort :)

Keiner ne idee?

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

10

Sunday, July 12th 2015, 2:19pm

Du kannst versuchen das Packet BlockAction mit ProtocolLib abzufangen und zu canceln, dann hast du beim klicken darauf das Inventar geöffnet, da aber das Packet zerstört wurde sollte die Animation nicht kommen.

Das sollte dir helfen: http://wiki.vg/Protocol#Block_Action
https://bukkit.org/threads/how-to-stop-t…a-chest.331847/

Im PlayerInteractEvent die Kiste in eine List eintragen, mit ProtocolLib das BlockAction Packet abfangen, die Location und das Material des Blockes überprüfen ob es deine Kiste ist die du angeklickt hast und dann canceln und die Kiste wieder removen.
Der 1. Byte des Packets muss 1 sein, der 2. Byte des Packets muss 1 sein wenn die Kiste gerade geöffnet wird.
Ist jetzt nur eine Idee und ungetestet.

Benjamin2000

User / Kunde

  • "Benjamin2000" started this thread

Posts: 65

  • Send private message

11

Sunday, July 12th 2015, 2:48pm

geht es nicht auch ohne protocol lib

Anno35

User / Kunde

Posts: 1,223

Thanks: 3

  • Send private message

12

Sunday, July 12th 2015, 3:08pm

So wie ich es finde ist ProtocolLib die einfachste Variante das zu verwirklichen, ich hab es gerade mal getestet und es funktioniert.

evoluteyt

User / Kunde

  • "evoluteyt" is male

Posts: 133

Location: Hess'n

  • Send private message

13

Friday, July 17th 2015, 4:27pm

Schonmal verushct mit

Source code

1
ItemStack[] cont = chest.getContens()
? (oder so Ähnlich ^^)
Dann einfach mit

Source code

1
Inventory inv = null, Bukkit.createInventory[...], inv.addContens(cont)

LG Daniel
LG Daniel (: :chinese:

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net

Similar threads