commit 7b3369d667441c6feeb36c4849d80192d3d78d1e
parent 26018d34e50a71baf09e0c6a8264f9b29d7e0a26
Author: typable <typable.dev@gmail.com>
Date: Fri, 27 Nov 2020 09:26:24 +0100
Added chair sitting
Diffstat:
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;
+ }
+}