Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин на атрибуты из Forge

lampasador

Активный участник
Баллы
61
Имя в Minecraft
Lampasador
Столкнулся с проблемой, когда делал арену, которую в идеале хотелось бы перенести на постоянный сервер, и желательно чтобы на неё могли заходить хоть с ванили, хоть с фабрика. Но чтобы сохранялись и работали атрибуты из форджа:
Сам фордж добавляет 6 новых атрибутов без которых сложно разнообразить пвп в майнкрафте, самый главный это Entity reach, который отвечает за то на каком расстоянии ты можешь ударить сущность.
Проблема заключается в том что когда человек заходит не с форджа, то его клиент попросту игнорирует все эти атрибуты и работает без них( например у предмета Entity reach -50% но бьет он без уменьшения расстояния и вообще не видит этого параметра у предмета, и тогда выходит нечестная игра.

Я хотел узнать возможно ли вообще создать такой плагин который создает такие атрибуты? или есть ли уже подобные? чтобы они работали и отображались у всех. лазил по интернету и ничего не нашел.

Очень желательно, чтобы плагин работал на версии 1.19.4 или если это вообще возможно на 1.20.1 Плагин должен добавлять Атрибуты и возможность их изменять через команду (/attribute)

Атрибуты block_reach - Расстояние, с которого игрок может взаимодействовать с блоками (базовое значение 4.5)

entity_reach - Расстояние, с которого игрок может взаимодействовать с ентити (базовое значение 4.5)

step_height_addition - дополнение к высоте, на которую может подняться игрок без использования прыжка (уперевшись в блок) (базовое значение 0)

swim_speed - скорость плаванья (Базовое значение 1)

entity_gravity - не знаю как описать этот атрибут. он отвечает за скорость падения сущности (базовое значение 0.08)
image.png
image.png
 

Вложения:

  • upload_2023-7-15_23-1-14.png
    upload_2023-7-15_23-1-14.png
    Размер файла
    15,8 КБ
    Просмотров
    3
  • upload_2023-7-15_23-1-52.png
    upload_2023-7-15_23-1-52.png
    Размер файла
    17,1 КБ
    Просмотров
    4
Последнее редактирование:
Невозможно, только через костыли которые дай бог будут работать при 20 ТПС.
 
Невозможно, только через костыли которые дай бог будут работать при 20 ТПС.
Получается это всё таки возможно? даже если через костыли то это намного лучше чем смирится с тем что пвп невозможно без форджа улучшить, к сожалению я в написании плагинов и чего либо ещё слаб, и это стало серьезной проблемой, которую хочется решить.
 
Получается это всё таки возможно? даже если через костыли то это намного лучше чем смирится с тем что пвп невозможно без форджа улучшить, к сожалению я в написании плагинов и чего либо ещё слаб, и это стало серьезной проблемой, которую хочется решить.
За такое врятли в целом кто-то возьмется.
 
За такое врятли в целом кто-то возьмется.
Жаль, я бы очень хотел чтобы такое вообще появилось, да и деньги бы я за такое заплатил, только я не знаю у кого можно просить и где.
 
Столкнулся с проблемой, когда делал арену, которую в идеале хотелось бы перенести на постоянный сервер, и желательно чтобы на неё могли заходить хоть с ванили, хоть с фабрика. Но чтобы сохранялись и работали атрибуты из форджа:
Сам фордж добавляет 6 новых атрибутов без которых сложно разнообразить пвп в майнкрафте, самый главный это Entity reach, который отвечает за то на каком расстоянии ты можешь ударить сущность.
Проблема заключается в том что когда человек заходит не с форджа, то его клиент попросту игнорирует все эти атрибуты и работает без них( например у предмета Entity reach -50% но бьет он без уменьшения расстояния и вообще не видит этого параметра у предмета, и тогда выходит нечестная игра.

Я хотел узнать возможно ли вообще создать такой плагин который создает такие атрибуты? или есть ли уже подобные? чтобы они работали и отображались у всех. лазил по интернету и ничего не нашел.

Очень желательно, чтобы плагин работал на версии 1.19.4 или если это вообще возможно на 1.20.1 Плагин должен добавлять Атрибуты и возможность их изменять через команду (/attribute)

Атрибуты block_reach - Расстояние, с которого игрок может взаимодействовать с блоками (базовое значение 4.5)

entity_reach - Расстояние, с которого игрок может взаимодействовать с ентити (базовое значение 4.5)

step_height_addition - дополнение к высоте, на которую может подняться игрок без использования прыжка (уперевшись в блок) (базовое значение 0)

swim_speed - скорость плаванья (Базовое значение 1)

entity_gravity - не знаю как описать этот атрибут. он отвечает за скорость падения сущности (базовое значение 0.08)
image.png
image.png
Код:
package com.example.attributeplugin;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class AttributePlugin extends JavaPlugin implements CommandExecutor {

    @Override
    public void onEnable() {
        getLogger().info("AttributePlugin has been enabled!");
        getCommand("attribute").setExecutor(this);
    }

    @Override
    public void onDisable() {
        getLogger().info("AttributePlugin has been disabled!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("attribute")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("This command can only be used by players.");
                return true;
            }

            Player player = (Player) sender;

            if (args.length < 3) {
                player.sendMessage("Usage: /attribute <item_slot> <attribute_name> <value>");
                return true;
            }

            int itemSlot;
            try {
                itemSlot = Integer.parseInt(args[0]);
            } catch (NumberFormatException e) {
                player.sendMessage("Invalid item slot. Please provide a valid number.");
                return true;
            }

            String attributeName = args[1].toLowerCase();
            double value;

            try {
                value = Double.parseDouble(args[2]);
            } catch (NumberFormatException e) {
                player.sendMessage("Invalid value. Please provide a valid number.");
                return true;
            }

            ItemStack item = player.getInventory().getItem(itemSlot);

            if (item == null || item.getType() == Material.AIR) {
                player.sendMessage("No item found in the specified slot.");
                return true;
            }

            applyAttribute(player, item, attributeName, value);
            player.sendMessage("Attribute " + attributeName + " set to " + value + " for the item in slot " + itemSlot);

            return true;
        }
        return false;
    }

    private void applyAttribute(Player player, ItemStack item, String attributeName, double value) {
        AttributeModifier modifier = new AttributeModifier("custom_" + attributeName, value, AttributeModifier.Operation.ADD_NUMBER);

        switch (attributeName) {
            case "block_reach":
                item.getAttributeModifiers(Attribute.GENERIC_MOVEMENT_SPEED).clear();
                item.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, modifier);
                break;
            case "entity_reach":
                item.getAttributeModifiers(Attribute.GENERIC_FOLLOW_RANGE).clear();
                item.addAttributeModifier(Attribute.GENERIC_FOLLOW_RANGE, modifier);
                break;
            case "step_height_addition":
                item.getAttributeModifiers(Attribute.GENERIC_MAX_HEALTH).clear();
                item.addAttributeModifier(Attribute.GENERIC_MAX_HEALTH, modifier);
                break;
            case "swim_speed":
                item.getAttributeModifiers(Attribute.GENERIC_SWIM_SPEED).clear();
                item.addAttributeModifier(Attribute.GENERIC_SWIM_SPEED, modifier);
                break;
            case "entity_gravity":
                item.getAttributeModifiers(Attribute.GENERIC_KNOCKBACK_RESISTANCE).clear();
                item.addAttributeModifier(Attribute.GENERIC_KNOCKBACK_RESISTANCE, modifier);
                break;
            default:
                player.sendMessage("Invalid attribute name. Available attributes: block_reach, entity_reach, step_height_addition, swim_speed, entity_gravity");
                break;
        }
    }
}
Если бы вы читали документацию то знали бы, что эти атрибуты есть в api ведра. Привожу примерную базовую реализацию.
 

Поделиться этой страницей

Назад
Верх