1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00
This commit is contained in:
TheBusyBiscuit 2020-08-14 01:46:05 +02:00
parent c0d18c5c89
commit eb5b2678e0
5 changed files with 43 additions and 21 deletions

View File

@ -60,6 +60,8 @@
* Fixed #2205 * Fixed #2205
* Fixed #2209 * Fixed #2209
* Fixed #2217 * Fixed #2217
* Fixed Miner Talisman sending messages when drops were not even doubled
* Fixed #2077
## Release Candidate 15 (01 Aug 2020) ## Release Candidate 15 (01 Aug 2020)

View File

@ -5,6 +5,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,7 +22,6 @@ import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
import io.github.thebusybiscuit.slimefun4.utils.NumberUtils; import io.github.thebusybiscuit.slimefun4.utils.NumberUtils;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
import net.md_5.bungee.api.ChatColor;
/** /**
* This static utility class offers various methods that provide access to the * This static utility class offers various methods that provide access to the

View File

@ -11,6 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDropItemEvent;
import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityEvent; import org.bukkit.event.entity.EntityEvent;
@ -127,7 +128,7 @@ public class Talisman extends SlimefunItem {
} }
private static boolean hasMessage(Talisman talisman) { private static boolean hasMessage(Talisman talisman) {
return !("").equalsIgnoreCase(talisman.getMessageSuffix()); return talisman.getMessageSuffix() != null;
} }
public static boolean checkFor(Event e, SlimefunItemStack stack) { public static boolean checkFor(Event e, SlimefunItemStack stack) {
@ -224,6 +225,9 @@ public class Talisman extends SlimefunItem {
else if (e instanceof BlockBreakEvent) { else if (e instanceof BlockBreakEvent) {
return ((BlockBreakEvent) e).getPlayer(); return ((BlockBreakEvent) e).getPlayer();
} }
else if (e instanceof BlockDropItemEvent) {
return ((BlockDropItemEvent) e).getPlayer();
}
else if (e instanceof PlayerEvent) { else if (e instanceof PlayerEvent) {
return ((PlayerEvent) e).getPlayer(); return ((PlayerEvent) e).getPlayer();
} }

View File

@ -13,13 +13,14 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.AbstractArrow; import org.bukkit.entity.AbstractArrow;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.ChestedHorse;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockDropItemEvent;
import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
@ -35,7 +36,6 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.MagicianTalisman; import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans.MagicianTalisman;
@ -229,32 +229,48 @@ public class TalismanListener implements Listener {
} }
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent e) { public void onBlockDropItems(BlockDropItemEvent e) {
// We only want to double ores // We only want to double ores
if (MaterialCollections.getAllOres().contains(e.getBlock().getType())) { Material type = e.getBlockState().getType();
if (type.name().endsWith("_ORE")) {
ItemStack item = e.getPlayer().getInventory().getItemInMainHand(); ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
if (item.getType() != Material.AIR && item.getAmount() > 0 && !item.containsEnchantment(Enchantment.SILK_TOUCH)) { if (item.getType() != Material.AIR && item.getAmount() > 0 && !item.containsEnchantment(Enchantment.SILK_TOUCH)) {
Collection<ItemStack> drops = e.getBlock().getDrops(item); Collection<Item> drops = e.getItems();
int dropAmount = 1;
if (item.containsEnchantment(Enchantment.LOOT_BONUS_BLOCKS)) {
Random random = ThreadLocalRandom.current();
dropAmount = random.nextInt(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1;
dropAmount = Math.max(dropAmount, 1);
dropAmount = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (dropAmount + 1);
}
if (Talisman.checkFor(e, SlimefunItems.TALISMAN_MINER)) { if (Talisman.checkFor(e, SlimefunItems.TALISMAN_MINER)) {
for (ItemStack drop : drops) { int dropAmount = getAmountWithFortune(type, item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS));
if (drop != null && !drop.getType().isBlock()) { boolean doubledDrops = false;
int amount = Math.max(1, (dropAmount * 2) - drop.getAmount());
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), new CustomItem(drop, amount)); for (Item drop : drops) {
ItemStack droppedItem = drop.getItemStack();
if (!droppedItem.getType().isBlock()) {
int amount = Math.max(1, (dropAmount * 2) - droppedItem.getAmount());
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), new CustomItem(droppedItem, amount));
doubledDrops = true;
} }
} }
if (doubledDrops) {
SlimefunPlugin.getLocalization().sendMessage(e.getPlayer(), "messages.talisman.miner", true);
}
} }
} }
} }
} }
private int getAmountWithFortune(Material type, int fortuneLevel) {
if (fortuneLevel > 0) {
Random random = ThreadLocalRandom.current();
int amount = random.nextInt(fortuneLevel + 2) - 1;
amount = Math.max(amount, 1);
amount = (type == Material.LAPIS_ORE ? 4 + random.nextInt(5) : 1) * (amount + 1);
return amount;
}
else {
return 1;
}
}
} }

View File

@ -818,7 +818,7 @@ public final class SlimefunItemSetup {
new Talisman(SlimefunItems.TALISMAN_MINER, new Talisman(SlimefunItems.TALISMAN_MINER,
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.COMMON_TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.COMMON_TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
false, false, "miner", 20) false, false, null, 20)
.register(plugin); .register(plugin);
new Talisman(SlimefunItems.TALISMAN_HUNTER, new Talisman(SlimefunItems.TALISMAN_HUNTER,