1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Merge pull request #1909 from beSn0w/beeArmor

Addition: Bee Armor
This commit is contained in:
TheBusyBiscuit 2020-10-07 22:14:54 +02:00 committed by GitHub
commit 5a37c36826
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 311 additions and 181 deletions

View File

@ -301,56 +301,70 @@ public final class SlimefunItems {
public static final SlimefunItemStack BOOTS_OF_THE_STOMPER = new SlimefunItemStack("BOOTS_OF_THE_STOMPER", Material.LEATHER_BOOTS, Color.AQUA, "&bBoots of the Stomper", "", "&9All Fall Damage you receive", "&9will be applied to nearby Mobs/Players", "", "&9+ No Fall Damage");
public static final SlimefunItemStack BEE_HELMET = new SlimefunItemStack("BEE_HELMET", Material.GOLDEN_HELMET, "&e&lBee Helmet", " ", "&e&oNOT THE BEES");
public static final SlimefunItemStack BEE_WINGS = new SlimefunItemStack("BEE_WINGS", Material.ELYTRA, "&e&lBee Wings", " ", "&e&oFly Like a Bee", " ", "&9Activates Slow falling", "&9When approaching the ground", " ");
public static final SlimefunItemStack BEE_LEGGINGS = new SlimefunItemStack("BEE_LEGGINGS", Material.GOLDEN_LEGGINGS, "&e&lBee Leggings", " ", "&e&oBee like a Bee");
public static final SlimefunItemStack BEE_BOOTS = new SlimefunItemStack("BEE_BOOTS", Material.GOLDEN_BOOTS, "&e&lBee Boots", "", "&e&oNever have trouble taking off again", "", "&9+ Jump Boost", "&9+ No Fall Damage");
static {
Map<Enchantment, Integer> cactus = new HashMap<>();
cactus.put(Enchantment.THORNS, 3);
cactus.put(Enchantment.DURABILITY, 6);
Map<Enchantment, Integer> cactusEnchs = new HashMap<>();
cactusEnchs.put(Enchantment.THORNS, 3);
cactusEnchs.put(Enchantment.DURABILITY, 6);
CACTUS_HELMET.addUnsafeEnchantments(cactus);
CACTUS_CHESTPLATE.addUnsafeEnchantments(cactus);
CACTUS_LEGGINGS.addUnsafeEnchantments(cactus);
CACTUS_BOOTS.addUnsafeEnchantments(cactus);
CACTUS_HELMET.addUnsafeEnchantments(cactusEnchs);
CACTUS_CHESTPLATE.addUnsafeEnchantments(cactusEnchs);
CACTUS_LEGGINGS.addUnsafeEnchantments(cactusEnchs);
CACTUS_BOOTS.addUnsafeEnchantments(cactusEnchs);
Map<Enchantment, Integer> damascus = new HashMap<>();
damascus.put(Enchantment.DURABILITY, 5);
damascus.put(Enchantment.PROTECTION_ENVIRONMENTAL, 5);
Map<Enchantment, Integer> damascusEnchs = new HashMap<>();
damascusEnchs.put(Enchantment.DURABILITY, 5);
damascusEnchs.put(Enchantment.PROTECTION_ENVIRONMENTAL, 5);
DAMASCUS_STEEL_HELMET.addUnsafeEnchantments(damascus);
DAMASCUS_STEEL_CHESTPLATE.addUnsafeEnchantments(damascus);
DAMASCUS_STEEL_LEGGINGS.addUnsafeEnchantments(damascus);
DAMASCUS_STEEL_BOOTS.addUnsafeEnchantments(damascus);
DAMASCUS_STEEL_HELMET.addUnsafeEnchantments(damascusEnchs);
DAMASCUS_STEEL_CHESTPLATE.addUnsafeEnchantments(damascusEnchs);
DAMASCUS_STEEL_LEGGINGS.addUnsafeEnchantments(damascusEnchs);
DAMASCUS_STEEL_BOOTS.addUnsafeEnchantments(damascusEnchs);
Map<Enchantment, Integer> reinforced = new HashMap<>();
reinforced.put(Enchantment.DURABILITY, 9);
reinforced.put(Enchantment.PROTECTION_ENVIRONMENTAL, 9);
Map<Enchantment, Integer> reinforcedEnchs = new HashMap<>();
reinforcedEnchs.put(Enchantment.DURABILITY, 9);
reinforcedEnchs.put(Enchantment.PROTECTION_ENVIRONMENTAL, 9);
REINFORCED_ALLOY_HELMET.addUnsafeEnchantments(reinforced);
REINFORCED_ALLOY_CHESTPLATE.addUnsafeEnchantments(reinforced);
REINFORCED_ALLOY_LEGGINGS.addUnsafeEnchantments(reinforced);
REINFORCED_ALLOY_BOOTS.addUnsafeEnchantments(reinforced);
REINFORCED_ALLOY_HELMET.addUnsafeEnchantments(reinforcedEnchs);
REINFORCED_ALLOY_CHESTPLATE.addUnsafeEnchantments(reinforcedEnchs);
REINFORCED_ALLOY_LEGGINGS.addUnsafeEnchantments(reinforcedEnchs);
REINFORCED_ALLOY_BOOTS.addUnsafeEnchantments(reinforcedEnchs);
Map<Enchantment, Integer> gilded = new HashMap<>();
gilded.put(Enchantment.DURABILITY, 6);
gilded.put(Enchantment.PROTECTION_ENVIRONMENTAL, 8);
Map<Enchantment, Integer> gildedEnchs = new HashMap<>();
gildedEnchs.put(Enchantment.DURABILITY, 6);
gildedEnchs.put(Enchantment.PROTECTION_ENVIRONMENTAL, 8);
GILDED_IRON_HELMET.addUnsafeEnchantments(gilded);
GILDED_IRON_CHESTPLATE.addUnsafeEnchantments(gilded);
GILDED_IRON_LEGGINGS.addUnsafeEnchantments(gilded);
GILDED_IRON_BOOTS.addUnsafeEnchantments(gilded);
GILDED_IRON_HELMET.addUnsafeEnchantments(gildedEnchs);
GILDED_IRON_CHESTPLATE.addUnsafeEnchantments(gildedEnchs);
GILDED_IRON_LEGGINGS.addUnsafeEnchantments(gildedEnchs);
GILDED_IRON_BOOTS.addUnsafeEnchantments(gildedEnchs);
GOLDEN_HELMET_12K.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
GOLDEN_CHESTPLATE_12K.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
GOLDEN_LEGGINGS_12K.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
GOLDEN_BOOTS_12K.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
Map<Enchantment, Integer> slime = new HashMap<>();
slime.put(Enchantment.DURABILITY, 4);
slime.put(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
Map<Enchantment, Integer> slimeEnchs = new HashMap<>();
slimeEnchs.put(Enchantment.DURABILITY, 4);
slimeEnchs.put(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
SLIME_HELMET_STEEL.addUnsafeEnchantments(slime);
SLIME_CHESTPLATE_STEEL.addUnsafeEnchantments(slime);
SLIME_LEGGINGS_STEEL.addUnsafeEnchantments(slime);
SLIME_BOOTS_STEEL.addUnsafeEnchantments(slime);
SLIME_HELMET_STEEL.addUnsafeEnchantments(slimeEnchs);
SLIME_CHESTPLATE_STEEL.addUnsafeEnchantments(slimeEnchs);
SLIME_LEGGINGS_STEEL.addUnsafeEnchantments(slimeEnchs);
SLIME_BOOTS_STEEL.addUnsafeEnchantments(slimeEnchs);
Map<Enchantment, Integer> beeEnchs = new HashMap<>();
beeEnchs.put(Enchantment.DURABILITY, 4);
beeEnchs.put(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
BEE_HELMET.addUnsafeEnchantments(beeEnchs);
BEE_WINGS.addUnsafeEnchantments(beeEnchs);
BEE_LEGGINGS.addUnsafeEnchantments(beeEnchs);
BEE_BOOTS.addUnsafeEnchantments(beeEnchs);
}
/* Magical components */

View File

@ -59,6 +59,7 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.weapons.VampireBl
import io.github.thebusybiscuit.slimefun4.implementation.listeners.AncientAltarListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BeeListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BeeWingListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.BlockPhysicsListener;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.CargoNodeListener;
@ -452,6 +453,7 @@ public final class SlimefunPlugin extends JavaPlugin implements SlimefunAddon {
if (minecraftVersion.isAtLeast(MinecraftVersion.MINECRAFT_1_15)) {
new BeeListener(this);
new BeeWingListener(this);
}
if (minecraftVersion.isAtLeast(MinecraftVersion.MINECRAFT_1_16)) {

View File

@ -0,0 +1,89 @@
package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import org.bukkit.HeightMap;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import javax.annotation.Nonnull;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* This {@link Listener} is responsible for the slow falling effect given to the player
* when nearing the ground while using the Bee Wings.
*
* @author beSnow
* @author Linox
*
*/
public class BeeWingListener implements Listener {
public BeeWingListener(@Nonnull SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler(priority = EventPriority.LOWEST)
public void onApproachGround(PlayerMoveEvent e) {
Player player = e.getPlayer();
// Checking if the player is even falling.
if (e.getTo().getBlockY() == e.getFrom().getBlockY()) {
return;
}
if (!player.isGliding()) return;
if (player.isOnGround()) return;
if (player.hasPotionEffect(PotionEffectType.SLOW_FALLING)) return;
ItemStack chestplate = player.getInventory().getChestplate();
if (!SlimefunUtils.isItemSimilar(chestplate, SlimefunItems.BEE_WINGS, true) || !Slimefun.hasUnlocked(player, chestplate, true)) {
return;
}
Location loc = player.getLocation();
int distanceToHighestBlock = (loc.getBlockY() - player.getWorld().getHighestBlockYAt(loc, HeightMap.WORLD_SURFACE));
// getDistanceToGround will only fire when playerDistanceToHighestBlock is negative (which happens when a player is flying under an existing structure)
if (distanceToHighestBlock < 0) {
int distanceToGround = getDistanceToGround(loc.getBlock(), 6);
if (distanceToGround < 1) return;
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 40, 0));
return;
}
else if (distanceToHighestBlock <= 6) {
player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 40, 0));
}
}
/**
* Calculates the distance of the given {@link Block} from the ground.
*
* @param b
* The {@link Block} to calculate from.
* @param limit
* The limit of {@link Block blocks} to check under the given {@link Block b}.
*
*/
private int getDistanceToGround(@Nonnull Block b, int limit) {
for (int i = 1; i <= limit; i++) {
Block relative = b.getRelative(0, -i, 0);
if (relative.getType().isSolid()) {
return i;
}
}
return 0;
}
}

View File

@ -3,6 +3,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners;
import javax.annotation.Nonnull;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Player;
@ -65,6 +66,9 @@ public class SlimefunBootsListener implements Listener {
if (boots instanceof StomperBoots) {
e.setCancelled(true);
((StomperBoots) boots).stomp(e);
} else if (boots.getID().equals("BEE_BOOTS")) {
e.setCancelled(true);
e.getEntity().getWorld().playSound(e.getEntity().getLocation(), Sound.BLOCK_HONEY_BLOCK_FALL, 1f, 2f);
} else if (boots.getID().equals("SLIME_BOOTS") || boots.getID().equals("SLIME_STEEL_BOOTS")) {
e.setCancelled(true);
}

View File

@ -279,6 +279,7 @@ public final class ResearchSetup {
register("even_higher_tier_capacitors", 266, "Tier 3 Capacitors", 40, SlimefunItems.ENERGIZED_CAPACITOR);
register("caveman_talisman", 267, "Talisman of the Caveman", 20, SlimefunItems.TALISMAN_CAVEMAN);
register("elytra_cap", 268, "Crash Gear", 20, SlimefunItems.ELYTRA_CAP);
register("bee_armor", 269, "Bee Armor", 24, SlimefunItems.BEE_HELMET, SlimefunItems.BEE_WINGS, SlimefunItems.BEE_LEGGINGS, SlimefunItems.BEE_BOOTS);
}
@ParametersAreNonnullByDefault

View File

@ -3063,6 +3063,25 @@ public final class SlimefunItemSetup {
.register(plugin);
}
if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_15)) {
new SlimefunItem(categories.magicalArmor, SlimefunItems.BEE_HELMET, RecipeType.ARMOR_FORGE,
new ItemStack[]{SlimefunItems.GOLD_8K, new ItemStack(Material.HONEY_BLOCK), SlimefunItems.GOLD_8K, new ItemStack(Material.HONEYCOMB_BLOCK), null, new ItemStack(Material.HONEYCOMB_BLOCK), null, null, null})
.register(plugin);
new SlimefunItem(categories.magicalArmor, SlimefunItems.BEE_WINGS, RecipeType.ARMOR_FORGE,
new ItemStack[]{SlimefunItems.GOLD_8K, null, SlimefunItems.GOLD_8K, new ItemStack(Material.HONEYCOMB_BLOCK), new ItemStack(Material.ELYTRA), new ItemStack(Material.HONEYCOMB_BLOCK), new ItemStack(Material.HONEY_BLOCK), SlimefunItems.GOLD_8K, new ItemStack(Material.HONEY_BLOCK)})
.register(plugin);
new SlimefunItem(categories.magicalArmor, SlimefunItems.BEE_LEGGINGS, RecipeType.ARMOR_FORGE,
new ItemStack[]{SlimefunItems.GOLD_8K, new ItemStack(Material.HONEY_BLOCK), SlimefunItems.GOLD_8K, new ItemStack(Material.HONEYCOMB_BLOCK), null, new ItemStack(Material.HONEYCOMB_BLOCK), new ItemStack(Material.HONEYCOMB_BLOCK), null, new ItemStack(Material.HONEYCOMB_BLOCK)})
.register(plugin);
new SlimefunArmorPiece(categories.magicalArmor, SlimefunItems.BEE_BOOTS, RecipeType.ARMOR_FORGE,
new ItemStack[]{null, null, null, SlimefunItems.GOLD_8K, null, SlimefunItems.GOLD_8K, new ItemStack(Material.HONEY_BLOCK), null, new ItemStack(Material.HONEY_BLOCK)},
new PotionEffect[]{new PotionEffect(PotionEffectType.JUMP, 300, 2)})
.register(plugin);
}
if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_16)) {
new StrangeNetherGoo(categories.magicalResources, SlimefunItems.STRANGE_NETHER_GOO, RecipeType.BARTER_DROP,
new ItemStack[] {null, null, null, null, new CustomItem(HeadTexture.PIGLIN_HEAD.getAsItemStack(), "&fPiglin"), null, null, null, null})

View File

@ -245,3 +245,4 @@ slimefun:
iron_golem_assembler: Automated Iron Golems
villager_rune: Reset Villager Trades
elytra_cap: Crash Gear
bee_armor: Bee Armor