- Баллы
- 173
Это не требуется с 1.13.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
я под 1.12.2 пишу, не подскажете, как в этой версии сделать?Это не требуется с 1.13.
В методах equals и hashCode можно использовать EqualsBuilder HashCodeBuilder из apache commons lang3.Нет, еще не совсем идеально, нужно еще различать предметы по MaterialData, сделал так:
MaterialData, в базу передается, а обратно в ItemStack нет, значит я опять это делаю неправильноКод:public class MyItem { private String material; private MaterialData data; private List<String> lore; private String displayName; private Map<String, Integer> enchantment; private int amount; public MyItem(ItemStack stack) { this.material = stack.getType().name(); this.data = stack.getData(); ItemMeta meta = stack.getItemMeta(); if (meta.hasLore()) { this.lore = meta.getLore(); } if (meta.hasDisplayName()) { this.displayName = meta.getDisplayName(); } if (meta.hasEnchants()) { this.enchantment = new HashMap<String, Integer>(); for(Entry<Enchantment, Integer> ench : meta.getEnchants().entrySet()) { this.enchantment.put(ench.getKey().getName(), ench.getValue()); } } this.amount = stack.getAmount(); } public ItemStack getStack() { ItemStack stack = new ItemStack(Material.getMaterial(this.material)); ItemMeta meta = stack.getItemMeta(); if (this.lore != null) { meta.setLore(this.lore); } if (this.displayName != null) { meta.setDisplayName(this.displayName); } if (this.enchantment != null) { for (Entry<String, Integer> ench : this.enchantment.entrySet()) { meta.addEnchant(Enchantment.getByName(ench.getKey()), ench.getValue(), true); } } stack.setData(this.data); stack.setAmount(this.amount); stack.setItemMeta(meta); return stack; } public String getMaterial() { return material; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + amount; result = prime * result + ((data == null) ? 0 : data.hashCode()); result = prime * result + ((displayName == null) ? 0 : displayName.hashCode()); result = prime * result + ((enchantment == null) ? 0 : enchantment.hashCode()); result = prime * result + ((lore == null) ? 0 : lore.hashCode()); result = prime * result + ((material == null) ? 0 : material.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyItem other = (MyItem) obj; if (amount != other.amount) return false; if (data == null) { if (other.data != null) return false; } else if (!data.equals(other.data)) return false; if (displayName == null) { if (other.displayName != null) return false; } else if (!displayName.equals(other.displayName)) return false; if (enchantment == null) { if (other.enchantment != null) return false; } else if (!enchantment.equals(other.enchantment)) return false; if (lore == null) { if (other.lore != null) return false; } else if (!lore.equals(other.lore)) return false; if (material == null) { if (other.material != null) return false; } else if (!material.equals(other.material)) return false; return true; } @Override public String toString() { Gson gson = new GsonBuilder().setPrettyPrinting().create(); return gson.toJson(this); } }вот как записывается в бд:
Код:[{"item1":{ "material": "COBBLESTONE", "data": { "type": 4, "data": 0 }, "amount": 1 },"item2":{ "material": "STONE", "data": { "type": 1, "data": 1 }, "amount": 1 },"rewardItem":{ "material": "STONE", "data": { "type": 1, "data": 3 }, "amount": 1 }}]
Да просто гетер сетер на durabilityя под 1.12.2 пишу, не подскажете, как в этой версии сделать?
Стер, потому, что Damageable в meta, в версии 1.12.2 нет, да и прочность мне не нужна, мне нужно именно MaterialData, а вот запихать ее из своего класса обратно в ItemStack не получается.Да просто гетер сетер на durability
Суть не в проверках, с этим все нормально, с сравнением как раз проблем нет, проблема в этом:В методах equals и hashCode можно использовать EqualsBuilder HashCodeBuilder из apache commons lang3.
мне нужно именно MaterialData, а вот запихать ее из своего класса обратно в ItemStack не получается.
Это совет просто, дабы сократить код.Суть не в проверках, с этим все нормально, с сравнением как раз проблем нет, проблема в этом:
Сказал же setDurability getDurability если до 1.13. Работает с датой и прочностью сразу.Суть не в проверках, с этим все нормально, с сравнением как раз проблем нет, проблема в этом:
аа, сори, невнимательно прочиталСказал же setDurability getDurability если до 1.13. Работает с датой и прочностью сразу.

Спасибо, все получилось, без Вас я бы не справился.Сказал же setDurability getDurability если до 1.13. Работает с датой и прочностью сразу.
Здравствуйте! на 1.16.4 нет обновлений?Потому что с ним так нельзя. Только вот так http://rubukkit.org/threads/villagertradeapi-ili-kak-sozdat-magazin-zhitelja.139916/
Если тебе нужен фейк житель, просто импорты обнови.Здравствуйте! на 1.16.4 нет обновлений?
В этом куске кода:Хотя в пепер апи вроде можно без фейк жителя делать.
public void addTrade(Villager villager, ItemStack stack1, ItemStack stack2, ItemStack stack3, int maxUses) {
List<MerchantRecipe> recs = villager.getRecipes();
if (stack2 != null) {
MerchantRecipe rec = new MerchantRecipe(stack1, maxUses);
rec.addIngredient(stack2);
rec.addIngredient(stack3);
recs.add(rec);
} else {
MerchantRecipe rec = new MerchantRecipe(stack1, maxUses);
rec.addIngredient(stack2);
recs.add(rec);
}
villager.setRecipes(recs);
}
Но, этот вариант подходит только если у торговца один рецепт."List<MerchantRecipe> recs = new ArrayList<>();", все стало работать
List<MerchantRecipe> recs = villager.getRecipes();
if (recs == null || recs.isEmpty()) recs = new ArrayList<>();
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:1956) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:74) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.PacketPlayInUseEntity.a(SourceFile:13) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:19) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(SourceFile:144) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(SourceFile:118) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:942) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:935) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeAll(SourceFile:103) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:918) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:851) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
Caused by: java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1057) ~[?:1.8.0_232]
at net.wealth_mc.mystery.specific.market.traders.VillTrade.addTrade(VillTrade.java:38) ~[?:?]
at net.wealth_mc.mystery.specific.market.traders.TradesWork.onPlayerInteractEntityEvent(TradesWork.java:66) ~[?:?]
at net.wealth_mc.mystery.listener.ListenerBukkit.onCheckClick(ListenerBukkit.java:245) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_232]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_232]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_232]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_232]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[middle16.jar:git-Spigot-ff439d1-24c79a1]
... 18 more
Решил проблему следующим образом:Он не помогает, аналогичная ошибка, ругается на "recs.add(rec);" следующим образом:
List<MerchantRecipe> recs = new ArrayList<MerchantRecipe>(villager.getRecipes());