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

MarcSenpai

User / Kunde

  • "MarcSenpai" is male
  • "MarcSenpai" started this thread

Posts: 138

Location: Clover

Occupation: Schüler

  • Send private message

1

Sunday, April 15th 2018, 1:32pm

Einfaches Perk Plugin programmieren

Perk Plugin programmieren
Also wir wollen heute ein einfaches Perk plugin programmieren,
wir wollen wenn wir /perk eingeben ein Inventare geöffnet wird, in dem man Effekte an und aus schalten kann.
Ich werde alles in der Main Klasse machen, ihr könnt es auch einzelnd machen.
Zuerst erstellen wir das Kommand.

Source code

1
2
if(cmd.getName().equalsIgnoreCase("perk")){
}

dann müssen wir das Inventar erstellen

Source code

1
2
3
4
if(cmd.getName().equalsIgnoreCase("perk")){
	    		
	    		Inventory inve =  Bukkit.createInventory(null, 9*3, "§l§6§lPerks");
}

Dieses Inventar hat nun den Namen Perks und ist 9*3 groß.
Nun müssen wir aber noch sagen, was wir in dem Inventar haben wollen,
ich mache mal Speed, also packe ich einen Keks, einen Grünen Banner und einen Roten Banner hinein.

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
25
26
if(cmd.getName().equalsIgnoreCase("perk")){
	    		
	    		Inventory inve =  Bukkit.createInventory(null, 9*3, "§l§6§lPerks");
ItemStack item = new ItemStack(Material.COOKIE); 
							ItemMeta imeta = item.getItemMeta();
							imeta.setDisplayName("§1Speed");
							item.setItemMeta(imeta);
							inve.setItem(11, item);
							
							ItemStack iitem = new ItemStack(Material.BANNER, 1,(short) 1); 
							ItemMeta iimeta = iitem.getItemMeta();
							iimeta.setDisplayName("§4Deaktivieren");
							List<String> dea = new ArrayList<>();
							dea.add("§6Deaktiviert den Speed Effekt!");
							iimeta.setLore(dea);
							iitem.setItemMeta(iimeta);
							inve.setItem(20, iitem);
							
							ItemStack iiitem1 = new ItemStack(Material.BANNER, 1,(short) 10); 
							ItemMeta iiimeta1 = iiitem1.getItemMeta();
							iiimeta1.setDisplayName("§2Aktivieren");
							List<String> akt = new ArrayList<>();
							akt.add("§6Aktiviert den Speed Effekt!");
							iiimeta1.setLore(akt);
							iiitem1.setItemMeta(iiimeta1);
							inve.setItem(2, iiitem1);

Jetzt erklärt.
Zuerst machen wir uns ein ItemStack, dann geben wir ihm eine ItemMeta
ItemMeta sind sowas wie "Options" sie geben den z.B. den namen an.
Dann geben wir ihm dem Displaynamen: "Deaktivieren",
also nächsten müssen wir noch eine "Lore" adden damit, wenn wir mehrere
Effekte haben nicht immer alle Effekte an und aus gehen.

Source code

1
2
3
 List<String> akt = new ArrayList<>();
							akt.add("§6Aktiviert den Speed Effekt!");
							iiimeta1.setLore(akt);

Zu erklärung: Zuerst erstellen wir eine ArrayList, darin adden wir
"§6Aktiviert den Speed Effekt!" und die ArrayList adden
wir dann auf unsere ItemMeta.
Zum schluss setzen wir einfach noch die ItemMeta auf das ItemStack, und fügen das Item in unser Inventar ein.
Nochmal zur Wiederholung:

Source code

1
2
3
4
5
6
7
8
ItemStack [ItemStack.name]= new ItemStack(Material.[Material], 1,(short) 1); 
							ItemMeta [ItemMeta.name] = [ItemStack.name].getItemMeta();
							[IetmMeta.name].setDisplayName("§4[Display.name]");
							List<String> [ArrayList.name] = new ArrayList<>();
							[Arraylist.name].add("[Lore]");
						   [ItemMeta.name].setLore([Lore(ArrayList).name]);
							[ItemStack.name].setItemMeta([IetmMeta.name]);
							[Inventory.name].setItem([]Ort stell wo item liegen soll, [Itemstack.name]);

Jetzt müssen wir dem Spieler nurnoch das Inevntar öffnen.

Source code

1
p.openInventory([Inevntory.name]);

Man kann auch noch Permissions vergeben oder die Argumente überprüfen lassen.
So jetzt wollen wir noch das man es nicht rausnehmen kann, und das man dann die Effekte bekommt.
Also machen wir jetzt entweder eine neue Klasse oder wir gehen zur vorletzten Klammer (Alles einzelnt oder alles in Main)
Dann holen wir uns unser Event, und Definieren erstmal den Spieler.

Source code

1
2
3
4
@EventHandler
		public void inventory(InventoryClickEvent e) {
			Player p = (Player) e.getWhoClicked();
}

Dann erstellen/holen wir uns das Inevntar

Source code

1
2
3
4
5
6
  Inventory inve =  Bukkit.createInventory(null, 9*3, "§l§6§lPerks");
		
		@EventHandler
		public void inventory11111(InventoryClickEvent e) {
			Player p = (Player) e.getWhoClicked();
}

Jetzt kopieren wir unsere Drei(oder mehr ich mache nur ein beispielt)ItemStack und fügen sie genau so ein.

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
25
26
27
28
29
30
31
32
33
34
 Inventory inve =  Bukkit.createInventory(null, 9*3, "§l§6§lPerks");
		
		@EventHandler
		public void inventory11111(InventoryClickEvent e) {
			Player p = (Player) e.getWhoClicked();
		
			
			
			
			
			ItemStack item = new ItemStack(Material.COOKIE); 
			ItemMeta imeta = item.getItemMeta();
			imeta.setDisplayName("§1Speed");
			item.setItemMeta(imeta);
			inve.setItem(11, item);
			
			ItemStack iitem = new ItemStack(Material.BANNER, 1,(short) 1); 
			ItemMeta iimeta = iitem.getItemMeta();
			iimeta.setDisplayName("§4Deaktivieren");
			List<String> dea = new ArrayList<>();
			dea.add("§6Deaktiviert den Speed Effekt!");
			iimeta.setLore(dea);
			iitem.setItemMeta(iimeta);
			inve.setItem(20, iitem);
			
			ItemStack iiitem1 = new ItemStack(Material.BANNER, 1,(short) 10); 
			ItemMeta iiimeta1 = iiitem1.getItemMeta();
			iiimeta1.setDisplayName("§2Aktivieren");
			List<String> akt = new ArrayList<>();
			akt.add("§6Aktiviert den Speed Effekt!");
			iiimeta1.setLore(akt);
			iiitem1.setItemMeta(iiimeta1);
			inve.setItem(2, iiitem1);
}

Dann wollen wir noch das er sich die sachen nicht rausnehmen kann.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 Inventory inve =  Bukkit.createInventory(null, 9*3, "§l§6§lPerks");
		
		@EventHandler
		public void inventory11111(InventoryClickEvent e) {
			Player p = (Player) e.getWhoClicked();
		
			
			
			
			
			ItemStack item = new ItemStack(Material.COOKIE); 
			ItemMeta imeta = item.getItemMeta();
			imeta.setDisplayName("§1Speed");
			item.setItemMeta(imeta);
			inve.setItem(11, item);
			
			ItemStack iitem = new ItemStack(Material.BANNER, 1,(short) 1); 
			ItemMeta iimeta = iitem.getItemMeta();
			iimeta.setDisplayName("§4Deaktivieren");
			List<String> dea = new ArrayList<>();
			dea.add("§6Deaktiviert den Speed Effekt!");
			iimeta.setLore(dea);
			iitem.setItemMeta(iimeta);
			inve.setItem(20, iitem);
			
			ItemStack iiitem1 = new ItemStack(Material.BANNER, 1,(short) 10); 
			ItemMeta iiimeta1 = iiitem1.getItemMeta();
			iiimeta1.setDisplayName("§2Aktivieren");
			List<String> akt = new ArrayList<>();
			akt.add("§6Aktiviert den Speed Effekt!");
			iiimeta1.setLore(akt);
			iiitem1.setItemMeta(iiimeta1);
			inve.setItem(2, iiitem1);
				
				if(e.getCurrentItem().getType() == Material.BANNER){
					e.setCancelled(true);
				}	
				if(e.getCurrentItem().getType() == Material.COOKIE) {
					e.setCancelled(true);	
				}

if(e.getCurrentItem() sagt einfach nur das wenn er auf das klickt.den typ gleich Cookie hat solle er das Event
Cancelln.
Aber wir wollen das, dass nur im Inevntar passiet also:

Source code

1
2
3
4
5
6
7
8
9
if(e.getInventory().getName().equalsIgnoreCase("§l§6§lPerks")) {

if(e.getCurrentItem().getType() == Material.BANNER){
					e.setCancelled(true);
				}	
				if(e.getCurrentItem().getType() == Material.COOKIE) {
					e.setCancelled(true);	
				}
}

Den Namen mit den Farbcodes! Und groß- und kleinschreibung beachten!
So jetzt wollen wir auch noch das wenn er auf das Grüne Banner klickt, er den Speed effekt bekommt also:

Source code

1
2
3
4
if(e.getCurrentItem().isSimilar(iiitem1)) {
				
					p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 99999, 2));	
				}

Es soll wieder nur im Perks inventar passieren:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(e.getInventory().getName().equalsIgnoreCase("§l§6§lPerks")) {

	   	 	if(e.getCurrentItem().getType() == Material.BANNER){
	   			 e.setCancelled(true);
	   		 }    
	   		 if(e.getCurrentItem().getType() == Material.COOKIE) {
	   			 e.setCancelled(true);    
	   		 }    		
				if(e.getCurrentItem().isSimilar(iiitem1)) {
				
					p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 99999, 2)); //erst zeit dann stärke.   
				}
				
			}

das gleiche jetzt zum removen:

Source code

1
2
3
4
5
6
7
8
if(e.getInventory().getName().equalsIgnoreCase("§l§6§lPerks")) {
				
		if(e.getCurrentItem().isSimilar(iitem)) {
					
					p.removePotionEffect(PotionEffectType.SPEED);
			
				}
				}

Nochmal mit annmerkungen:

Source code

1
2
3
4
5
6
7
8
if(e.getInventory().getName().equalsIgnoreCase("[Inventar.name]")) {
				
		if(e.getCurrentItem().isSimilar([ItemStack.name])) {
					
					p.removePotionEffect(PotionEffectType.SPEED);
			
				}
				}

Das müsst ihr jetzt einfach noch für alle weitern Effekte machen, und Fertig.
Bei Fragen/Falsch aussagungen bitte hier schreiben oder Privat anschreiben, ich versuche so schnell wie möglich
zu antworten oder zu überarbeiten.
Ich hoffe ich konnte euch helfen oder was beibringen :thinking:
MfG Marc_Senpai :thumbup:

Fertig sieht es so aus:

In der kürze liegt die Würze
- Shakespeares | Unitygaming-FastFelix

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

2

Sunday, April 15th 2018, 2:15pm

Sieht nicht schlecht aus! Bin es mal eben kurz überflogen.
Allerdings würde ich die Items nicht immer fast gleich nennen, so wie du es in dem Fall getan hast mit den ganzen Iiiiiiiiii's.

Am besten immer schon leicht in die Variabel bringen, was sie bewirkt.

z.b.: für deinen grünen Banner: greenBItem, oder halt irgendwie etwas um den wieder zu erkennen, ohne dass man nochmal oben im Code nachgucken muss.
Zudem entstehen auch nicht so leicht flüchtigkeitsfehler
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

MarcSenpai

User / Kunde

  • "MarcSenpai" is male
  • "MarcSenpai" started this thread

Posts: 138

Location: Clover

Occupation: Schüler

  • Send private message

3

Sunday, April 15th 2018, 3:44pm

Hast recht, deswegen habe ich auch sowas manchmal gemacht:

Spoiler Spoiler

Source code

1
2
3
4
5
6
7
8
if(e.getInventory().getName().equalsIgnoreCase("[Inventar.name]")) {
				
		if(e.getCurrentItem().isSimilar([ItemStack.name])) {
					
					p.removePotionEffect(PotionEffectType.SPEED);
			
				}
				}
In der kürze liegt die Würze
- Shakespeares | Unitygaming-FastFelix

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

4

Sunday, April 15th 2018, 9:39pm

Das hatte ich gesehen ^^, wollte ich dir nur mal sagen für deine Zukünftigen Plugins :)
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

MarcSenpai

User / Kunde

  • "MarcSenpai" is male
  • "MarcSenpai" started this thread

Posts: 138

Location: Clover

Occupation: Schüler

  • Send private message

5

Monday, April 16th 2018, 3:21pm

Sollte ich machen, aber ich habe programmieren von YT gelernt, und der Yt hat seine ItemStacks immer item genannt und als ich dann nicht mehr mit Yt programmiert habe , hatte ich es mir angeowhnt ItemStack irgendiwe item zu nennen
In der kürze liegt die Würze
- Shakespeares | Unitygaming-FastFelix

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

Similar threads