1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Мод [Решено]Дополнение к WorldGuard(1.7.10)

Тема в разделе "Модификации клиента", создана пользователем Dethvale, 5 сен 2014.

  1. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    UP
    Может быть кто-нибудь возьмется за разработку? Насчет цены, думаю договоримся..
     
  2. Konstantin773

    Konstantin773 Старожил Пользователь

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    За 3 минуты написал.....компилируй и проверяй сам
    Код:
    package k773;
    
    import java.util.Iterator;
    
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
    import com.sk89q.worldguard.protection.ApplicableRegionSet;
    import com.sk89q.worldguard.protection.regions.ProtectedRegion;
    
    public class wgenter  extends JavaPlugin implements Listener{
        WorldGuardPlugin wg = (WorldGuardPlugin) Bukkit.getPluginManager().getPlugin("WorldGuard");
    
        public void onEnable(){
            Bukkit.getMessenger().registerOutgoingPluginChannel(this, "wg_rg");
            Bukkit.getMessenger().registerOutgoingPluginChannel(this, "wg_build");
            this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                public void run() {
                    sendPackets();
                }
            }, 20,20);
        }
        public void sendPackets(){
           for (Player s1 : getServer().getOnlinePlayers())
            {
                ApplicableRegionSet set = this.wg.getRegionManager(s1.getWorld()).getApplicableRegions(s1.getLocation());
                if (set.size() == 0)
                {
                    s1.sendPluginMessage(this, "wg_rg", "GLOBAL".getBytes());
                    s1.sendPluginMessage(this, "wg_build", "true".getBytes());
                }
                else
                {
                   Iterator localIterator = set.iterator();
                   if (localIterator.hasNext())
                   {
                        ProtectedRegion s2 = (ProtectedRegion)localIterator.next();
                        boolean build = wg.canBuild(s1, s1.getLocation());
                        s1.sendPluginMessage(this, "wg_build", String.valueOf(build).getBytes());
                        s1.sendPluginMessage(this, "wg_rg", s2.getId().getBytes());
                   }
                }
            }
        }
    }
    
    
    Код:
    package net.k773;
    
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.ScaledResolution;
    import net.minecraft.network.INetworkManager;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraftforge.client.event.RenderGameOverlayEvent;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.EventPriority;
    import net.minecraftforge.event.ForgeSubscribe;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.network.Player;
    @Mod(modid = "WG", name = "WG Region by K773", version = "0.1")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"wg_rg","wg_build"}, packetHandler = WgMod.class)
    public class WgMod implements IPacketHandler{
        static boolean build = false;
        static String region = "GLOBAL";
        static Minecraft mc = Minecraft.getMinecraft();
        @Mod.EventHandler
        public void load(FMLInitializationEvent event) {
            MinecraftForge.EVENT_BUS.register(this);
        }
        @ForgeSubscribe(priority=EventPriority.HIGH)
        public void eventHandler(RenderGameOverlayEvent.Post event) {
              if(event.type==RenderGameOverlayEvent.ElementType.ALL){
                  mc.ingameGUI.drawCenteredString(mc.fontRenderer, (build ? "§f[§2" : "§f[§c")+region+"§f]", event.resolution.getScaledWidth()/2, 4, 0xFFFFFF);
              }
        }
        @Override
        public void onPacketData(INetworkManager manager,Packet250CustomPayload packet, Player player) {
            if(packet.channel.equals("wg_rg")) region = new String(packet.data);
            if(packet.channel.equals("wg_build")) {
                build = Boolean.valueOf(new String(packet.data));
            }
        }
    }
    
     
    Последнее редактирование: 17 ноя 2014
  3. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    Скомпилировал я плагин.. Залил на сервер..
    Исправил ошибки мода.. Запустил клиент через eclips.. В каком бы я регионе не находился, мне всегда показывает [GLOBAL]..
    Снимок экрана (88).png
    Плагин:
    package k773;

    import java.util.Iterator;

    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.plugin.java.JavaPlugin;


    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
    import com.sk89q.worldguard.protection.ApplicableRegionSet;
    import com.sk89q.worldguard.protection.regions.ProtectedRegion;

    public class wgenter extends JavaPlugin implements Listener{
    WorldGuardPlugin wg = (WorldGuardPlugin) Bukkit.getPluginManager().getPlugin("WorldGuard");

    public void onEnable(){
    Bukkit.getMessenger().registerOutgoingPluginChannel(this, "wg_rg");
    this.getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    public void run() {
    sendPackets();
    }
    }, 20,20);
    }
    public void sendPackets(){
    for(Player s1 : getServer().getOnlinePlayers()){
    ApplicableRegionSet set = wg.getRegionManager(s1.getWorld()).getApplicableRegions(s1.getLocation());
    Iterator<ProtectedRegion> it = set.iterator();
    if(!it.hasNext()) {
    s1.sendPluginMessage(this, "wg_rg", "GLOBAL".getBytes());
    } else {
    s1.sendPluginMessage(this, "wg_rg", it.next().getId().getBytes());
    }
    }
    }
    }
    Мод:
    WgMod.class

    package net.k773;

    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.ScaledResolution;
    import net.minecraft.network.INetworkManager;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraftforge.client.event.RenderGameOverlayEvent;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.EventPriority;
    import net.minecraftforge.event.ForgeSubscribe;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.network.Player;
    @Mod(modid = "WG", name = "WG Region by K773", version = "0.1")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = {"wg_rg"}, packetHandler = Packet.class)
    public class WgMod {
    static String region = "[GLOBAL]";
    static Minecraft mc = Minecraft.getMinecraft();
    @Mod.EventHandler
    public void load(FMLInitializationEvent event) {
    MinecraftForge.EVENT_BUS.register(this);
    }
    @ForgeSubscribe(priority=EventPriority.HIGH)
    public void eventHandler(RenderGameOverlayEvent.Post event) {
    if(event.type==RenderGameOverlayEvent.ElementType.ALL){
    mc.ingameGUI.drawCenteredString(mc.fontRenderer, region, event.resolution.getScaledWidth()/2, 4, 0xFFFFFF);
    }
    }
    }

    Packet.class

    package net.k773;

    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.ScaledResolution;
    import net.minecraft.network.INetworkManager;
    import net.minecraft.network.packet.Packet250CustomPayload;
    import net.minecraftforge.client.event.RenderGameOverlayEvent;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.EventPriority;
    import net.minecraftforge.event.ForgeSubscribe;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.network.Player;
    public class Packet implements IPacketHandler
    {
    @Override
    public void onPacketData(INetworkManager manager,Packet250CustomPayload packet, Player player) {
    if(packet.channel.equals("wg_rg")){
    String region = "§e[§2"+new String(packet.data)+"§e]";
    }

    }
    }
     
  4. Konstantin773

    Konstantin773 Старожил Пользователь

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    И в plugin.yml добавь
    depend: [WorldGuard]
    А то если плагин запустится раньше WG, то плагин не найдет WG
     
    Последнее редактирование: 28 окт 2014
  5. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    Сервер заработал.. А клиент не получает пакет
    Понял в чем причина была.. Мод переписал немного.. и все заработало
    Кому нужно, выкладываю скомпилированные файлы..
    Плагин
    Мод, содержимое архива залить в корень minecraft.jar
     
  6. Jayman

    Jayman Активный участник Пользователь

    Баллы:
    76
    А как сделать так: если ты можешь строить - то у тебя название региона написано зелёным цветом, а если не можешь строить, то красным?
     
  7. Yuri1.6

    Yuri1.6 Старожил Пользователь

    Баллы:
    123
    Skype:
    Yuri1.6
    Имя в Minecraft:
    YouTy6bl4
    В коде ошибка, я её не могу найти, но если поставить на 1.6.4 то текстура воды не прозрачная становится.
     
  8. Konstantin773

    Konstantin773 Старожил Пользователь

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Добавляй цветовые коды к названию региона
    Код:
    String color = this.wg.canBuild(s1,s1.getLocation()) ? "§a" : "§c";
    s1.sendPluginMessage(this, "wg_rg", (color+s2.getId()).getBytes());
    

    В моде, всего-лишь, надо аннотации изменить под Forge 1.7.10. Плагин и так встанет на 1.7.10.
    Попробуй
    Код:
       @ForgeSubscribe(priority=EventPriority.HIGH)
       public void eventHandler(RenderGameOverlayEvent.Text event) {
              mc.ingameGUI.drawCenteredString(mc.fontRenderer, region, event.resolution.getScaledWidth()/2, 4, 0xFFFFFF);
       }
    
     
  9. Jayman

    Jayman Активный участник Пользователь

    Баллы:
    76
    Про цветовые коды я знаю, но как получить инфу: может ли игрок ломать/ставить блоки в данном регионе?
     
  10. Jayman

    Jayman Активный участник Пользователь

    Баллы:
    76
    А зечем так, то? Можно просто хранить скобки( [регион] ) в переменной. И когда поступает пакет, то в зависимости от того, может строить игрок или нет просто изменять переменную со скобками.
     
  11. Radviger

    Radviger Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    Radviger
    Нет, всё гораздо хуже. С версии 1.7 можанги используют либу netty для работы с пакетами, да и сами пакеты кардинально поменяли. Теперь даже пакет PacketCustom250Playload называется C17PacketCustomPayload.
    Я больше часа мучился с этим бредом, так и не разобрался толком, как отловить пакет...
     
  12. Yuri1.6

    Yuri1.6 Старожил Пользователь

    Баллы:
    123
    Skype:
    Yuri1.6
    Имя в Minecraft:
    YouTy6bl4
    Я подсказал вариант удобный Мне.)
     
  13. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    В коде, написанном @Konstantin773, уже реализовано
    Код:
    this.wg.canBuild(s1,s1.getLocation())
     
  14. Jayman

    Jayman Активный участник Пользователь

    Баллы:
    76
    Не заметил)
    А это в плагин или в мод пихать?
     
  15. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    В плагин..
    Есть единственная проблема.. При использовании
    Код:
    String color = this.wg.canBuild(s1,s1.getLocation()) ? "§a" : "§c";
    s1.sendPluginMessage(this, "wg_rg", (color+s2.getId()).getBytes());
    перед названием региона "В"..
    Снимок экрана (89).png
     
  16. Jayman

    Jayman Активный участник Пользователь

    Баллы:
    76
    Это если betterfont стоит или корявый файл шрифта.
     
  17. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    betterfont не ставил.. А шрифты стандартные..
     
  18. MrGiperCreeper

    MrGiperCreeper Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Ivan_Alone
    Надо лишь открыть .class файл в InClassTranslator (самое простое решение) и убрать B. Вот так вот!:creeper: Еще вариант - сменить кодировку исходника с цветом на ANSI.
     
  19. Автор темы
    Dethvale

    Dethvale Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    DethVale
    Не все так просто.. букву В InClassTranslator не видит..
    Снимок экрана (90).png
     
  20. MrGiperCreeper

    MrGiperCreeper Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Ivan_Alone
    Хм, у меня видит... Ну, я второй способ дал) Он должен сработать.
     

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