Rehber JAVA Minecraft Eklenti | Özel HEX Kodları ile Renk Kullanma ( Kod üzerinde detaylı anlatım )

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

HaktanOzkan

Demir Cevheri Gibiyim
Katılım
22 Temmuz 2014
Mesajlar
206
Elmaslar
116
Puan
13.825
Minecraft
HaktanOzkan

Discord:

hktanozkan

Selam forum okurları. Uzun zaman önce küçük bir seri haline getirdiğim (JAVA Minecraft Eklenti) serisine her ne kadarda olsa şu an bir seri halinde ilerlememesine rağmen bir yenisini eklemek istiyorum. Bugün spigot api'sini kullanarak HEX renk kodları ile nasıl string oluşturulur ona bir bakacağız. Bu konuda temel api bilgilerine sahipmişsiniz gibi anlatacağım.

ESKİ JAVA EKLENTİ DERSLERİM


Biliyorsunuz ki Minecraft 1.16 sürümünden önce rgb kodlarını desteklemiyordu. 1.16 sürümü ile birlikte rgb kodları artık desteklenir hale geldi. Bu yüzden bu yöntemi sadece 1.16 sürümü ve üst sürümler üzerinde uygulayabilirsiniz.

p1.png


Daha önceden HEXColor adında bir dosya açmıştım. Siz istediğiniz isimde kurabilir class, package isimlerini istediğiniz gibi değiştirebilirsiniz. Önemli olan kod kısmı.

Şimdi HEXColor.java class dosyamızın içine bir bakalım.
Java:
package me.hex;

import net.md_5.bungee.api.ChatColor;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HEXColor {

    private static final Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}");

    public static String message(String message) {
        Matcher matcher = pattern.matcher(message);
        while (matcher.find()) {
            String color = message.substring(matcher.start(), matcher.end());
            message = message.replace(color, ChatColor.of(color) + "");
            matcher = pattern.matcher(message);
        }
        return ChatColor.translateAlternateColorCodes('&', message);
    }
}

Kodlara tek tek DETAYLICA bir göz atalım.

Java:
private static final Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}");

Burada bir erişim belirteçi(private) kullanıyoruz. Javanın temelleri olan bu belirteçleri java üzerinde çalışan herkes kullanmıştır. Kısa bir özet geçmek gerekirse...
Java anahtar sözcükleri, ayrılmış sözcükler olarak da bilinir. Anahtar kelimeler, bir kodun anahtarı olarak işlev gören belirli kelimelerdir. Bunlar Java tarafından önceden tanımlanmış kelimelerdir, bu nedenle bir değişken veya nesne adı veya sınıf adı olarak kullanılamazlar.
Diğer türleri ise Default,Protected ve Public olarak 4'e ayrılır. Bu erişim belirteçlerinin kullanım alanları ise şöyledir.
  • default: Varsayılan değiştiricinin erişim düzeyi yalnızca paketin içindedir. Paketin dışından erişilemez. Herhangi bir erişim düzeyi belirtmezseniz, varsayılan olacaktır.
  • public: Bir genel değiştiricinin erişim düzeyi her yerdedir. Sınıf içinden, sınıf dışından, paket içinden ve paket dışından erişilebilir.
  • protected: Korumalı bir değiştiricinin erişim düzeyi, paketin içinde ve alt sınıf aracılığıyla paketin dışındadır. Child sınıfı yapmazsanız, paket dışından erişilemez.
  • private: Özel değiştiricinin erişim düzeyi yalnızca sınıf içindedir. Sınıf dışından erişilemez.
Biraz daha akılda kalıcı olabilmesi adına resimlerle pekiştirelim.

1666997908936.jpeg


public_private_protected_2138_n7d3k.jpg


Peki burada bulunan
Java:
Pattern.compile("#[a-fA-F0-9]{6}");
bu kod ne anlama geliyor ?

Bu kod verilen string değerini compile etmek yani düzenlemek anlamına geliyor. Yani metni veya ifadeyi bir normal ifadeyle birden fazla kez eşleştirmek için kullanılıyor. Daha iyi anlamak için bir örnek verelim.
Java:
public class GFG {
    public static void main(String[] args)
    {
        // bir REGEX Dizesi oluştur
        String REGEX = ".*www.*";
       
        // dizeyi oluştur
        // içinde aramak istediğini yaz
        String actualString = "www.geeksforgeeks.org";
       
        // kalıp oluşturmak için regex'i derle
        // compile() yöntemini kullanarak
        Pattern pattern = Pattern.compile(REGEX);
       
        // kalıptan bir eşleştirici nesne al
        Matcher matcher = pattern.matcher(actualString);
       
        // Regex dizesinin olup olmadığını kontrol et
        // trueString'de bulundu veya bulunamadı
        boolean matches = matcher.matches();
 
        System.out.println("actualString "
                           + "contains REGEX = "
                           + matches);
    }
}

Kod:
ÇIKTI :

actualString contains REGEX = true

Gördüğünüz gibi içerisinden istediğimiz bir kelimeyi almak için kullandık. Daha sonra o kelime diğer bir string değerinde mevcutmu onu kontrol ettik. Eğer mevcut ise bize true değil ise false değerlerini döndürmesini istedik. Mevcut olduğu için true değeri döndü.

Java:
Matcher matcher = pattern.matcher(message);

Burada message string değerini baştan sonra alıp döndürmesini istiyoruz. Java'da Matcher, MatchResult arabirimi tarafından uygulanan ve bir deseni yorumlayarak bir karakter dizisinde eşleştirme işlemleri gerçekleştiren bir sınıftır.

Modelin eşleştirici yöntemini çağırarak, bir modelden bir eşleştirici oluşturulur. Eşleştirici bir kez oluşturulmuşsa, üzerinde üç farklı türde eşleştirme işlemi gerçekleştirebiliriz:
  • matches(): Toplam giriş sırasını desenle eşleştirmeye çalışır.​
  • lookingAt(): Giriş sırasını, başlangıçtan başlayarak kalıba göre eşleştirmeye çalışır.
  • find(): Bu, giriş sırasını tarar ve özellikle modelle eşleşen sonraki alt sırayı arar.
Bu kod üzerinde find() kullanıyoruz.
Java:
while (matcher.find()) {
            String color = message.substring(matcher.start(), matcher.end());
            message = message.replace(color, ChatColor.of(color) + "");
            matcher = pattern.matcher(message);
        }

Burada matcher.find() ile verdiğimiz string değerindeki tüm verileri tarıyoruz. Daha sonra bunları color string değeri çatısı altında en baştan en sona kadar kayıt ediyoruz.
Daha önce belirlediğimiz message string değeri içerisinde eğer var ise color string değerini kullandığımız api üzerinde hazır kodlu halde bulunan ChatColor.of değişkeni ile değiştirmeye zorluyoruz.
Java:
public String replace(char searchChar, char newChar)

En son ise yazacağımız HEX kodunu matcher içerisine import ediyoruz.

matcher = pattern.matcher(message);


Geriye sadece bir adım kaldı. O da kodumuzu nasıl kullanacağımız.
Java:
package me.hex;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
   
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        Player p = (Player) sender;
       
        if(cmd.getName().equalsIgnoreCase("hexcolor")) {
            p.sendMessage(HEXColor.message("#F0FF00") + "[HEXColor]" + HEXColor.message("#F4CCCC") + " Deneme yazı");
        }
       
        return false;
    }

}

Örnek olarak bir "hexcolor" komutu oluşturdum. HEXColor.java class dosyamın içerisinde bulunan message komutunu kullanarak içerisine HEX kodumu yazdım. Kullanım :

Kod:
HEXColor.message("#F0FF00")

ÇIKTI :

2022-10-29_02.33.04.png
 
Başarılı bir anlatım olmuş. Elinize sağlık.
 
Başarılı bir anlatım olmuş. Elinize sağlık <3
 
Süper bir bilgi konusu bilmeyenler için iyi olmuş
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Hala Discord sunucumuza katılmadın mı?

Büyük bir topluluğun parçası ol, etkinliklere katıl ve özel hediyeler kazanma şansı yakala!

Şimdi Katıl
Üst