Çözüldü Kod Hatası

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

Nefarriouss

Somon Balığı Selam Vermeye Geldi
Katılım
28 Nisan 2022
Mesajlar
10
Elmaslar
0
Puan
3.755
Yaş
28
Konum
Mars
Minecraft
Nefarsiouss

Discord:

Alp/Nefarious#0701

1754213890543.webp

Burada ki Generic Max Health Yerine ne yazabilirim? Oyuncunun canını arttırmak için?
 
Belki anında can doldurma olarak düzenleyebilirsiniz. şunu deneyin:


Kod:
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue());

yani yine de kullanmak zorundasınız gibi aslında ama bu ancak tam olarak nasıl bir eklenti kodladığınızı yazarsanız belki daha farklı yöntemler ile yardımcı olabiliriz
 
Anlamadığım bişi Generic max health kodu yok hiçbir şekilde
 
tam olarak ne eklentisi kodlamaya çalışıyorsunuz ve hangi sürüm için ?
 
1.21.8 Sürümü için rankup plugini üretmeye çalışıyorum kendi kafamda kurduğum rankları
 
Kod:
// Remove effects and extra hearts
for(Player player : Bukkit.getOnlinePlayers()){
    // Önce niteliği bir değişkene atayın
    AttributeInstance maxHealthAttribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);

    // Nitelik null değilse, işlem yapın
    if (maxHealthAttribute != null) {
        maxHealthAttribute.setBaseValue(20.0);
    }
    
    player.removePotionEffect(PotionEffectType.HASTE);
}

bir de bu şekilde dener misiniz
 
1754223076426.webp

Hiçbir şekilde şu generic max health olayını çözemiyorum bunun için bir pluginle birleştirmem mi lazım?
 
Rica etsem tam kodunuzu kod bloğu içerinden atar mısınız ?
 
Discord varsa ordan daha hızlı yardımcı olur musun?
 
// plugin.yml içeriğini bu eklentiyi derlemeden önce aynı dizinde oluşturmalısınız.
/*
name: RankPlugin
version: 1.0
main: me.oyun.rank.RankPlugin
api-version: 1.21
authors: [Nefarriouss]
description: Oyuncular için özel rütbe sistemi.
commands:
rankup:
description: Rütbe atlama komutu.
usage: /<command>
*/

package me.oyun.rank;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class RankPlugin extends JavaPlugin implements Listener {

private File playerDataFile;
private FileConfiguration playerDataConfig;
private final Map<UUID, Long> playtime = new HashMap<>();
private final Map<UUID, BukkitTask> playtimeTasks = new HashMap<>();
private final Map<UUID, Long> swordAbilityCooldown = new HashMap<>();
private final Map<UUID, Long> rocketCooldown = new HashMap<>();
private final Map<UUID, Integer> extraHearts = new HashMap<>();
private final Map<UUID, PotionEffect> axeHasteEffect = new HashMap<>();

// Rank definitions
public enum PlayerRank {
YABANCI, UYKUYUCU, YERLI, TUCCAR, KOMUTAN, KORKUNC, EMEKTAR, EFENDI
}

@Override
public void onEnable() {
// Register events and command
getServer().getPluginManager().registerEvents(this, this);
getCommand("rankup").setExecutor(this);

// Setup player data file
playerDataFile = new File(getDataFolder(), "players.yml");
if (!playerDataFile.exists()) {
playerDataFile.getParentFile().mkdirs();
saveResource("players.yml", false);
}
playerDataConfig = YamlConfiguration.loadConfiguration(playerDataFile);

// Load existing players from config
for (String key : playerDataConfig.getKeys(false)) {
try {
UUID uuid = UUID.fromString(key);
long savedPlaytime = playerDataConfig.getLong(key + ".playtime");
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
// Load player data if they are online
playtime.put(uuid, savedPlaytime);
startPlaytimeTask(uuid);
applyRankPermissions(player, PlayerRank.valueOf(playerDataConfig.getString(key + ".rank")));
}
} catch (IllegalArgumentException e) {
getLogger().warning("Invalid UUID found in players.yml: " + key);
}
}
}

@Override
public void onDisable() {
// Save all player data before disabling
for (UUID uuid : playtime.keySet()) {
playerDataConfig.set(uuid.toString() + ".playtime", playtime.get(uuid));
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
playerDataConfig.set(uuid.toString() + ".rank", getPlayerRank(player.getUniqueId()).toString());
}
}
try {
playerDataConfig.save(playerDataFile);
} catch (IOException e) {
getLogger().severe("Could not save player data!");
}

// Cancel all playtime tasks
for(BukkitTask task : playtimeTasks.values()){
task.cancel();
}
playtimeTasks.clear();

// Remove effects and extra hearts
for(Player player : Bukkit.getOnlinePlayers()){
AttributeInstance maxHealthAttribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
if (maxHealthAttribute != null) {
maxHealthAttribute.setBaseValue(20.0);
}
player.removePotionEffect(PotionEffectType.HASTE);
}
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();

// Load rank and playtime
if (!playerDataConfig.contains(uuid.toString())) {
playerDataConfig.set(uuid.toString() + ".rank", PlayerRank.YABANCI.toString());
playerDataConfig.set(uuid.toString() + ".playtime", 0L);
try {
playerDataConfig.save(playerDataFile);
} catch (IOException e) {
getLogger().severe("Could not save new player data!");
}
}

long savedPlaytime = playerDataConfig.getLong(uuid.toString() + ".playtime", 0L);
playtime.put(uuid, savedPlaytime);
startPlaytimeTask(uuid);

PlayerRank rank = PlayerRank.valueOf(playerDataConfig.getString(uuid.toString() + ".rank", PlayerRank.YABANCI.toString()));
applyRankPermissions(player, rank);
}

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();

// Save rank and playtime
if (playtimeTasks.containsKey(uuid)) {
playtimeTasks.get(uuid).cancel();
playtimeTasks.remove(uuid);
}
playerDataConfig.set(uuid.toString() + ".playtime", playtime.get(uuid));
playerDataConfig.set(uuid.toString() + ".rank", getPlayerRank(uuid).toString());
try {
playerDataConfig.save(playerDataFile);
} catch (IOException e) {
getLogger().severe("Could not save player data!");
}

// Cleanup effects
AttributeInstance maxHealthAttribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
if (maxHealthAttribute != null) {
maxHealthAttribute.setBaseValue(20.0);
}
player.removePotionEffect(PotionEffectType.HASTE);
}

// --- Rank Up Command ---
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Bu komut sadece oyuncular tarafından kullanılabilir.");
return true;
}

Player player = (Player) sender;
UUID uuid = player.getUniqueId();
PlayerRank currentRank = getPlayerRank(uuid);

// Get requirements for the next rank
long requiredPlaytime = 0;
Map<Material, Integer> requiredItems = new HashMap<>();
PlayerRank nextRank = null;
String nextRankName = "";

switch (currentRank) {
case YABANCI:
nextRank = PlayerRank.UYKUYUCU;
nextRankName = "Uykucu";
requiredPlaytime = 4 * 60 * 60 * 1000L; // 4 hours in milliseconds
requiredItems.put(Material.LEATHER, 32);
requiredItems.put(Material.DIAMOND, 16);
requiredItems.put(Material.EMERALD, 16);
break;
case UYKUYUCU:
nextRank = PlayerRank.YERLI;
nextRankName = "Yerli";
requiredPlaytime = 6 * 60 * 60 * 1000L; // 6 hours
requiredItems.put(Material.LEATHER, 128);
requiredItems.put(Material.DIAMOND, 32);
requiredItems.put(Material.GOLD_INGOT, 64);
break;
case YERLI:
nextRank = PlayerRank.TUCCAR;
nextRankName = "Tüccar";
requiredPlaytime = 8 * 60 * 60 * 1000L; // 8 hours
requiredItems.put(Material.WHITE_WOOL, 128);
requiredItems.put(Material.DIAMOND, 128);
break;
// The other ranks (Tüccar, Komutan, Korkunç, Emektar) don't have explicit rank-up requirements in the prompt, so they are assumed to be promoted via other means (e.g., admin command) or are the final ranks.
// For simplicity, I'll stop the rankup command here.
default:
player.sendMessage("§e[Rank]§f En yüksek rütbeye ulaştınız veya bu rütbe için komutla atlama mevcut değil.");
return true;
}

// Check requirements
long currentPlaytime = playtime.getOrDefault(uuid, 0L);
if (currentPlaytime < requiredPlaytime) {
player.sendMessage("§e[Rank]§f Rütbe atlamak için yeterli oynama süreniz yok. Gerekli: " + formatPlaytime(requiredPlaytime) + ", Mevcut: " + formatPlaytime(currentPlaytime));
return true;
}

for (Map.Entry<Material, Integer> entry : requiredItems.entrySet()) {
if (!player.getInventory().contains(entry.getKey(), entry.getValue())) {
player.sendMessage("§e[Rank]§f Rütbe atlamak için yeterli eşyanız yok. " + entry.getValue() + " adet " + entry.getKey().toString().toLowerCase().replace('_', ' ') + " gerekiyor.");
return true;
}
}

// Promote the player
for (Map.Entry<Material, Integer> entry : requiredItems.entrySet()) {
player.getInventory().removeItem(new ItemStack(entry.getKey(), entry.getValue()));
}
setPlayerRank(uuid, nextRank);
player.sendMessage("§e[Rank]§f Tebrikler! Artık " + nextRankName + " rütbesindesiniz!");

return true;
}

// --- Event Handlers for Rank Restrictions and Abilities ---

@EventHandler
public void onCraftItem(CraftItemEvent event) {
Player player = (Player) event.getWhoClicked();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (rank.ordinal() <= PlayerRank.UYKUYUCU.ordinal()) {
Material result = event.getRecipe().getResult().getType();
if (isHigherThanIron(result)) {
player.sendMessage("§e[Rank]§c Bu rütbede demir seviyesi üstü eşyaları üretemezsin.");
event.setCancelled(true);
}
}

if (rank.ordinal() < PlayerRank.TUCCAR.ordinal()) {
Material result = event.getRecipe().getResult().getType();
if (isDiamondOrNetherite(result)) {
player.sendMessage("§e[Rank]§c Bu rütbede elmas veya netherite eşyaları üretemezsin.");
event.setCancelled(true);
}
}

if (rank.ordinal() < PlayerRank.KOMUTAN.ordinal()) {
Material result = event.getRecipe().getResult().getType();
if (isNetherite(result)) {
player.sendMessage("§e[Rank]§c Bu rütbede netherite eşyaları üretemezsin.");
event.setCancelled(true);
}
}
}

@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
PlayerRank rank = getPlayerRank(player.getUniqueId());

// Right-click check for equipping elytra
if ((event.getAction() == org.bukkit.event.block.Action.RIGHT_CLICK_AIR || event.getAction() == org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK) && player.getInventory().getItemInMainHand().getType() == Material.ELYTRA && rank.ordinal() < PlayerRank.KORKUNC.ordinal()) {
player.sendMessage("§e[Rank]§c Bu rütbede elitra kullanamazsın!");
event.setCancelled(true);
return;
}

// Korkunç rank sword ability
if ((event.getAction() == org.bukkit.event.block.Action.RIGHT_CLICK_AIR || event.getAction() == org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK) && player.getInventory().getItemInMainHand().getType().toString().endsWith("SWORD") && rank == PlayerRank.KORKUNC) {
long lastUse = swordAbilityCooldown.getOrDefault(player.getUniqueId(), 0L);
if (System.currentTimeMillis() - lastUse < 120000) { // 120s cooldown
long remaining = (120000 - (System.currentTimeMillis() - lastUse)) / 1000;
player.sendMessage("§e[Rank]§c Kılıç yeteneğinizin bekleme süresi: " + remaining + " saniye.");
return;
}
player.addPotionEffect(new PotionEffect(PotionEffectType.STRENGTH, 200, 4)); // 10s, Strength 5
player.sendMessage("§e[Rank]§a Kılıç yeteneğinizi kullandınız! 10 saniye boyunca Kuvvet 5 etkisi kazandınız.");
swordAbilityCooldown.put(player.getUniqueId(), System.currentTimeMillis());
}
}

@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (player.isGliding() && rank.ordinal() < PlayerRank.KORKUNC.ordinal()) {
player.sendMessage("§e[Rank]§c Bu rütbede elitra kullanamazsın!");
player.setGliding(false);
event.setCancelled(true);
}
}

@EventHandler
public void onPrepareAnvil(PrepareAnvilEvent event) {
Player player = (Player) event.getViewers().get(0);
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (rank.ordinal() < PlayerRank.YERLI.ordinal()) {
player.sendMessage("§e[Rank]§c Bu rütbede örs kullanamazsın.");
event.setResult(null);
}
}

@EventHandler
public void onEnchantItem(EnchantItemEvent event) {
Player player = event.getEnchanter();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (rank.ordinal() < PlayerRank.TUCCAR.ordinal()) {
player.sendMessage("§e[Rank]§c Bu rütbede büyü masası kullanamazsın.");
event.setCancelled(true);
return;
}

// Fortune 3 check
if (event.getEnchantsToAdd().containsKey(Enchantment.FORTUNE) && event.getEnchantsToAdd().get(Enchantment.FORTUNE) >= 3) {
if (rank.ordinal() <= PlayerRank.TUCCAR.ordinal()) {
player.sendMessage("§e[Rank]§c Bu rütbede Servet 3 büyüsü yasaktır.");
event.setCancelled(true);
}
}
}

@EventHandler
public void onPlayerItemDamage(PlayerItemDamageEvent event) {
Player player = event.getPlayer();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (rank.ordinal() <= PlayerRank.YERLI.ordinal()) {
if (isHigherThanIron(event.getItem().getType())) {
player.sendMessage("§e[Rank]§c Bu rütbede demir üstü eşya kullanamazsın.");
event.setCancelled(true);
}
}

if (rank.ordinal() < PlayerRank.KOMUTAN.ordinal() && isNetherite(event.getItem().getType())) {
player.sendMessage("§e[Rank]§c Bu rütbede netherite eşya kullanamazsın.");
event.setCancelled(true);
}
}

// Elitra Rocket Cooldown
@EventHandler
public void onPlayerToggleSneak(PlayerToggleSneakEvent event) {
Player player = event.getPlayer();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (player.isGliding() && player.isSneaking() && player.getInventory().getItemInMainHand().getType() == Material.FIREWORK_ROCKET) {
long cooldownTime = 0;
if (rank == PlayerRank.KORKUNC) cooldownTime = 5000;
else if (rank == PlayerRank.EMEKTAR) cooldownTime = 2000;

if (cooldownTime > 0) {
long lastUse = rocketCooldown.getOrDefault(player.getUniqueId(), 0L);
if (System.currentTimeMillis() - lastUse < cooldownTime) {
long remaining = (cooldownTime - (System.currentTimeMillis() - lastUse)) / 1000;
player.sendMessage("§e[Rank]§c Roket yeteneğinizin bekleme süresi: " + remaining + " saniye.");
event.setCancelled(true);
} else {
rocketCooldown.put(player.getUniqueId(), System.currentTimeMillis());
}
}
}
}

// Emektar rank axe ability
@EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) {
Player player = event.getPlayer();
PlayerRank rank = getPlayerRank(player.getUniqueId());

if (rank == PlayerRank.EMEKTAR) {
ItemStack heldItem = player.getInventory().getItem(event.getNewSlot());
if (heldItem != null && heldItem.getType().toString().endsWith("_AXE")) {
player.addPotionEffect(new PotionEffect(PotionEffectType.HASTE, 100, 2)); // 5s, Haste 3
}
} else {
// Remove the haste effect if the rank changes or if they unequip the axe
player.removePotionEffect(PotionEffectType.HASTE);
}
}

// Efendi rank abilities
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player && event.getEntity() instanceof Player) {
Player damager = (Player) event.getDamager();
PlayerRank rank = getPlayerRank(damager.getUniqueId());

if (rank == PlayerRank.EFENDI && damager.getInventory().getItemInMainHand().getType() == Material.TRIDENT) {
Player victim = (Player) event.getEntity();

// Give bleed effect (wither effect) and true damage
victim.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 100, 2)); // 5 seconds of Wither 3
event.setDamage(event.getDamage() + 5.0); // Add 5.0 true damage
damager.sendMessage("§e[Rank]§a Mızrak yeteneğinizi kullandınız!");
}
}
}

// --- Utility Methods ---

private void startPlaytimeTask(UUID uuid) {
if (!playtimeTasks.containsKey(uuid)) {
BukkitTask task = new BukkitRunnable() {
@Override
public void run() {
playtime.put(uuid, playtime.getOrDefault(uuid, 0L) + 1000); // Add 1 second
}
}.runTaskTimerAsynchronously(this, 20L, 20L); // Every 1 second
playtimeTasks.put(uuid, task);
}
}

private PlayerRank getPlayerRank(UUID uuid) {
String rankStr = playerDataConfig.getString(uuid.toString() + ".rank", PlayerRank.YABANCI.toString());
return PlayerRank.valueOf(rankStr);
}

private void setPlayerRank(UUID uuid, PlayerRank rank) {
playerDataConfig.set(uuid.toString() + ".rank", rank.toString());
try {
playerDataConfig.save(playerDataFile);
} catch (IOException e) {
getLogger().severe("Could not save player rank!");
}

Player player = Bukkit.getPlayer(uuid);
if (player != null) {
applyRankPermissions(player, rank);
}
}

private void applyRankPermissions(Player player, PlayerRank rank) {
// Reset permissions and effects first
AttributeInstance maxHealthAttribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
if (maxHealthAttribute != null) {
maxHealthAttribute.setBaseValue(20.0);
}
player.removePotionEffect(PotionEffectType.HASTE);

// Apply new permissions/abilities based on rank
switch (rank) {
case EFENDI:
if (maxHealthAttribute != null) {
maxHealthAttribute.setBaseValue(maxHealthAttribute.getBaseValue() + 16.0);
if (player.getHealth() > maxHealthAttribute.getBaseValue()) {
player.setHealth(maxHealthAttribute.getBaseValue());
}
}
break;
default:
// No special permissions to apply on join for lower ranks
break;
}
}

private boolean isHigherThanIron(Material material) {
String name = material.toString();
return name.contains("DIAMOND_") || name.contains("NETHERITE_") || name.contains("GOLD_");
}

private boolean isDiamondOrNetherite(Material material) {
String name = material.toString();
return name.contains("DIAMOND_") || name.contains("NETHERITE_");
}

private boolean isNetherite(Material material) {
return material.toString().contains("NETHERITE_");
}

private String formatPlaytime(long milliseconds) {
long seconds = milliseconds / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
return String.format("%d saat, %d dakika, %d saniye", hours, minutes % 60, seconds % 60);
}
}



Kod burda dostum
 
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