Skocz do zawartości
  • 0

Klasa na TPA


KodziaK

Pytanie

Witam tworzę core'a (plugin z dropem gildiami itp. w jednym) jestem początkującym w dziedzinie pisania pluginów. I wielu spraw jeszcze nie rozumiem. Aktualnie pracuję nad komendą /tpa ale nia uja mi nie wychodzi :(

Mam kod który powinien działać aaalee... nie działa :( I pisze tutaj bo mam nadzieje że ktoś mi pomoże

Spoiler

package me.k0dx.kkits;

import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;

public class Tpa implements CommandExecutor{

	HashMap<Player, Player> tpa = new HashMap<Player, Player>();
	public static Map<String, BukkitTask> tpaOn = new HashMap<String, BukkitTask>();
	
	@SuppressWarnings("deprecation")
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if(cmd.getName().equalsIgnoreCase("tpa")){
			if(!(sender instanceof Player)){
				sender.sendMessage(ChatColor.RED + "Aby korzystac z tej komendy musisz byc na serwerze!");
				return true;
			}
			if(args.length == 0){
				sender.sendMessage(ChatColor.RED + "Podaj nick gracza!");
				return true;
			}
			Player target = Bukkit.getPlayer(args[0]);
			/*
			if(target == sender){
				sender.sendMessage(ChatColor.RED + "Nie mozesz wyslac prosby o teleportacje do siebie!");
				return true;
			}
			*/
			if(!(target == null)){
				Player p = (Player) sender;
				if(p.getWorld() == target.getWorld()){
					tpa.put(target, p);
					p.sendMessage(tpa.get(p).getName());
					p.sendMessage(ChatColor.GRAY + "Wyslales prosbe o teleportacje do gracza:" + ChatColor.GREEN + " " + target.getName() + "!");
					target.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "=============================================");
					target.sendMessage(ChatColor.GRAY + "Otrzymales prosbe o teleportacje od gracza:" + " " + ChatColor.GREEN + p.getName() + "!");
					target.sendMessage(ChatColor.GRAY + "Wpisz:" + " " + ChatColor.GREEN + "/tpaccept" + " " + ChatColor.GRAY + "aby zaakceptowac prosbe!");
					target.sendMessage(ChatColor.GRAY + "Wpisz:" + " " + ChatColor.GREEN + "/tpdeny" + " " + ChatColor.GRAY + "aby odrzucic prosbe!");
					target.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.BOLD + "=============================================");
					return true;
				}else{
					p.sendMessage(ChatColor.RED + "Gracz jest w innym swiecie!");
					return true;
				}
			}else{
				sender.sendMessage(ChatColor.GRAY + "Nie odnaleziono gracza:" + " " + ChatColor.GREEN + args[0]);
				return true;
			}
		}
		if(cmd.getName().equalsIgnoreCase("tpaccept")){
			if(!(sender instanceof Player)){
				sender.sendMessage(ChatColor.RED + "Aby korzystac z tej komendy musisz byc na serwerze!");
				return true;
			}
			Player p = (Player) sender;
			if (tpa.get(p.getName()) != null){
				sender.sendMessage(ChatColor.RED + "Nie masz zadnej prosby do zaakceptowania!");
				return true;
			}else{
				sender.sendMessage("Prosba zostala zaakceptowana!");
				tpa.put(p, null);
				return true;
			}
		}
		return false;
	}
}

 

Z góry dzięki jeżeli ktoś postanowi mi pomóc :)

Odnośnik do komentarza
https://skript.pl/temat/19016-klasa-na-tpa/
Udostępnij na innych stronach

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

eh, użyj sobie cache z guavy, powinno się sprawdzić w tej sytuacji:

private final Cache<UUID, UUID> teleportRequestCache = CacheBuilder.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build();
  
  //komenda tpaccept
  
  if(cache.asMap().containsKey(sender.getUniqueId()))
  {
       Bukkit.getPlayer(cache.asMap().get(sender)).teleport(sender);
       sender.sendMessage("przyjeto request");
  }

no i oczywiscie musisz dorobic sobie /tpa, ktore bedzie inputowało do cache dwa uuid, /tpdeny które będzie usuwać z cache, a samo przedawnienie requesta samo się zrobi (domyślnie po 60 sekundach, po to jest użyte cache od guavy), poradzisz sobie sam dalej.

Odnośnik do komentarza
https://skript.pl/temat/19016-klasa-na-tpa/#findComment-129632
Udostępnij na innych stronach

  • 0
Teraz, K0dziakOfSky napisał:

Pomoże ktoś bo propozycja insertt'a nie działa albo ja jej nie rozumiem :(

Działa tylko nie rozumiesz. Wróć do wcześniejszych podstaw, bo jak sam widzisz jest to dla Ciebie za trudne. Nie przyjmuj tego jak hejt, a jako poradę.

Odnośnik do komentarza
https://skript.pl/temat/19016-klasa-na-tpa/#findComment-130693
Udostępnij na innych stronach

  • 0

@KrejzolekPRO A mógłbyś mi wysłać kod nie cały ale tylko z stworzeniem cache'a lub czegoś innego + dodanie, usunięcie i sprawdzenie z tego? Bo nawet próbując w hashmapie /reply komendę do /msg to hashmapa mi nie działa

Odnośnik do komentarza
https://skript.pl/temat/19016-klasa-na-tpa/#findComment-130855
Udostępnij na innych stronach

  • 0
Dnia 19.06.2017 o 19:32, K0dziakOfSky napisał:

@KrejzolekPRO A mógłbyś mi wysłać kod nie cały ale tylko z stworzeniem cache'a lub czegoś innego + dodanie, usunięcie i sprawdzenie z tego? Bo nawet próbując w hashmapie /reply komendę do /msg to hashmapa mi nie działa

Jeśli nie rozumiesz tego co napisał insertt

to zrób sobie WeakHashMap<Uuid,Uuid> requests = new WeakHashMap<>(); *

przy wpisaniu komendy /tpa wrzucaj do mapy requests.put(do kogo ma tp, kogo ma tp);

i przy /tpaccept robisz sobie Uuid p = requests.remove(sender);

if(p!= null){ to znaczy ze masz go teleportowac}

*WeakHashMap dlatego bo przy wyjsciu gracza z serwera automatycznie usunie go z hashmapy 

i to jest taki najprostszy system tpa, mozesz do niego dodac jakies wygasanie prośby o teleportacje czy coś w ten deseń(np druga hashMapa<UUID,long> i przy /tpaccept sprawdzać czy long nie jest zbyt stary jak tak to anulujesz)

Edytowane przez dekros
Odnośnik do komentarza
https://skript.pl/temat/19016-klasa-na-tpa/#findComment-131339
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...