2222import java .util .concurrent .TimeUnit ;
2323import java .util .logging .Level ;
2424
25+ /**
26+ * BenthRegionShield API'sinin ana sınıfı.
27+ * Bu sınıf, birleşik bir arayüz aracılığıyla çeşitli bölge koruma eklentilerini (hook'lar)
28+ * yönetmek ve sorgulamak için merkezi bir merkez görevi görür.
29+ */
2530public class BenthRegionShield {
2631
2732 @ Getter
@@ -42,6 +47,11 @@ public class BenthRegionShield {
4247 @ Getter @ Setter
4348 private String bypassPermission = "regionshield.bypass" ;
4449
50+ /**
51+ * Yeni bir BenthRegionShield örneği oluşturur.
52+ *
53+ * @param plugin Bu API'ye sahip olan JavaPlugin örneği.
54+ */
4555 @ SuppressFBWarnings ("EI_EXPOSE_REP2" )
4656 public BenthRegionShield (JavaPlugin plugin ) {
4757 this .plugin = plugin ;
@@ -58,6 +68,12 @@ public BenthRegionShield(JavaPlugin plugin) {
5868 plugin .getServer ().getPluginManager ().registerEvents (new RegionMovementListener (this ), plugin );
5969 }
6070
71+ /**
72+ * Yeni bir shield kancası (hook) kaydeder. Hook'lar, farklı bölge koruma eklentileriyle
73+ * entegre olmak için kullanılır. Kaydedilen hook'lar öncelik değerine göre (en yüksekten en düşüğe) sıralanır.
74+ *
75+ * @param hook Kaydedilecek hook uygulaması.
76+ */
6177 public void registerHook (IShieldHook hook ) {
6278 if (hook == null ) return ;
6379
@@ -71,15 +87,37 @@ public void registerHook(IShieldHook hook) {
7187 }
7288 }
7389
90+ /**
91+ * Mevcut olarak kayıtlı tüm hook'ları kaldırır ve sonuç önbelleğini temizler.
92+ */
7493 public void unregisterAll () {
7594 hooks .clear ();
7695 resultCache .invalidateAll ();
7796 }
7897
98+ /**
99+ * Bir oyuncunun belirli bir konumda belirli bir etkileşimi gerçekleştirmesine izin verilip verilmediğini kontrol eder.
100+ * Bu, basit bir boolean döndüren kullanışlı bir metottur.
101+ *
102+ * @param player Etkileşimi gerçekleştiren oyuncu.
103+ * @param location Etkileşimin gerçekleştiği konum.
104+ * @param type Gerçekleştirilen etkileşim türü.
105+ * @return Oyuncunun etkileşimde bulunmasına izin veriliyorsa true, aksi takdirde false.
106+ */
79107 public boolean canInteract (Player player , Location location , InteractionType type ) {
80108 return checkResult (player , location , type ).isAllowed ();
81109 }
82110
111+ /**
112+ * Bir oyuncunun bir konumda etkileşim kurup kuramayacağını görmek için ayrıntılı bir kontrol gerçekleştirir.
113+ * Bu metot, bypass yetkilerini kontrol eder, önbelleğe bakar ve ardından kayıtlı tüm hook'ları
114+ * öncelik sırasına göre sorgular. Eylemi reddeden ilk hook, sonucu belirler.
115+ *
116+ * @param player Kontrol edilecek oyuncu.
117+ * @param location Kontrol edilecek konum.
118+ * @param type Kontrol edilecek etkileşim türü.
119+ * @return Etkileşimin sonucunu içeren bir {@link ShieldResponse} nesnesi.
120+ */
83121 public ShieldResponse checkResult (Player player , Location location , InteractionType type ) {
84122 if (player .hasPermission (bypassPermission ) || player .isOp ()) {
85123 return ShieldResponse .allow ();
@@ -123,6 +161,13 @@ public ShieldResponse checkResult(Player player, Location location, InteractionT
123161 return allowed ;
124162 }
125163
164+ /**
165+ * Belirli bir konumdaki bölge hakkında bilgi alır.
166+ * Hook'ları öncelik sırasına göre sorgular ve bir bölge tanımlayan ilk hook'tan gelen bilgiyi döndürür.
167+ *
168+ * @param location Bilgi alınacak konum.
169+ * @return Bir {@link RegionInfo} nesnesi veya bölge bulunamazsa null.
170+ */
126171 public RegionInfo getRegionInfo (Location location ) {
127172 for (IShieldHook hook : hooks ) {
128173 try {
@@ -135,11 +180,24 @@ public RegionInfo getRegionInfo(Location location) {
135180 return null ;
136181 }
137182
183+ /**
184+ * Adına göre belirli bir hook'tan bölge bilgilerini alır.
185+ *
186+ * @param hookName Bilgiyi sağlayacak hook'un adı.
187+ * @param location Bilgi alınacak konum.
188+ * @return Bir {@link RegionInfo} nesnesi veya hook bulunamazsa/bölge yoksa null.
189+ */
138190 public RegionInfo getRegionInfo (String hookName , Location location ) {
139191 IShieldHook hook = getHook (hookName );
140192 return (hook != null ) ? hook .getRegionInfo (location ) : null ;
141193 }
142194
195+ /**
196+ * Oyuncunun o anda içinde bulunduğu bölgenin sınırlarını görsel olarak (parçacıklarla) gösterir.
197+ * Sınırlar, oyuncunun konumunda bir bölge tanımlayan en yüksek öncelikli hook tarafından sağlanır.
198+ *
199+ * @param player Sınırları görecek oyuncu.
200+ */
143201 public void showBoundaries (Player player ) {
144202 Location loc = player .getLocation ();
145203 RegionBounds bounds = null ;
@@ -162,18 +220,38 @@ public void showBoundaries(Player player) {
162220 RegionVisualizer .show (plugin , player , bounds );
163221 }
164222
223+ /**
224+ * Kayıtlı bir hook'u benzersiz adına göre alır.
225+ *
226+ * @param name Alınacak hook'un adı (büyük/küçük harfe duyarsız).
227+ * @return {@link IShieldHook} örneği veya bulunamazsa null.
228+ */
165229 public IShieldHook getHook (String name ) {
166230 return hooks .stream ()
167231 .filter (h -> h .getName ().equalsIgnoreCase (name ))
168232 .findFirst ()
169233 .orElse (null );
170234 }
171235
236+ /**
237+ * Tek bir hook'u adına göre kayıttan kaldırır ve tüm önbelleği geçersiz kılar.
238+ *
239+ * @param name Kayıttan kaldırılacak hook'un adı (büyük/küçük harfe duyarsız).
240+ */
172241 public void unregisterHook (String name ) {
173242 hooks .removeIf (hook -> hook .getName ().equalsIgnoreCase (name ));
174243 resultCache .invalidateAll ();
175244 }
176245
246+ /**
247+ * Diğerlerini yoksayarak yalnızca belirli, adlandırılmış bir hook'u kullanarak bir etkileşim kontrolü gerçekleştirir.
248+ *
249+ * @param hookName Kullanılacak hook'un adı.
250+ * @param player Kontrol edilecek oyuncu.
251+ * @param location Kontrol edilecek konum.
252+ * @param type Kontrol edilecek etkileşim türü.
253+ * @return Hook tarafından döndürülen {@link ShieldResponse} veya hook bulunamazsa izin veren bir response.
254+ */
177255 public ShieldResponse checkSpecific (String hookName , Player player , Location location , InteractionType type ) {
178256 IShieldHook hook = getHook (hookName );
179257 if (hook == null ) return ShieldResponse .allow ();
@@ -191,18 +269,27 @@ private void logDebug(Player player, String provider) {
191269 }
192270
193271 /**
194- * Çağrıldığı metodu Annotation açısından denetler.
195- * Kullanım: if (!api.guard(this, "metodIsmi", player)) return;
272+ * Çağrıldığı metodu RegionShield ek açıklamaları (annotations) açısından denetler.
273+ * Bu, geliştiricilerin kodlarını kolayca bölge korumasına almasını sağlayan güçlü bir özelliktir.
274+ * <p>
275+ * Kullanım: {@code if (!api.guard(this, "metodIsmi", player)) return;}
276+ *
277+ * @param instance Metodun ait olduğu nesne örneği.
278+ * @param methodName Denetlenecek metodun adı.
279+ * @param player Kontrolün yapılacağı oyuncu.
280+ * @param paramTypes Metodun parametre türleri (metot overload durumları için).
281+ * @return Oyuncunun metoda devam etmesine izin veriliyorsa true, engellendiyse false.
196282 */
197283 public boolean guard (Object instance , String methodName , Player player , Class <?>... paramTypes ) {
198284 return gate .inspect (instance , methodName , player , paramTypes );
199285 }
200286
201287 /**
202- * Bir bölgeye oyuncu limiti koyar.
203- * @param provider Eklenti ismi (WorldGuard, Towny vb.)
204- * @param regionId Bölge ID'si
205- * @param limit Maksimum oyuncu sayısı
288+ * Bir bölgeye oyuncu limiti koyar. Belirtilen bölgeye girebilecek maksimum oyuncu sayısını ayarlar.
289+ *
290+ * @param provider Eklenti ismi (Örn: "WorldGuard", "Towny"). Bu, hook adıyla eşleşmelidir.
291+ * @param regionId Bölgenin kimliği (ID).
292+ * @param limit Bu bölge için maksimum oyuncu sayısı.
206293 */
207294 public void setRegionLimit (String provider , String regionId , int limit ) {
208295 limitManager .setLimit (provider , regionId , limit );
0 commit comments