66import java .util .TreeMap ;
77import java .util .regex .Pattern ;
88
9- import org .apache .commons .lang .RandomStringUtils ;
109import org .apache .commons .lang .StringUtils ;
10+ import org .bukkit .Bukkit ;
1111import org .bukkit .ChatColor ;
1212import org .bukkit .Material ;
1313import org .bukkit .block .Block ;
1414import org .bukkit .block .CreatureSpawner ;
15+ import org .bukkit .block .Sign ;
1516import org .bukkit .entity .EntityType ;
1617import org .bukkit .entity .Player ;
1718import org .bukkit .event .EventHandler ;
1819import org .bukkit .event .EventPriority ;
1920import org .bukkit .event .block .BlockBreakEvent ;
2021import org .bukkit .event .block .BlockPlaceEvent ;
22+ import org .bukkit .event .block .SignChangeEvent ;
23+ import org .bukkit .event .player .PlayerInteractEvent ;
2124import org .bukkit .event .player .PlayerJoinEvent ;
2225import org .bukkit .inventory .ItemStack ;
2326import org .bukkit .inventory .meta .ItemMeta ;
2831import net .md_5 .bungee .api .chat .ComponentBuilder ;
2932import net .md_5 .bungee .api .chat .HoverEvent ;
3033import net .md_5 .bungee .api .chat .TextComponent ;
34+ import net .milkbowl .vault .economy .Economy ;
3135
3236public class Listener implements org .bukkit .event .Listener {
3337 Map <String , Integer > limit = new TreeMap <String , Integer >();
3438 SettingsManager sett = SettingsManager .getInstance ();
35- private Plugin plugin = Command .getPlugin (Command .class );
39+ private Plugin plugin = PickupSpawners .getPlugin (PickupSpawners .class );
3640 public static int breakedSpawners = 0 ;
37-
38- private Material material = Command .material ;
41+
42+ private Material material = PickupSpawners .material ;
3943
4044 public static String getLang (Player p ) {
4145 String [] s = StringUtils .split (p .spigot ().getLocale (), '_' );
@@ -45,7 +49,7 @@ public static String getLang(Player p) {
4549 public static String getLangExact (Player p ) {
4650
4751 return p .spigot ().getLocale ();
48-
52+
4953 }
5054
5155 public static TextComponent getHoverClick (String message , String hover , String click ) {
@@ -105,8 +109,11 @@ public void onSpawnerBreak(BlockBreakEvent e) {
105109 if (limit .containsKey (e .getPlayer ().getName ())) {
106110 if (limit .get (e .getPlayer ().getName ()) >= limitcount ) {
107111
108- e .getPlayer ().sendMessage (Language .getReplacedLocale (e .getPlayer (), LocalePath .LIMIT_REACH , "%limit%" , String .valueOf (limitcount )));
109- //e.getPlayer().sendMessage(lang.equals("hu")? "§cElérted a napi kiüthető spawner limitet (" + limitcount + ").": "§cYou have reached the daily spawner break limit (" + limitcount + ").");
112+ e .getPlayer ().sendMessage (Language .getReplacedLocale (e .getPlayer (), LocalePath .LIMIT_REACH ,
113+ "%limit%" , String .valueOf (limitcount )));
114+ // e.getPlayer().sendMessage(lang.equals("hu")? "§cElérted a napi kiüthető
115+ // spawner limitet (" + limitcount + ").": "§cYou have reached the daily spawner
116+ // break limit (" + limitcount + ").");
110117 e .setCancelled (true );
111118 return ;
112119 }
@@ -183,10 +190,14 @@ public void onSpawnerBreak(BlockBreakEvent e) {
183190 spawner .setItemMeta (swmeta );
184191
185192 s .getWorld ().dropItemNaturally (s .getLocation (), spawner );
186- e .getPlayer ().sendMessage (Language .getReplacedLocale (e .getPlayer (), LocalePath .BREAK , "%type%" , cs .getSpawnedType ().name ().toLowerCase ()));
187-
193+ e .getPlayer ().sendMessage (Language .getReplacedLocale (e .getPlayer (), LocalePath .BREAK , "%type%" ,
194+ cs .getSpawnedType ().name ().toLowerCase ()));
195+
188196 breakedSpawners ++;
189- // e.getPlayer().sendMessage(lang.equals("hu")? "§7Kiütöttél egy §e" + cs.getSpawnedType().name().toLowerCase() + " §7spawnert!" : "§7You have broken out one §e" + cs.getSpawnedType().name().toLowerCase() + "§7 spawner.");
197+ // e.getPlayer().sendMessage(lang.equals("hu")? "§7Kiütöttél egy §e" +
198+ // cs.getSpawnedType().name().toLowerCase() + " §7spawnert!" : "§7You have
199+ // broken out one §e" + cs.getSpawnedType().name().toLowerCase() + "§7
200+ // spawner.");
190201 if (!e .getPlayer ().hasPermission ("spawnerlimit.bypass" )) {
191202 if (limit .containsKey (e .getPlayer ().getName ())) {
192203 Integer value = limit .get (e .getPlayer ().getName ()) + 1 ;
@@ -229,14 +240,19 @@ public void onSpawnerPlace(BlockPlaceEvent event) {
229240 spawner .setSpawnedType (EntityType .valueOf (spawnerName ));
230241 spawner .update (true , true );
231242
232- event .getPlayer ().sendMessage (Language .getReplacedLocale (event .getPlayer (), LocalePath .PLACE , "%type%" , spawnerName .toLowerCase ()));
233- //event.getPlayer().sendMessage(lang.equals("hu")? "§7Letettél egy §e" + spawnerName.toLowerCase() + " §7spawnert!" : "§7You have placen one §e" + spawnerName.toLowerCase() + "§7 spawner.");
243+ event .getPlayer ().sendMessage (Language .getReplacedLocale (event .getPlayer (), LocalePath .PLACE ,
244+ "%type%" , spawnerName .toLowerCase ()));
245+ // event.getPlayer().sendMessage(lang.equals("hu")? "§7Letettél egy §e" +
246+ // spawnerName.toLowerCase() + " §7spawnert!" : "§7You have placen one §e" +
247+ // spawnerName.toLowerCase() + "§7 spawner.");
234248 } catch (IllegalArgumentException e ) {
235249 spawner .setSpawnedType (EntityType .valueOf ("PIG" ));
236250 spawner .update (true , true );
237251
238- event .getPlayer ().sendMessage (Language .getReplacedLocale (event .getPlayer (), LocalePath .PLACE , "%type%" , "pig" ));
239- //event.getPlayer().sendMessage(lang.equals("hu") ? "§7Letettél egy §epig §7spawnert!": "§7You have placen one §epig §7spawner.");
252+ event .getPlayer ().sendMessage (
253+ Language .getReplacedLocale (event .getPlayer (), LocalePath .PLACE , "%type%" , "pig" ));
254+ // event.getPlayer().sendMessage(lang.equals("hu") ? "§7Letettél egy §epig
255+ // §7spawnert!": "§7You have placen one §epig §7spawner.");
240256 }
241257
242258 return ;
@@ -269,4 +285,162 @@ public void onSpawnerPlace(BlockPlaceEvent event) {
269285
270286 }
271287 }
288+
289+ @ EventHandler
290+ public void onSignClick (PlayerInteractEvent e ) {
291+
292+ Player p = e .getPlayer ();
293+ Block b = e .getClickedBlock ();
294+ if (e .getAction ().equals (org .bukkit .event .block .Action .RIGHT_CLICK_BLOCK )) {
295+ if (p .hasPermission ("pickupspawners.signshop.use" )) {
296+ if (b .getType ().toString ().contains ("SIGN" )) {
297+
298+ Sign s = (Sign ) b .getState ();
299+ if (s .getLine (0 ).equalsIgnoreCase ("§1[PickupSpawners]" )) {
300+ if (s .getLine (1 ).startsWith ("B " )) {
301+ String spawnedType = s .getLine (2 ).toUpperCase ();
302+ Integer count = 1 ;
303+ double price = 0 ;
304+ if (s .getLine (3 ) != null && PickupSpawners .isInteger (s .getLine (3 ))) {
305+ count = Integer .parseInt (s .getLine (3 ));
306+ }
307+
308+ if (PickupSpawners .isDouble (s .getLine (1 ).split (" " )[1 ])) {
309+ price = Double .parseDouble (s .getLine (1 ).split (" " )[1 ]);
310+ }
311+
312+ if (me .poma123 .spawners .PickupSpawners .entities .contains (spawnedType .toLowerCase ())) {
313+
314+ if (p .getInventory ().firstEmpty () == -1 ) {
315+ p .sendMessage (Language .getLocale (p , LocalePath .NO_ENOUGH_SPACE_INV ));
316+ return ;
317+ }
318+ EntityType .valueOf (spawnedType );
319+ ItemStack spawner = new ItemStack (me .poma123 .spawners .PickupSpawners .material , count );
320+ ItemMeta swmeta = spawner .getItemMeta ();
321+ // swmeta.setLocalizedName();
322+ swmeta .setDisplayName ("§e" + spawnedType .toLowerCase () + " §7Spawner" );
323+
324+ spawner .setItemMeta (swmeta );
325+ if (PickupSpawners .vault != null ) {
326+ Economy economy = PickupSpawners .vault .getEconomy ();
327+
328+ if (economy .getBalance (p ) >= price ) {
329+ economy .withdrawPlayer (p , price );
330+ p .getInventory ().addItem (spawner );
331+ p .sendMessage (Language .getReplacedLocale (p , LocalePath .GIVE , "%count% %type%" , count + " " + spawnedType .toLowerCase ()));
332+ } else {
333+ p .sendMessage (Language .getLocale (p , LocalePath .NO_ENOUGH_MONEY ));
334+ }
335+
336+ } else {
337+ plugin .getLogger ().warning (
338+ "§cThere was an error when attempt to buy a spawner. Vault is not installed." );
339+ p .sendMessage (
340+ "§c[PickupSpawners] There was an error when attempt to buy a spawner. Please contact an administrator and tell them to look at the Console." );
341+ return ;
342+ }
343+
344+ } else {
345+ p .sendMessage (me .poma123 .spawners .Listener .getLang (p ).equals ("hu" )
346+ ? "§cA megadott entitás típus nem létezik."
347+ : "§cThis entity type is invalid." );
348+ }
349+ }
350+ }
351+ }
352+ } else {
353+
354+
355+ p .sendMessage (Language .getLocale (p , LocalePath .NO_PERM ));
356+ }
357+ }
358+ }
359+
360+
361+ @ EventHandler
362+ public void onSignChange (SignChangeEvent e ) {
363+
364+ Player p = e .getPlayer ();
365+ Block b = e .getBlock ();
366+
367+ // TODO is shop enabled in config
368+ if (p .hasPermission ("pickupspawners.signshop.create" )) {
369+ Sign sign = (Sign ) b .getState ();
370+ if (e .getLines ()[0 ].equalsIgnoreCase ("[PickupSpawners]" ) || e .getLines ()[0 ].equalsIgnoreCase ("[Spawners]" )
371+ || e .getLines ()[0 ].equalsIgnoreCase ("[ps]" )) {
372+ // if
373+ // (s.getConfig().getStringList("shop-sign-prefixes").contains(e.getLines()[0]))
374+ // {
375+ if (e .getLine (1 ).startsWith ("B" ) || e .getLine (1 ).startsWith ("b" )) {
376+ if (e .getLine (1 ).contains (" " ) && PickupSpawners .isInteger (e .getLine (1 ).split (" " )[1 ])) {
377+ sign .setLine (0 , "§1[PickupSpawners]" );
378+ sign .setLine (1 , e .getLine (1 ).replace ("b" , "B" ));
379+ if (PickupSpawners .entities .contains (e .getLine (2 ).toLowerCase ())) {
380+ sign .setLine (2 , e .getLine (2 ).toLowerCase ());
381+ if (PickupSpawners .isInteger (e .getLine (3 ))) {
382+ sign .setLine (3 , e .getLine (3 ));
383+
384+ } else {
385+ sign .setLine (3 , "1" );
386+ }
387+
388+
389+ p .sendMessage ("§e[PickupSpawners] §aBuy sign succesfully created!" );
390+
391+ } else {
392+
393+ sign .setLine (0 , "§4[PickupSpawners]" );
394+ sign .setLine (1 , "" );
395+ sign .setLine (2 , "§cINVALID" );
396+ p .sendMessage ("§e[PickupSpawners] §cInvalid entity name." );
397+
398+ /*
399+ * final Player receipient =p; final ComponentBuilder message = new
400+ * ComponentBuilder("§e[PickupSpawners] §cInvalid entity name. ");
401+ *
402+ * String entity = ""; int size = entities.size() / 2; int second =
403+ * entities.size() - size -1;
404+ *
405+ * for (int i = 0; i < size; i++) {
406+ *
407+ * entity = entity + "\n§e- §7" + entities.get(i) + " §e- §7" +
408+ * entities.get(second); second++; }
409+ *
410+ *
411+ * message.append(ChatColor.GRAY +
412+ * " §7[Valid entities] §o(Hover with cursor!)"); // message.event(new
413+ * ClickEvent(ClickEvent.Action.RUN_COMMAND, "")); message.event(new
414+ * HoverEvent(Action.SHOW_TEXT, TextComponent.fromLegacyText(entity)));
415+ *
416+ * receipient.spigot().sendMessage(message.create());
417+ */
418+ }
419+
420+ } else {
421+ sign .setLine (0 , "§4[PickupSpawners]" );
422+ sign .setLine (2 , "§cINVALID" );
423+ p .sendMessage (
424+ "§e[PickupSpawners] §cInvalid price line. §7(Valid price line: §oB <price>§r§7. Example: §oB 500§r§7)" );
425+ }
426+ } else {
427+ sign .setLine (0 , "§4[PickupSpawners]" );
428+ sign .setLine (2 , "§cINVALID" );
429+ p .sendMessage (
430+ "§e[PickupSpawners] §cInvalid price line. §7(Valid price line: §oB <price>§r§7. Example: §oB 500§r§7)" );
431+ }
432+ Bukkit .getServer ().getScheduler ().scheduleSyncDelayedTask (plugin , new Runnable () {
433+ @ Override
434+ public void run () {
435+
436+ sign .update ();
437+ }
438+ }, 2 );
439+
440+ }
441+
442+ }
443+
444+ }
445+
272446}
0 commit comments