Bukkit создает 2 экземпляра одного и того же предмета. ⇐ JAVA
Bukkit создает 2 экземпляра одного и того же предмета.
Когда я впервые использую свой предмет (пусковую установку пламени), он работает отлично. Но если я даю себе еще один огнемет, создается впечатление, что он перенимает свойства другого. Как я могу создать 2 отдельных экземпляра в этом контексте?
пакет fr.laponie.ShooterPlugin; импортировать java.util.Arrays; импортировать java.util.List; импортировать org.bukkit.Bukkit; импортировать org.bukkit.ChatColor; импортировать org.bukkit.Location; импортировать org.bukkit.Material; импортировать org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; импортировать org.bukkit.entity.Player; импортировать org.bukkit.event.EventHandler; импортировать org.bukkit.event.Listener; импортировать org.bukkit.event.block.Action; импортировать org.bukkit.event.player.PlayerInteractEvent; импортировать org.bukkit.inventory.ItemStack; импортировать org.bukkit.inventory.meta.ItemMeta; импортировать org.bukkit.scheduler.BukkitRunnable; импортировать org.bukkit.util.Vector; импортировать net.minecraft.server.v1_8_R3.EnumParticle; импортировать net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; публичный класс FlameLauncher реализует Weapon, Listener { общественный FlameLauncher() { ItemStack = новый ItemStack(Material.GOLD_BARDING); ItemMeta im = is.getItemMeta(); im.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪ ▪" + ChatColor.WHITE + "]"); List lore = Arrays.asList("Это оружие","производит пламя, воспламеняется","цель"); im.setLore(знания); is.setItemMeta(im); этот.уровень = 1; this.mat = есть; это.топливо = 10,0; } @Обработчик события public void onRightClickWeapon (PlayerInteractEvent e) { Игрок p = e.getPlayer(); Действие действие = e.getAction(); Поле ItemStack = this.mat; ItemStack Hand = p.getItemInHand(); Местоположение playerEyeLoc = p.getEyeLocation(); Директор вектора = p.getEyeLocation().getDirection(); if (действие == Action.RIGHT_CLICK_AIR || действие == Action.RIGHT_CLICK_BLOCK) { if (hand.getType() == field.getType() &&hand.getItemMeta().getLore().equals(field.getItemMeta().getLore())) { если (this.getFuel() > 0) { это.топливо -= 1; this.setFuel(топливо); this.updateColorAccordingToFuel(this.fuel); hand.setItemMeta(this.mat.getItemMeta()); Частица EnumParticle = EnumParticle.FLAME; Местоположение ploc = playerEyeLoc.add(директор); Пакет PacketPlayOutWorldParticles = новый PacketPlayOutWorldParticles(particle, false, (float) ploc.getX(), (с плавающей запятой) ploc.getY(), (с плавающей запятой) ploc.getZ(),0,0,0,0,5, ноль); CraftPlayer cp = (CraftPlayer) р; cp.getHandle().playerConnection.sendPacket(пакет); } } } } общественный двойной getFuel() { вернуть это.топливо; } public void setFuel(double newFuel) { this.fuel = новое топливо; } @Override общественный двойной getDamage() { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setDamage(double dp) { // TODO Автоматически сгенерированная заглушка метода } @Override публичный материал getMCMaterial() { // TODO Автоматически сгенерированная заглушка метода вернуть ноль; } @Override public void setMCMaterial (Материал м) { // TODO Автоматически сгенерированная заглушка метода } @Override общественный двойной getReloadTime() { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setReloadTime(double reloadTime) { // TODO Автоматически сгенерированная заглушка метода } @Override общественный ИНТ getAmmoNb () { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setAmmoNb (int ammo) { // TODO Автоматически сгенерированная заглушка метода } @Override public void onAmmoHitEntity (событие AmmoHitPlayerEvent) { // TODO Автоматически сгенерированная заглушка метода } void updateColorAccordingToFuel (двойное топливо) { ItemStack clone = this.mat.clone(); ItemMeta cloneM = clone.getItemMeta(); если (топливо >= 8,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪" + ChatColor.WHITE +"]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 6,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪" + ChatColor.WHITE + " ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 4,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪" + ChatColor.WHITE + " ▪ ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 2,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪" + ChatColor.WHITE +" ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо > 0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪" + ChatColor.WHITE +" ▪ ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } еще { cloneM.setDisplayName("ПЛАМЕТНАЯ ПУСКОВАЯ [▪ ▪ ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } } внутренний уровень; Коврик для стопки предметов; двойной урон, топливо; } Как видите, когда игрок щелкает правой кнопкой мыши, он расходует «топливо». При отладке я понял, что когда я использую вторую пусковую установку пламени, топливо установлено на 0,0, поэтому я понимаю, что проблема в строке «if (this.getFuel > 0)», но я действительно не знаю, как чтобы правильно решить ее.
Когда я впервые использую свой предмет (пусковую установку пламени), он работает отлично. Но если я даю себе еще один огнемет, создается впечатление, что он перенимает свойства другого. Как я могу создать 2 отдельных экземпляра в этом контексте?
пакет fr.laponie.ShooterPlugin; импортировать java.util.Arrays; импортировать java.util.List; импортировать org.bukkit.Bukkit; импортировать org.bukkit.ChatColor; импортировать org.bukkit.Location; импортировать org.bukkit.Material; импортировать org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; импортировать org.bukkit.entity.Player; импортировать org.bukkit.event.EventHandler; импортировать org.bukkit.event.Listener; импортировать org.bukkit.event.block.Action; импортировать org.bukkit.event.player.PlayerInteractEvent; импортировать org.bukkit.inventory.ItemStack; импортировать org.bukkit.inventory.meta.ItemMeta; импортировать org.bukkit.scheduler.BukkitRunnable; импортировать org.bukkit.util.Vector; импортировать net.minecraft.server.v1_8_R3.EnumParticle; импортировать net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; публичный класс FlameLauncher реализует Weapon, Listener { общественный FlameLauncher() { ItemStack = новый ItemStack(Material.GOLD_BARDING); ItemMeta im = is.getItemMeta(); im.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪ ▪" + ChatColor.WHITE + "]"); List lore = Arrays.asList("Это оружие","производит пламя, воспламеняется","цель"); im.setLore(знания); is.setItemMeta(im); этот.уровень = 1; this.mat = есть; это.топливо = 10,0; } @Обработчик события public void onRightClickWeapon (PlayerInteractEvent e) { Игрок p = e.getPlayer(); Действие действие = e.getAction(); Поле ItemStack = this.mat; ItemStack Hand = p.getItemInHand(); Местоположение playerEyeLoc = p.getEyeLocation(); Директор вектора = p.getEyeLocation().getDirection(); if (действие == Action.RIGHT_CLICK_AIR || действие == Action.RIGHT_CLICK_BLOCK) { if (hand.getType() == field.getType() &&hand.getItemMeta().getLore().equals(field.getItemMeta().getLore())) { если (this.getFuel() > 0) { это.топливо -= 1; this.setFuel(топливо); this.updateColorAccordingToFuel(this.fuel); hand.setItemMeta(this.mat.getItemMeta()); Частица EnumParticle = EnumParticle.FLAME; Местоположение ploc = playerEyeLoc.add(директор); Пакет PacketPlayOutWorldParticles = новый PacketPlayOutWorldParticles(particle, false, (float) ploc.getX(), (с плавающей запятой) ploc.getY(), (с плавающей запятой) ploc.getZ(),0,0,0,0,5, ноль); CraftPlayer cp = (CraftPlayer) р; cp.getHandle().playerConnection.sendPacket(пакет); } } } } общественный двойной getFuel() { вернуть это.топливо; } public void setFuel(double newFuel) { this.fuel = новое топливо; } @Override общественный двойной getDamage() { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setDamage(double dp) { // TODO Автоматически сгенерированная заглушка метода } @Override публичный материал getMCMaterial() { // TODO Автоматически сгенерированная заглушка метода вернуть ноль; } @Override public void setMCMaterial (Материал м) { // TODO Автоматически сгенерированная заглушка метода } @Override общественный двойной getReloadTime() { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setReloadTime(double reloadTime) { // TODO Автоматически сгенерированная заглушка метода } @Override общественный ИНТ getAmmoNb () { // TODO Автоматически сгенерированная заглушка метода вернуть 0; } @Override public void setAmmoNb (int ammo) { // TODO Автоматически сгенерированная заглушка метода } @Override public void onAmmoHitEntity (событие AmmoHitPlayerEvent) { // TODO Автоматически сгенерированная заглушка метода } void updateColorAccordingToFuel (двойное топливо) { ItemStack clone = this.mat.clone(); ItemMeta cloneM = clone.getItemMeta(); если (топливо >= 8,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪" + ChatColor.WHITE +"]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 6,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪ ▪" + ChatColor.WHITE + " ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 4,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪ ▪" + ChatColor.WHITE + " ▪ ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо >= 2,0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪ ▪" + ChatColor.WHITE +" ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } else if (топливо > 0) { cloneM.setDisplayName("FLAME LAUNCHER [" + ChatColor.GREEN + "▪" + ChatColor.WHITE +" ▪ ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } еще { cloneM.setDisplayName("ПЛАМЕТНАЯ ПУСКОВАЯ [▪ ▪ ▪ ▪ ▪]"); this.mat.setItemMeta(cloneM); } } внутренний уровень; Коврик для стопки предметов; двойной урон, топливо; } Как видите, когда игрок щелкает правой кнопкой мыши, он расходует «топливо». При отладке я понял, что когда я использую вторую пусковую установку пламени, топливо установлено на 0,0, поэтому я понимаю, что проблема в строке «if (this.getFuel > 0)», но я действительно не знаю, как чтобы правильно решить ее.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Максимизация уже запущенного экземпляра приложения одного экземпляра в QT
Anonymous » » в форуме C++ - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-