This commit is contained in:
nulli0n 2024-09-18 21:29:11 +05:00
parent 8623159ca6
commit 4399137733
13 changed files with 119 additions and 53 deletions

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId>
<version>4.2.1</version>
<version>4.2.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId>
<version>4.2.1</version>
<version>4.2.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -48,7 +48,6 @@
<id>codemc-releases</id>
<url>https://repo.codemc.io/repository/maven-releases/</url>
</repository>
</repositories>
<dependencies>
@ -90,19 +89,19 @@
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>API</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>MC_1_21</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
</dependencies>

View File

@ -52,6 +52,15 @@ public class BaseCommands {
.executes((context, arguments) -> enchantItem(plugin, context, arguments))
);
rootNode.addChildren(DirectNode.builder(plugin, "disenchant")
.description(Lang.COMMAND_DISENCHANT_DESC)
.permission(Perms.COMMAND_DISENCHANT)
.withArgument(CommandArguments.enchantArgument(CommandArguments.ENCHANT).required())
.withArgument(ArgumentTypes.player(CommandArguments.PLAYER))
.withArgument(CommandArguments.slotArgument(CommandArguments.SLOT))
.executes((context, arguments) -> disenchantItem(plugin, context, arguments))
);
rootNode.addChildren(DirectNode.builder(plugin, "list")
.playerOnly()
.description(Lang.COMMAND_LIST_DESC)
@ -85,7 +94,7 @@ public class BaseCommands {
private static int getLevel(@NotNull Enchantment enchantment, @NotNull ParsedArguments arguments) {
int level = arguments.getIntArgument(CommandArguments.LEVEL, -1);
if (level < 1) {
if (level <= 0) {
level = EnchantUtils.randomLevel(enchantment);
}
return level;
@ -128,9 +137,6 @@ public class BaseCommands {
if (level > 0) {
EnchantUtils.add(item, enchantment, level, true);
}
else EnchantUtils.remove(item, enchantment);
//player.getInventory().setItem(slot, item);
(context.getSender() == player ? Lang.COMMAND_ENCHANT_DONE_SELF : Lang.COMMAND_ENCHANT_DONE_OTHERS).getMessage()
.replace(Placeholders.forPlayer(player))
@ -142,6 +148,30 @@ public class BaseCommands {
return true;
}
public static boolean disenchantItem(@NotNull EnchantsPlugin plugin, @NotNull CommandContext context, @NotNull ParsedArguments arguments) {
Player player = CommandUtil.getPlayerOrSender(context, arguments, CommandArguments.PLAYER);
if (player == null) return false;
EquipmentSlot slot = arguments.getArgument(CommandArguments.SLOT, EquipmentSlot.class, EquipmentSlot.HAND);
ItemStack item = player.getInventory().getItem(slot);
if (item == null || item.getType().isAir()) {
Lang.COMMAND_ENCHANT_ERROR_NO_ITEM.getMessage().send(context.getSender());
return false;
}
Enchantment enchantment = arguments.getEnchantmentArgument(CommandArguments.ENCHANT);
EnchantUtils.remove(item, enchantment);
(context.getSender() == player ? Lang.COMMAND_DISENCHANT_DONE_SELF : Lang.COMMAND_DISENCHANT_DONE_OTHERS).getMessage()
.replace(Placeholders.forPlayer(player))
.replace(Placeholders.GENERIC_ITEM, ItemUtil.getItemName(item))
.replace(Placeholders.GENERIC_ENCHANT, EnchantUtils.getLocalized(enchantment))
.send(context.getSender());
return true;
}
public static boolean giveFuel(@NotNull EnchantsPlugin plugin, @NotNull CommandContext context, @NotNull ParsedArguments arguments) {
Player player = context.getPlayerOrThrow();
CustomEnchantment enchantment = arguments.getArgument(CommandArguments.ENCHANT, CustomEnchantment.class);

View File

@ -15,6 +15,7 @@ public class Lang extends CoreLang {
public static final LangString COMMAND_LIST_DESC = LangString.of("Command.List.Desc", "List of custom enchantments.");
public static final LangString COMMAND_ENCHANT_DESC = LangString.of("Command.Enchant.Desc", "Enchant item in specific slot.");
public static final LangString COMMAND_DISENCHANT_DESC = LangString.of("Command.Disenchant.Desc", "Disenchant item in specific slot.");
public static final LangString COMMAND_BOOK_DESC = LangString.of("Command.Book.Desc", "Give a book with specific enchantment.");
public static final LangString COMMAND_RARITY_BOOK_DESC = LangString.of("Command.RarityBook.Desc", "Give a book with enchantment of specific rarity.");
public static final LangString COMMAND_GET_FUEL_DESC = LangString.of("Command.GetFuel.Desc", "Get enchantment fuel item.");
@ -41,6 +42,14 @@ public class Lang extends CoreLang {
LIGHT_GRAY.enclose(LIGHT_YELLOW.enclose(PLAYER_DISPLAY_NAME) + "'s " + LIGHT_YELLOW.enclose(GENERIC_ITEM) + " enchanted with " + LIGHT_YELLOW.enclose(GENERIC_ENCHANT + " " + GENERIC_LEVEL) + "!")
);
public static final LangText COMMAND_DISENCHANT_DONE_SELF = LangText.of("Command.Disenchant.Done.Self",
LIGHT_GRAY.enclose(LIGHT_YELLOW.enclose(GENERIC_ITEM) + " disenchanted from " + LIGHT_YELLOW.enclose(GENERIC_ENCHANT) + "!")
);
public static final LangText COMMAND_DISENCHANT_DONE_OTHERS = LangText.of("Command.Disenchant.Done.Others",
LIGHT_GRAY.enclose(LIGHT_YELLOW.enclose(PLAYER_DISPLAY_NAME) + "'s " + LIGHT_YELLOW.enclose(GENERIC_ITEM) + " disenchanted from " + LIGHT_YELLOW.enclose(GENERIC_ENCHANT) + "!")
);
public static final LangText COMMAND_ENCHANT_ERROR_NO_ITEM = LangText.of("Command.Enchant.Error.NoItem",
LIGHT_RED.enclose("There is no item to enchant!")
);

View File

@ -13,6 +13,7 @@ public class Perms {
public static final UniPermission COMMAND_BOOK = new UniPermission(PREFIX_COMMAND + "book");
public static final UniPermission COMMAND_ENCHANT = new UniPermission(PREFIX_COMMAND + "enchant");
public static final UniPermission COMMAND_DISENCHANT = new UniPermission(PREFIX_COMMAND + "disenchant");
public static final UniPermission COMMAND_GET_FUEL = new UniPermission(PREFIX_COMMAND + "getfuel");
public static final UniPermission COMMAND_LIST = new UniPermission(PREFIX_COMMAND + "list");
public static final UniPermission COMMAND_LIST_OTHERS = new UniPermission(PREFIX_COMMAND + "list.others");
@ -25,6 +26,7 @@ public class Perms {
COMMAND.addChildren(
COMMAND_BOOK,
COMMAND_ENCHANT,
COMMAND_DISENCHANT,
COMMAND_GET_FUEL,
COMMAND_LIST, COMMAND_LIST_OTHERS,
COMMAND_RELOAD,

View File

@ -54,6 +54,7 @@ public class AutoReelEnchant extends GameEnchantment implements FishingEnchant {
this.plugin.runTask(task -> {
if (event.isCancelled()) return;
if (!event.getHook().isValid()) return;
plugin.getEnchantNMS().sendAttackPacket(event.getPlayer(), id);
plugin.getEnchantNMS().retrieveHook(event.getHook(), item, slot);

View File

@ -1,5 +1,6 @@
package su.nightexpress.excellentenchants.enchantment.impl.tool;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
@ -158,23 +159,38 @@ public class SilkChestEnchant extends GameEnchantment implements BlockDropEnchan
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onSilkChestStore(InventoryClickEvent event) {
Inventory inventory = event.getInventory();
if (inventory.getType() == InventoryType.CRAFTING || inventory.getType() == InventoryType.CREATIVE) return;
if (inventory.getType() != InventoryType.CRAFTING) {
int hotkey = event.getHotbarButton();
if (hotkey >= 0) {
Player player = (Player) event.getWhoClicked();
ItemStack item;
if (event.getHotbarButton() >= 0) {
item = player.getInventory().getItem(event.getHotbarButton());
}
else item = event.getCurrentItem();
if (item == null || item.getType().isAir() || !this.isSilkChest(item)) return;
Inventory clicked = event.getClickedInventory();
if (event.getClick() != ClickType.NUMBER_KEY) {
if (clicked != null && clicked.equals(event.getView().getTopInventory())) return;
}
ItemStack hotItem = player.getInventory().getItem(hotkey);
if (hotItem != null && this.isSilkChest(hotItem)) {
event.setCancelled(true);
return;
}
}
ItemStack item = event.getCurrentItem();
if (item == null) return;
if (this.isSilkChest(item)) {
event.setCancelled(true);
return;
}
return;
}
ItemStack item = event.getCurrentItem();
if (item == null) return;
boolean isRightClick = (event.isRightClick() && !event.isShiftClick()) || event.getClick() == ClickType.CREATIVE;
if (item.getType() == Material.BUNDLE && isRightClick) {
ItemStack cursor = event.getView().getCursor(); // Creative is shit, undetectable.
if (cursor != null && this.isSilkChest(cursor)) {
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)

View File

@ -14,6 +14,7 @@ import io.github.retrooper.packetevents.util.SpigotConversionUtil;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import su.nightexpress.excellentenchants.EnchantsPlugin;
import su.nightexpress.excellentenchants.util.EnchantUtils;
@ -30,10 +31,6 @@ public class PacketEventsHook {
registered = true;
}
// public static void shutdown() {
// if (!registered) return;
// }
private static class Listener implements PacketListener {
@Override
@ -46,32 +43,46 @@ public class PacketEventsHook {
if (type == PacketType.Play.Server.SET_SLOT) {
WrapperPlayServerSetSlot setSlot = new WrapperPlayServerSetSlot(event);
ItemStack item = SpigotConversionUtil.toBukkitItemStack(setSlot.getItem());
item = EnchantUtils.addDescription(item);
setSlot.setItem(SpigotConversionUtil.fromBukkitItemStack(item));
event.markForReEncode(true);
ItemStack item = EnchantUtils.addDescription(toBukkit(setSlot.getItem()));
setSlot.setItem(fromBukkit(item));
}
else if (type == PacketType.Play.Server.WINDOW_ITEMS) {
WrapperPlayServerWindowItems windowItems = new WrapperPlayServerWindowItems(event);
windowItems.getItems().replaceAll(packetItem -> {
return SpigotConversionUtil.fromBukkitItemStack(EnchantUtils.addDescription(SpigotConversionUtil.toBukkitItemStack(packetItem)));
return fromBukkit(EnchantUtils.addDescription(toBukkit(packetItem)));
});
event.markForReEncode(true);
}
else if (type == PacketType.Play.Server.MERCHANT_OFFERS) {
WrapperPlayServerMerchantOffers merchantOffers = new WrapperPlayServerMerchantOffers(event);
List<MerchantOffer> offers = merchantOffers.getMerchantOffers();
offers.forEach(offer -> {
ItemStack result = SpigotConversionUtil.toBukkitItemStack(offer.getOutputItem());
offer.setOutputItem(SpigotConversionUtil.fromBukkitItemStack(EnchantUtils.addDescription(result)));
ItemStack result = toBukkit(offer.getOutputItem());
offer.setOutputItem(fromBukkit(EnchantUtils.addDescription(result)));
});
}
else return;
event.markForReEncode(true);
}
@NotNull
private static ItemStack toBukkit(@NotNull com.github.retrooper.packetevents.protocol.item.ItemStack pooperStack/*, @NotNull ClientVersion version*/) {
// pooperStack.getEnchantments(version).forEach(enchantment -> {
// String name = enchantment.getType().getName().getKey();
// CustomEnchantment custom = EnchantRegistry.getById(name);
// if (custom == null) return;
//
// EnchantUtils.add(item, custom.getBukkitEnchantment(), enchantment.getLevel(), true);
// });
return SpigotConversionUtil.toBukkitItemStack(pooperStack);
}
@Nullable
private static com.github.retrooper.packetevents.protocol.item.ItemStack fromBukkit(@Nullable ItemStack itemStack) {
return itemStack == null ? null : SpigotConversionUtil.fromBukkitItemStack(itemStack);
}
}
}

View File

@ -6,7 +6,7 @@
<parent>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>ExcellentEnchants</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</parent>
<artifactId>MC_1_21</artifactId>
@ -28,13 +28,13 @@
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>API</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>NMS</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
</dependencies>

View File

@ -346,8 +346,6 @@ public class Internal_1_21 implements EnchantNMS {
ServerPlayer entity = craftPlayer.getHandle();
ClientboundAnimatePacket packet = new ClientboundAnimatePacket(entity, id);
craftPlayer.getHandle().connection.send(packet);
player.spigot().sendMessage();
}
@Override

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>ExcellentEnchants</artifactId>
<groupId>su.nightexpress.excellentenchants</groupId>
<version>4.2.1</version>
<version>4.2.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -34,7 +34,7 @@
<dependency>
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>API</artifactId>
<version>4.2.1</version>
<version>4.2.2</version>
</dependency>
</dependencies>

View File

@ -7,7 +7,7 @@
<groupId>su.nightexpress.excellentenchants</groupId>
<artifactId>ExcellentEnchants</artifactId>
<packaging>pom</packaging>
<version>4.2.1</version>
<version>4.2.2</version>
<modules>
<module>API</module>
<module>Core</module>