NEWS: Welcome to my new homepage! <3

Added chair sitting - poppy - A feature-rich Minecraft plugin which enhances gaming experience

poppy

A feature-rich Minecraft plugin which enhances gaming experience
git clone git://192.168.2.2/poppy
Log | Files | Refs | README

commit 7b3369d667441c6feeb36c4849d80192d3d78d1e
parent 26018d34e50a71baf09e0c6a8264f9b29d7e0a26
Author: typable <typable.dev@gmail.com>
Date:   Fri, 27 Nov 2020 09:26:24 +0100

Added chair sitting
Diffstat:
Mplugin.yml | 2++
Msrc/de/typable/minecrafthub/Main.java | 23+++++++++++++++++++++++
Asrc/de/typable/minecrafthub/event/ChairListener.java | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 132 insertions(+), 0 deletions(-)

diff --git a/plugin.yml b/plugin.yml @@ -5,5 +5,7 @@ author: typable api-version: 1.16 commands: head: + skull: + usage: /skull <player> standby: usage: /standby <true, false> \ No newline at end of file diff --git a/src/de/typable/minecrafthub/Main.java b/src/de/typable/minecrafthub/Main.java @@ -8,10 +8,12 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import de.typable.minecrafthub.constant.DefaultConstants; +import de.typable.minecrafthub.event.ChairListener; import de.typable.minecrafthub.event.DoubleDoorListener; import de.typable.minecrafthub.event.EventListener; import de.typable.minecrafthub.event.StandbyListener; @@ -22,6 +24,7 @@ public class Main extends JavaPlugin private PluginManager pluginManager; private StandbyListener standbyListener; private DoubleDoorListener doubleDoorListener; + private ChairListener chairListener; private EventListener eventListener; @Override @@ -35,10 +38,14 @@ public class Main extends JavaPlugin doubleDoorListener = new DoubleDoorListener(); pluginManager.registerEvents(doubleDoorListener, this); + chairListener = new ChairListener(); + pluginManager.registerEvents(chairListener, this); + eventListener = new EventListener(); pluginManager.registerEvents(eventListener, this); } + @SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -50,6 +57,7 @@ public class Main extends JavaPlugin { ItemStack handitem = player.getInventory().getItemInMainHand(); ItemStack headitem = player.getInventory().getHelmet(); + player.getInventory().setHelmet(handitem); player.getInventory().setItemInMainHand((new ItemStack(Material.AIR))); @@ -61,6 +69,21 @@ public class Main extends JavaPlugin } } } + + if(label.equals("skull")) + { + if(args.length != 1) + { + return false; + } + + ItemStack skull = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + meta.setOwner(args[0]); + skull.setItemMeta(meta); + + player.getInventory().addItem(skull); + } if(label.equals("standby")) { diff --git a/src/de/typable/minecrafthub/event/ChairListener.java b/src/de/typable/minecrafthub/event/ChairListener.java @@ -0,0 +1,107 @@ +package de.typable.minecrafthub.event; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.data.type.Stairs; +import org.bukkit.entity.AbstractArrow.PickupStatus; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.util.Vector; +import org.spigotmc.event.entity.EntityDismountEvent; + + +public class ChairListener implements Listener +{ + private static final Material[] CHAIR_TYPE = new Material[] { + Material.OAK_STAIRS, + Material.SPRUCE_STAIRS, + Material.BIRCH_STAIRS, + Material.JUNGLE_STAIRS, + Material.ACACIA_STAIRS, + Material.DARK_OAK_STAIRS, + Material.ACACIA_STAIRS, + Material.CRIMSON_STAIRS, + Material.WARPED_STAIRS + }; + + @SuppressWarnings("deprecation") + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) + { + if(event.getAction() == Action.RIGHT_CLICK_BLOCK) + { + if(event.getClickedBlock() != null) + { + Block block = event.getClickedBlock(); + + if(isChair(block.getType())) + { + Block upperBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 1, 0)); + + if(upperBlock != null && upperBlock.getType() == Material.AIR) + { + Stairs stairs = (Stairs) block.getState().getBlockData(); + + if(isCompatible(stairs)) + { + Location location = block.getLocation().add(0.5, 0, 0.5); + Arrow arrow = (Arrow) block.getWorld().spawnArrow(location, new Vector(), 0F, 0F); + arrow.setGravity(false); + arrow.setInvulnerable(true); + arrow.setPickupStatus(PickupStatus.DISALLOWED); + arrow.setPassenger((Entity) event.getPlayer()); + } + } + } + } + } + } + + @EventHandler + public void onEntityDismount(EntityDismountEvent event) + { + if(event.getEntity() instanceof Player) + { + Entity entity = event.getDismounted(); + + if(entity != null && entity instanceof Arrow) + { + entity.remove(); + } + } + } + + private boolean isChair(Material material) + { + for(Material chair : CHAIR_TYPE) + { + if(material == chair) + { + return true; + } + } + + return false; + } + + private boolean isCompatible(Stairs stairs) + { + if(stairs.isWaterlogged()) + { + return false; + } + + if(stairs.getShape() != Stairs.Shape.STRAIGHT) + { + return false; + } + + return true; + } +}