Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Szukam pluginu na przywrócenie systemu enchantu z 1.7 do 1.8


thehekketisky

Rekomendowane odpowiedzi

Opublikowano

Witam, napotkałem się ostatnio na plugin OldEnchanting https://www.spigotmc...g-plugin.17014/.


Jest w nim (niby) przywrócenie starego systemu enchantowania z 1.7 co prawda pobiera nam 30lvl i daje darmowy lapis, ALE nie blokuje widoczności enchantu(co nam wypadnie na dany przedmiot).


Chciałbym się więc zapytać czy istnieję plugin na zablokowanie takiego czegoś lub czy jest to możliwe do napisania za opłatą, a jeżeli nie jest to możliwe w pluginie to czy ktoś podejmie się grzebaniu w silniku, oczywiście za opłatą. Dziękuje za każdą pomoc, napewno takie osoby będą w jakiś sposób wynagradzane.


Opublikowano


package co.marcin.enchantofferhide;

 

import org.bukkit.enchantments.Enchantment;

import org.bukkit.enchantments.EnchantmentOffer;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.enchantment.PrepareItemEnchantEvent;

import org.bukkit.plugin.java.JavaPlugin;

 

public class EnchantOfferHidePlugin extends JavaPlugin implements Listener {

@Override

public void onEnable() {

getServer().getPluginManager().registerEvents(this, this);

}

 

@EventHandler

public void onPrepareItemEnchant(PrepareItemEnchantEvent event) {

for(EnchantmentOffer offer : event.getOffers()) {

offer.setEnchantment(Enchantment.DURABILITY);

offer.setEnchantmentLevel(1);

}

}

}

 

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano
package co.marcin.enchantofferhide;

import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentOffer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class EnchantOfferHidePlugin extends JavaPlugin implements Listener {
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPrepareItemEnchant(PrepareItemEnchantEvent event) {
        for(EnchantmentOffer offer : event.getOffers()) {
            offer.setEnchantment(Enchantment.DURABILITY);
            offer.setEnchantmentLevel(1);
        }
    }
}

 

Tyle że nie ma EnchantmentOffer w 1.8

Opublikowano

No przyznaję, popełniłem gafę, więc wypadanaprawić chociaż chwilę nad tym siedziałem. Przekazywane jest jedynie ID enchantu (Możesz tam wstawić dowolny enchant ale nie dowolny tekst), nie wiem dlaczego poziom się w ogóle nie wysyła i wychodzą krzaki. W każdym razie efekt osiągnięty.

Tu masz ten pakiet: http://wiki.vg/Protocol#Window_Property

Netty brałem z NovaGuilds.

package co.marcin.enchantofferhide;

import io.netty.channel.Channel;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.ChannelPromise;
import net.minecraft.server.v1_8_R3.PacketPlayOutWindowData;
import org.apache.commons.lang.Validate;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

import java.lang.reflect.Field;

public class EnchantOfferHidePlugin extends JavaPlugin implements Listener {
    protected static Field aField;
    protected static Field bField;
    protected static Field cField;

    static {
        try {
            aField = PacketPlayOutWindowData.class.getDeclaredField("a");
            bField = PacketPlayOutWindowData.class.getDeclaredField("b");
            cField = PacketPlayOutWindowData.class.getDeclaredField("c");

            aField.setAccessible(true);
            bField.setAccessible(true);
            cField.setAccessible(true);
        }
        catch(NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        registerPlayer(event.getPlayer());
    }

    private static Channel getChannel(Player player) {
        return ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
    }

    public void registerPlayer(final Player player) {
        Channel c = getChannel(player);
        ChannelHandler handler = new ChannelDuplexHandler() {
            @Override
            public void write(ChannelHandlerContext ctx, Object packet, ChannelPromise promise) throws Exception {
                if(packet != null && packet instanceof PacketPlayOutWindowData) {
                    int a, b;
                    a = aField.getInt(packet);
                    b = bField.getInt(packet);

                    if(a == 1 && (b == 4 || b == 5 || b == 6)) {
                        cField.setInt(packet, 34);
                    }
                }

                super.write(ctx, packet, promise);
            }
        };

        ChannelPipeline cp = c.pipeline();
        if(cp.names().contains("packet_handler")) {
            if(cp.names().contains("EnchantOfferHide")) {
                cp.replace("EnchantOfferHide", "EnchantOfferHide", handler);
            }
            else {
                cp.addBefore("packet_handler", "EnchantOfferHide", handler);
            }
        }
    }
}

@Edit

Pakiet wysyła się cały czas, więc losowanie nowego ID za każdym razem daje śmieszny efekt przeskakującego tekstu (jak ,,kolor" &k). Niestety przez ten level się rozjeżdża ;)

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

No przyznaję, popełniłem gafę, więc wypadanaprawić chociaż chwilę nad tym siedziałem. Przekazywane jest jedynie ID enchantu (Możesz tam wstawić dowolny enchant ale nie dowolny tekst), nie wiem dlaczego poziom się w ogóle nie wysyła i wychodzą krzaki. W każdym razie efekt osiągnięty.

Tu masz ten pakiet: http://wiki.vg/Protocol#Window_Property

Netty brałem z NovaGuilds.

 

package co.marcin.enchantofferhide;import io.netty.channel.Channel;import io.netty.channel.ChannelDuplexHandler;import io.netty.channel.ChannelHandler;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelPipeline;import io.netty.channel.ChannelPromise;import net.minecraft.server.v1_8_R3.PacketPlayOutWindowData;import org.apache.commons.lang.Validate;import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerJoinEvent;import org.bukkit.plugin.java.JavaPlugin;import java.lang.reflect.Field;public class EnchantOfferHidePlugin extends JavaPlugin implements Listener {    protected static Field aField;    protected static Field bField;    protected static Field cField;    static {        try {            aField = PacketPlayOutWindowData.class.getDeclaredField("a");            bField = PacketPlayOutWindowData.class.getDeclaredField("b");            cField = PacketPlayOutWindowData.class.getDeclaredField("c");            aField.setAccessible(true);            bField.setAccessible(true);            cField.setAccessible(true);        }        catch(NoSuchFieldException e) {            e.printStackTrace();        }    }    @Override    public void onEnable() {        getServer().getPluginManager().registerEvents(this, this);    }    @EventHandler    public void onPlayerJoin(PlayerJoinEvent event) {        registerPlayer(event.getPlayer());    }    private static Channel getChannel(Player player) {        return ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;    }    public void registerPlayer(final Player player) {        Channel c = getChannel(player);        ChannelHandler handler = new ChannelDuplexHandler() {            @Override            public void write(ChannelHandlerContext ctx, Object packet, ChannelPromise promise) throws Exception {                if(packet != null && packet instanceof PacketPlayOutWindowData) {                    int a, b;                    a = aField.getInt(packet);                    b = bField.getInt(packet);                    if(a == 1 && (b == 4 || b == 5 || b == 6)) {                        cField.setInt(packet, 34);                    }                }                super.write(ctx, packet, promise);            }        };        ChannelPipeline cp = c.pipeline();        if(cp.names().contains("packet_handler")) {            if(cp.names().contains("EnchantOfferHide")) {                cp.replace("EnchantOfferHide", "EnchantOfferHide", handler);            }            else {                cp.addBefore("packet_handler", "EnchantOfferHide", handler);            }        }    }}
@Edit

Pakiet wysyła się cały czas, więc losowanie nowego ID za każdym razem daje śmieszny efekt przeskakującego tekstu (jak ,,kolor" &k). Niestety przez ten level się rozjeżdża ;)

Wyslal byś mi to w postaci pliku jar? Bardzo byłbym wdzięczny. (silnik spigot 1.8.8)

Opublikowano

Daję Ci oficjalnie wolną rękę jeśli chodzi o kompilację tego kodu. Zaznaczam, że kod z moich postów w tym temacie udostępniam na licencji GPLv3 lub późniejszej. Pamiętaj o CraftBukkicie ;)

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

A sprawdziłeś, czy nie działa?

 

...

 

 

Ten import był do debugu który usunąłem już edytując post.

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Opublikowano

Stwierdzam, że działa, brak pluginów, silnik 1.8.8. Popełniłeś błąd, nie domyślę się gdzie.

Dodaj mój nick do posta jeśli potrzebujesz pomocy | Piszę pluginy na zlecenie | Pomagam z Linuxem

newlogo.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...