Skip to content

Commit 2ffb504

Browse files
committed
Add comprehensive Javadoc comments to enhance code documentation and clarity
1 parent 09b060c commit 2ffb504

10 files changed

Lines changed: 515 additions & 80 deletions

File tree

src/main/java/com/bentahsin/regionshield/BenthRegionShield.java

Lines changed: 93 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
import java.util.concurrent.TimeUnit;
2323
import 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+
*/
2530
public 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);

src/main/java/com/bentahsin/regionshield/internal/ReflectionUtils.java

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,24 @@
88
import java.lang.reflect.Method;
99

1010
/**
11-
* Java Reflection işlemlerini güvenli ve temiz bir şekilde yapmak için yardımcı araçlar.
12-
* try-catch bloklarını tek bir yerde toplar ve kod kirliliğini önler.
11+
* Java Reflection (Yansıtma) işlemlerini basitleştirmek ve güvenli hale getirmek için bir dizi statik yardımcı metot sağlar.
12+
* <p>
13+
* Bu sınıfın temel amacı, yansıtma ile ilişkili istisna yönetimini (try-catch blokları) merkezileştirerek
14+
* kod tekrarını önlemek ve proje genelinde okunabilirliği artırmaktır. Tüm metotlar,
15+
* bir hata durumunda istisna fırlatmak yerine null döndürür, bu da kullanımı kolaylaştırır.
16+
* <p>
17+
* Bir {@link UtilityClass} olarak bu sınıfın bir örneği oluşturulamaz.
1318
*/
1419
@UtilityClass
1520
@SuppressFBWarnings("REFLF_REFLECTION_MAY_INCREASE_ACCESSIBILITY_OF_FIELD")
1621
public class ReflectionUtils {
1722

1823
/**
19-
* İsmi verilen sınıfı bulmaya çalışır.
20-
* @param className Sınıfın tam paket adı (örn: com.sk89q.worldguard.WorldGuard)
21-
* @return Sınıf bulunursa Class objesi, bulunamazsa null.
24+
* Tam nitelikli adına göre bir sınıfı güvenli bir şekilde bulmaya ve yüklemeye çalışır.
25+
* Bu metot, {@link ClassNotFoundException} istisnasını kapsüller.
26+
*
27+
* @param className Sınıfın tam paket adı (örneğin: "com.sk89q.worldguard.WorldGuard").
28+
* @return Sınıf bulunursa {@link Class} nesnesi, bulunamazsa null.
2229
*/
2330
public Class<?> getClass(String className) {
2431
try {
@@ -29,11 +36,14 @@ public Class<?> getClass(String className) {
2936
}
3037

3138
/**
32-
* Bir sınıftaki metodu ismine ve parametrelerine göre bulur.
33-
* @param clazz Aranacak sınıf
34-
* @param methodName Metod adı
35-
* @param parameterTypes Metodun parametre tipleri
36-
* @return Metod bulunursa Method objesi, bulunamazsa null.
39+
* Verilen bir sınıfta, adına ve parametre türlerine göre bir metot bulur.
40+
* Özel veya korumalı metotlara erişime izin vermek için bulunan metot üzerinde
41+
* otomatik olarak {@code setAccessible(true)} çağrısı yapar.
42+
*
43+
* @param clazz Metodun aranacağı sınıf.
44+
* @param methodName Aranacak metodun adı.
45+
* @param parameterTypes Metodun sahip olduğu parametrelerin türleri.
46+
* @return Metot bulunursa {@link Method} nesnesi, bulunamazsa null.
3747
*/
3848
public Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) {
3949
if (clazz == null) return null;
@@ -47,11 +57,13 @@ public Method getMethod(Class<?> clazz, String methodName, Class<?>... parameter
4757
}
4858

4959
/**
50-
* Bir metodu güvenli bir şekilde çalıştırır.
51-
* @param method Çalıştırılacak metod
52-
* @param instance Hangi obje üzerinde çalışacak? (Static metodlar için null olabilir)
53-
* @param args Metoda gönderilecek parametreler
54-
* @return Metodun dönüş değeri (Object) veya hata durumunda null.
60+
* Belirtilen argümanlarla, verilen bir örnek üzerinde bir metodu güvenli bir şekilde çağırır.
61+
* Metot çağrımı sırasında fırlatılan herhangi bir istisna yakalanır ve metot null döndürür.
62+
*
63+
* @param method Çalıştırılacak olan {@link Method} nesnesi.
64+
* @param instance Metodun çağrılacağı nesne örneği. Statik metotlar için bu değer null olabilir.
65+
* @param args Metoda geçirilecek olan argümanlar (parametreler).
66+
* @return Metodun dönüş değeri veya bir hata oluşursa null. Eğer metodun dönüş tipi void ise null döner.
5567
*/
5668
public Object invoke(Method method, Object instance, Object... args) {
5769
if (method == null) return null;
@@ -63,11 +75,13 @@ public Object invoke(Method method, Object instance, Object... args) {
6375
}
6476

6577
/**
66-
* Bir sınıfın içindeki alanın (field/değişken) değerini okur.
67-
* @param clazz Sınıf
68-
* @param instance Obje örneği
69-
* @param fieldName Değişken adı
70-
* @return Değişkenin değeri
78+
* Verilen bir örnekten bir alanın (field) değerini güvenli bir şekilde okur.
79+
* Bu metot, {@code getDeclaredField} kullanarak ve erişilebilir olarak ayarlayarak özel alanlara erişebilir.
80+
*
81+
* @param clazz Alanın bulunduğu sınıf.
82+
* @param instance Değerin okunacağı nesne örneği.
83+
* @param fieldName Değeri okunacak olan alanın adı.
84+
* @return Alanın değeri veya bir hata oluşursa (örn: alan bulunamadı) null.
7185
*/
7286
public Object getField(Class<?> clazz, Object instance, String fieldName) {
7387
if (clazz == null) return null;
@@ -82,7 +96,9 @@ public Object getField(Class<?> clazz, Object instance, String fieldName) {
8296

8397
/**
8498
* Bir eklentinin sunucuda yüklü ve aktif olup olmadığını kontrol eder.
85-
* @param pluginName Eklenti adı (plugin.yml içindeki name)
99+
*
100+
* @param pluginName Eklentinin adı (plugin.yml dosyasındaki 'name' değeri).
101+
* @return Eklenti aktif ise true, değilse false.
86102
*/
87103
public boolean isPluginActive(String pluginName) {
88104
return Bukkit.getPluginManager().isPluginEnabled(pluginName);

0 commit comments

Comments
 (0)