From c9ba2dea15ab6b154e8e7fffa3d8d9690b6e7929 Mon Sep 17 00:00:00 2001 From: Shinare Date: Sat, 4 May 2024 17:37:54 +0300 Subject: [PATCH] Initializing repository --- pom.xml | 46 + .../com/zivilon/fakeplayer/FakePlayer.java | 1059 +++++++++++++++++ .../zivilon/fakeplayer/FakePlayerPlugin.java | 23 + .../fakeplayer/commands/area_command.java | 53 + .../fakeplayer/commands/run_command.java | 42 + src/main/resources/plugin.yml | 15 + 6 files changed, 1238 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/zivilon/fakeplayer/FakePlayer.java create mode 100644 src/main/java/com/zivilon/fakeplayer/FakePlayerPlugin.java create mode 100644 src/main/java/com/zivilon/fakeplayer/commands/area_command.java create mode 100644 src/main/java/com/zivilon/fakeplayer/commands/run_command.java create mode 100644 src/main/resources/plugin.yml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d0a0ee3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + + com.zivilon + FakePlayer + 1.0 + jar + + FakePlayer + + + UTF-8 + 1.7 + 1.7 + + + + + org.bukkit + bukkit + 1.7.10-R0.1-SNAPSHOT + provided + + + + + package + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + + diff --git a/src/main/java/com/zivilon/fakeplayer/FakePlayer.java b/src/main/java/com/zivilon/fakeplayer/FakePlayer.java new file mode 100644 index 0000000..591cd84 --- /dev/null +++ b/src/main/java/com/zivilon/fakeplayer/FakePlayer.java @@ -0,0 +1,1059 @@ +package com.zivilon.fakeplayer; + +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.plugin.Plugin; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.WeatherType; +import org.bukkit.Statistic; +import org.bukkit.Material; +import org.bukkit.Achievement; +import org.bukkit.Effect; +import org.bukkit.Sound; +import org.bukkit.Instrument; +import org.bukkit.Note; +import org.bukkit.GameMode; +import org.bukkit.EntityEffect; +import org.bukkit.Server; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.block.Block; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.map.MapView; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Egg; +import org.bukkit.entity.Snowball; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Projectile; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.Vector; +import org.bukkit.permissions.PermissionAttachmentInfo; +import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.Permission; +import org.bukkit.conversations.ConversationAbandonedEvent; +import org.bukkit.conversations.Conversation; + + +import java.net.InetSocketAddress; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.HashSet; +import java.util.Map; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public class FakePlayer implements Player { + private Location location; + private Scoreboard scoreboard; + private ItemStack item; + private final UUID uuid; + private EntityDamageEvent lastDamageEvent; + + public FakePlayer(Location location) { + this.location = location; + this.item = new ItemStack(Material.DIRT, 1); + this.uuid = UUID.fromString("00000000-0000-0000-0000-000000000000"); + this.lastDamageEvent = new EntityDamageEvent(this, DamageCause.CUSTOM, 0); + } +// The important method + @Override + public boolean performCommand(String command) { + return Bukkit.dispatchCommand(this, command); + } + +// Useless methods to successfully compile. Adding functionality to these may improve compatiblity with commands + @Override + public Location getLocation() { + return this.location; + } + @Override + public Location getLocation(Location loc) { + return this.location; + } + + public void setLocation(Location loc) { + this.location = loc; + } + + public void clearLocation() { + this.location = null; + } + + @Override + public void setFoodLevel(int foodLevel) { + } + + @Override + public int getFoodLevel() { + return 20; + } + + @Override + public void setTotalExperience(int exp) { + } + + @Override + public int getTotalExperience() { + return 20; + } + + @Override + public void setLevel(int exp) { + } + + @Override + public int getLevel() { + return 20; + } + + @Override + public void giveExpLevels(int val) { + } + + @Override + public void giveExp(int val) { + } + + @Override + public int getExpToLevel() { + return 1; + } + + @Override + public void resetPlayerWeather() { + } + + @Override + public void resetPlayerTime() { + } + + @Override + public boolean isPlayerTimeRelative() { + return false; + } + + @Override + public long getPlayerTimeOffset() { + return 1; + } + + @Override + public long getPlayerTime() { + return 1; + } + + @Override + public void setPlayerTime(long val, boolean val2) { + } + + @Override + public void setStatistic(Statistic stat, EntityType entity, int number) { + } + @Override + public void setStatistic(Statistic stat, Material material, int number) { + } + @Override + public void setStatistic(Statistic stat, int number) { + } + + @Override + public void decrementStatistic(Statistic stat, EntityType entity, int number) { + } + @Override + public void decrementStatistic(Statistic stat, EntityType entity) { + } + @Override + public void decrementStatistic(Statistic stat, Material material, int number) { + } + @Override + public void decrementStatistic(Statistic stat, Material material) { + } + @Override + public void decrementStatistic(Statistic stat, int number) { + } + @Override + public void decrementStatistic(Statistic stat) { + } + + @Override + public void incrementStatistic(Statistic stat, EntityType entity, int number) { + } + @Override + public void incrementStatistic(Statistic stat, EntityType entity) { + } + @Override + public void incrementStatistic(Statistic stat, Material material, int number) { + } + @Override + public void incrementStatistic(Statistic stat, Material material) { + } + @Override + public void incrementStatistic(Statistic stat, int number) { + } + @Override + public void incrementStatistic(Statistic stat) { + } + + @Override + public boolean hasAchievement(Achievement achievement) { + return true; + } + @Override + public void removeAchievement(Achievement achievement) { + } + @Override + public void awardAchievement(Achievement achievement) { + } + + @Override + public void updateInventory() { + } + + @Override + public void sendMap(MapView map) { + } + + @Override + public void sendSignChange(Location loc, String[] string) { + } + + @Override + public void sendBlockChange(Location loc, int number, byte Byte) { + } + + @Override + public boolean sendChunkChange(Location loc, int num, int num2, int num3, byte[] Byte) { + return true; + } + + @Override + public void sendBlockChange(Location loc, Material material, byte Byte) { + } + + @Override + public int getStatistic(Statistic stat, EntityType entity) { + return 1; + } + @Override + public int getStatistic(Statistic stat, Material material) { + return 1; + } + @Override + public int getStatistic(Statistic stat) { + return 1; + } + + @Override + public void playEffect(Location loc, Effect effect, T data) { + } + + @Override + public void playEffect(Location loc, Effect effect, int num) { + } + + @Override + public void playSound(Location loc, String string, float Float, float Float2) { + } + + @Override + public void playSound(Location loc, Sound sound, float Float, float Float2) { + } + + @Override + public void playNote(Location loc, Instrument instrument, Note note) { + } + + @Override + public void playNote(Location loc, byte Byte, byte Byte2) { + } + + @Override + public boolean isSleepingIgnored() { + return false; + } + @Override + public void setSleepingIgnored(boolean Bool) { + } + + @Override + public void loadData() { + } + + @Override + public void saveData() { + } + + @Override + public void setSprinting(boolean Bool) { + } + + @Override + public boolean isSprinting() { + return true; + } + + @Override + public void setSneaking(boolean Bool) { + } + + @Override + public boolean isSneaking() { + return true; + } + + @Override + public WeatherType getPlayerWeather() { + return WeatherType.CLEAR; + } + + @Override + public void setPlayerWeather(WeatherType val) { + } + + @Override + public void setExp(float saturation) { + } + + @Override + public float getExp() { + return 20.0f; + } + + @Override + public void setSaturation(float saturation) { + } + + @Override + public float getSaturation() { + return 20.0f; + } + + @Override + public void setExhaustion(float saturation) { + } + + @Override + public float getExhaustion() { + return 20.0f; + } + + @Override + public void setHealthScale(double scale) { + } + + @Override + public double getHealthScale() { + return 20.0; + } + + @Override + public void setHealthScaled(boolean scale) { + } + + @Override + public boolean isHealthScaled() { + return true; + } + + @Override + public void setFlying(boolean isflying) { + } + + @Override + public boolean isFlying() { + return false; + } + + @Override + public void setAllowFlight(boolean isflying) { + } + + @Override + public boolean getAllowFlight() { + return false; + } + + @Override + public boolean canSee(Player player) { + return false; + } + + @Override + public void setBedSpawnLocation(Location location) { + } + + @Override + public void setBedSpawnLocation(Location location, boolean force) { + } + + @Override + public Location getBedSpawnLocation() { + return this.location; + } + + @Override + public void showPlayer(Player player) { + } + + @Override + public void hidePlayer(Player player) { + } + + @Override + public boolean isOnGround() { + return true; + } + + @Override + public void setWalkSpeed(float speed) { + } + + @Override + public float getWalkSpeed() { + return 1.0f; + } + + @Override + public void setFlySpeed(float speed) { + } + + @Override + public float getFlySpeed() { + return 1.0f; + } + + @Override + public boolean isOp() { + return true; + } + + @Override + public void sendMessage(String message) { + } + + @Override + public void setScoreboard(Scoreboard scoreboard) { + } + + @Override + public Scoreboard getScoreboard() { + return this.scoreboard; + } + + @Override + public void setResourcePack(String url) { + } + + @Override + public void setTexturePack(String url) { + } + + @Override + public void chat(String string) { + } + + @Override + public void kickPlayer(String string) { + } + + @Override + public void sendRawMessage(String string) { + } + + @Override + public InetSocketAddress getAddress() { + return new InetSocketAddress("127.0.0.1", 0); + } + + @Override + public Location getCompassTarget() { + return location; + } + @Override + public void setCompassTarget(Location loc) { + } + @Override + public void setPlayerListName(String string) { + } + @Override + public String getPlayerListName() { + return "ScriptBot"; + } + @Override + public void setDisplayName(String string) { + } + @Override + public String getDisplayName() { + return "ScriptBot"; + } + @Override + public void setGameMode(GameMode gamemode) { + } + @Override + public GameMode getGameMode() { + return GameMode.CREATIVE; + } + @Override + public int getSleepTicks() { + return 1; + } + + @Override + public boolean isSleeping() { + return false; + } + + @Override + public void setItemOnCursor(ItemStack item) { + } + + @Override + public ItemStack getItemOnCursor() { + return this.item; + } + + @Override + public void setItemInHand(ItemStack item) { + } + + @Override + public ItemStack getItemInHand() { + return this.item; + } + + @Override + public void closeInventory() { + } + + @Override + public InventoryView openEnchanting(Location loc, boolean bool) { + return null; + } + + @Override + public InventoryView openWorkbench(Location loc, boolean bool) { + return null; + } + + @Override + public InventoryView openInventory(Inventory inv) { + return null; + } + + @Override + public InventoryView getOpenInventory() { + return null; + } + @Override + public Inventory getEnderChest() { + return null; + } + @Override + public PlayerInventory getInventory() { + return null; + } + + @Override + public boolean setWindowProperty(InventoryView.Property prop, int value) { + return false; + } + + @Override + public void openInventory(InventoryView inv) { + } + + @Override + public boolean isBlocking() { + return false; + } + + @Override + public boolean setLeashHolder(Entity ent) { + return false; + } + + @Override + public Entity getLeashHolder() { + return null; + } + + @Override + public boolean isLeashed() { + return false; + } + @Override + public boolean isCustomNameVisible() { + return false; + } + @Override + public void setCustomNameVisible(boolean bool) { + } + @Override + public void setCustomName(String string) { + } + @Override + public boolean getCanPickupItems() { + return false; + } + @Override + public void setCanPickupItems(boolean bool) { + } + @Override + public EntityEquipment getEquipment() { + return null; + } + @Override + public void setRemoveWhenFarAway(boolean bool) { + } + @Override + public boolean getRemoveWhenFarAway() { + return false; + } + @Override + public boolean hasLineOfSight(Entity ent) { + return false; + } + + @Override + public Collection getActivePotionEffects() { + return Collections.emptyList(); + } + + @Override + public void removePotionEffect(PotionEffectType potion) { + } + @Override + public boolean addPotionEffects(Collection potion) { + return false; + } + @Override + public boolean addPotionEffect(PotionEffect potion, boolean bool) { + return false; + } + @Override + public boolean addPotionEffect(PotionEffect potion) { + return false; + } + @Override + public boolean hasPotionEffect(PotionEffectType potion) { + return false; + } + + @Override + public Player getKiller() { + return null; + } + + @Override + public void setNoDamageTicks(int num) { + } + @Override + public int getNoDamageTicks() { + return 1; + } + @Override + public void _INVALID_setLastDamage(int num) { + } + @Override + public int _INVALID_getLastDamage() { + return 1; + } + @Override + public void setLastDamage(double num) { + } + @Override + public double getLastDamage() { + return 1.0; + } + @Override + public void setMaximumNoDamageTicks(int num) { + } + @Override + public int getMaximumNoDamageTicks() { + return 1; + } + @Override + public void setMaximumAir(int num) { + } + @Override + public int getMaximumAir() { + return 1; + } + @Override + public void setRemainingAir(int num) { + } + @Override + public int getRemainingAir() { + return 1; + } + @Override + public Arrow shootArrow() { + return null; + } + @Override + public Snowball throwSnowball() { + return null; + } + @Override + public Egg throwEgg() { + return null; + } + @Override + public List getLastTwoTargetBlocks(HashSet hash, int num) { + return null; + } + @Override + public Block getTargetBlock(HashSet hash, int num) { + return null; + } + @Override + public List getLineOfSight(HashSet hash, int num) { + return null; + } + @Override + public Location getEyeLocation() { + return this.location; + } + @Override + public double getEyeHeight(boolean bool) { + return 1.0; + } + @Override + public double getEyeHeight() { + return 1.0; + } + @Override + public Entity getVehicle() { + return null; + } + @Override + public boolean leaveVehicle() { + return false; + } + @Override + public boolean isInsideVehicle() { + return false; + } + @Override + public EntityType getType() { + return EntityType.PLAYER; + } + @Override + public void playEffect(EntityEffect effect) { + } + @Override + public void setTicksLived(int num) { + } + @Override + public int getTicksLived() { + return 1; + } + @Override + public void setFireTicks(int num) { + } + @Override + public int getFireTicks() { + return 1; + } + @Override + public int getMaxFireTicks() { + return 20; + } + @Override + public UUID getUniqueId() { + return this.uuid; + } + @Override + public int getEntityId() { + return 666; + } + @Override + public boolean teleport(Entity ent, PlayerTeleportEvent.TeleportCause cause) { + return false; + } + @Override + public boolean teleport(Location loc, PlayerTeleportEvent.TeleportCause cause) { + return false; + } + @Override + public boolean teleport(Location loc) { + return false; + } + @Override + public boolean teleport(Entity ent) { + return false; + } + @Override + public World getWorld() { + return this.location.getWorld(); + } + @Override + public Vector getVelocity() { + return new Vector(0,0,0); + } + @Override + public void setVelocity(Vector vec) { + } + @Override + public List getNearbyEntities(double num1, double num2, double num3) { + return null; + } + @Override + public EntityDamageEvent getLastDamageCause() { + return null; + } + @Override + public void setLastDamageCause(EntityDamageEvent event) { + } + @Override + public void setFallDistance(float num) { + } + @Override + public float getFallDistance() { + return 0.0f; + } + @Override + public boolean eject() { + return false; + } + @Override + public boolean isEmpty() { + return false; + } + @Override + public boolean isValid() { + return true; + } + @Override + public boolean isDead() { + return false; + } + @Override + public void remove() { + } + @Override + public boolean setPassenger(Entity entity) { + return false; + } + @Override + public Entity getPassenger() { + return null; + } + @Override + public Server getServer() { + return null; + } + @Override + public void removeMetadata(String string, Plugin plugin) { + } + @Override + public boolean hasMetadata(String string) { + return false; + } + @Override + public List getMetadata(String string) { + return null; + } + @Override + public void setMetadata(String string, MetadataValue meta) { + } + @Override + public void resetMaxHealth() { + } + @Override + public void _INVALID_setMaxHealth(int num) { + } + @Override + public int _INVALID_getMaxHealth() { + return 1; + } + @Override + public void _INVALID_setHealth(int num) { + } + @Override + public int _INVALID_getHealth() { + return 1; + } + @Override + public void setMaxHealth(double num) { + } + @Override + public double getMaxHealth() { + return 1.0; + } + @Override + public void setHealth(double num) { + } + @Override + public double getHealth() { + return 1.0; + } + @Override + public void _INVALID_damage(int num, Entity ent) { + } + @Override + public void damage(double num, Entity ent) { + } + @Override + public void _INVALID_damage(int num) { + } + @Override + public void damage(double num) { + } + @Override + public T launchProjectile(Class projectileClass, Vector velocity) { + return null; + } + @Override + public T launchProjectile(Class projectileClass) { + return null; + } + @Override + public Set getEffectivePermissions() { + // Create a new HashSet to store PermissionAttachmentInfo objects. + Set permissions = new HashSet<>(); + + // Create a new PermissionAttachmentInfo. + // Note: You'll need to provide an actual instance of a Plugin and a PermissionAttachment, or mock these objects. + PermissionAttachmentInfo info = new PermissionAttachmentInfo(this, "*", null, true); + + // Add the PermissionAttachmentInfo to the Set. + permissions.add(info); + + // Return the Set of permissions. + return permissions; + } + @Override + public void recalculatePermissions() { + } + @Override + public void removeAttachment(PermissionAttachment attachment) { + } + @Override + public PermissionAttachment addAttachment(Plugin plugin, int num) { + return null; + } + @Override + public PermissionAttachment addAttachment(Plugin plugin) { + return null; + } + @Override + public PermissionAttachment addAttachment(Plugin plugin, String string, boolean bool) { + return null; + } + @Override + public PermissionAttachment addAttachment(Plugin plugin, String string, boolean bool, int num) { + return null; + } + @Override + public boolean hasPermission(Permission permission) { + return true; + } + @Override + public boolean hasPermission(String string) { + return true; + } + @Override + public boolean isPermissionSet(Permission permission) { + return true; + } + @Override + public boolean isPermissionSet(String string) { + return true; + } + @Override + public void setOp(boolean bool) { + } + @Override + public void abandonConversation(Conversation conversation) { + } + @Override + public void abandonConversation(Conversation conversation, ConversationAbandonedEvent event) { + } + @Override + public boolean beginConversation(Conversation conversation) { + return false; + } + @Override + public void acceptConversationInput(String string) { + } + @Override + public boolean isConversing() { + return false; + } + @Override + public boolean hasPlayedBefore() { + return true; + } + @Override + public long getLastPlayed() { + return 1; + } + @Override + public long getFirstPlayed() { + return 1; + } + @Override + public Player getPlayer() { + return null; + } + @Override + public void setWhitelisted(boolean bool) { + } + @Override + public boolean isWhitelisted() { + return true; + } + @Override + public boolean isOnline() { + return true; + } + @Override + public Map serialize() { + return new HashMap(); + } + @Override + public boolean isBanned() { + return false; + } + @Override + public void setBanned(boolean bool) { + } + @Override + public void sendMessage(String[] strings) { + for(String string : strings) { + System.out.println("ScriptBot chat: " + string); + } + } + @Override + public Set getListeningPluginChannels() { + return null; + } + @Override + public void sendPluginMessage(Plugin source, String channel, byte[] message) { + System.out.println("PluginMessage from: " + source.getDescription().getName() + ", Channel: " + channel + ", Message: " + new String(message)); + } + + @Override + public String getName() { + return "ScriptBot"; + } + @Override + public String getCustomName() { + return "ScriptBot"; + } + +} diff --git a/src/main/java/com/zivilon/fakeplayer/FakePlayerPlugin.java b/src/main/java/com/zivilon/fakeplayer/FakePlayerPlugin.java new file mode 100644 index 0000000..3b0fe3f --- /dev/null +++ b/src/main/java/com/zivilon/fakeplayer/FakePlayerPlugin.java @@ -0,0 +1,23 @@ +package com.zivilon.fakeplayer; + +import org.bukkit.plugin.java.JavaPlugin; + +import com.zivilon.fakeplayer.FakePlayer; +import com.zivilon.fakeplayer.commands.run_command; +import com.zivilon.fakeplayer.commands.area_command; + +public class FakePlayerPlugin extends JavaPlugin { + + @Override + public void onEnable() { + // Fired when the server enables the plugin + getLogger().info("FakePlayer enabled!"); + this.getCommand("fakeplayer_run").setExecutor(new run_command()); + this.getCommand("area_command").setExecutor(new area_command()); + } + + @Override + public void onDisable() { + getLogger().info("FakePlayer disabled!"); + } +} diff --git a/src/main/java/com/zivilon/fakeplayer/commands/area_command.java b/src/main/java/com/zivilon/fakeplayer/commands/area_command.java new file mode 100644 index 0000000..19e3c85 --- /dev/null +++ b/src/main/java/com/zivilon/fakeplayer/commands/area_command.java @@ -0,0 +1,53 @@ +package com.zivilon.fakeplayer.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import java.util.Arrays; + +import com.zivilon.fakeplayer.FakePlayerPlugin; +import com.zivilon.fakeplayer.FakePlayer; + +public class area_command implements CommandExecutor { + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!sender.hasPermission("fakeplayer.area")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); + return true; + } + World world = Bukkit.getWorld("DIM100"); + int x; + int y; + int z; + + if (args.length < 4) { + sender.sendMessage(ChatColor.RED + "Usage: /area_command "); + return true; + } + try { + x = Integer.parseInt(args[0]); + y = Integer.parseInt(args[1]); + z = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + sender.sendMessage(ChatColor.RED + "Coordinates need to be numbers!"); + return true; + } + + Location location = new Location(world, x, y, z); + Player fakePlayer = new FakePlayer(location); + + if(args.length > 2){ + String cmdToExecute = String.join(" ", Arrays.copyOfRange(args, 3, args.length)); + fakePlayer.performCommand(cmdToExecute); + } else { + sender.sendMessage(ChatColor.RED + "No command specified."); + } + return true; + } +} diff --git a/src/main/java/com/zivilon/fakeplayer/commands/run_command.java b/src/main/java/com/zivilon/fakeplayer/commands/run_command.java new file mode 100644 index 0000000..fa1dd8b --- /dev/null +++ b/src/main/java/com/zivilon/fakeplayer/commands/run_command.java @@ -0,0 +1,42 @@ +package com.zivilon.fakeplayer.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + + +import com.zivilon.fakeplayer.FakePlayerPlugin; +import com.zivilon.fakeplayer.FakePlayer; + +public class run_command implements CommandExecutor { + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + Location location; + if (!sender.hasPermission("fakeplayer.use")) { + sender.sendMessage(ChatColor.RED + "You do not have permission to use this command."); + return true; + } + World world = Bukkit.getWorld("DIM100"); + if(sender instanceof Player) { + Player player = (Player) sender; + location = player.getLocation(); + } else { + location = new Location(world, 0, 64, 0); + + } + Player fakePlayer = new FakePlayer(location); + + if(args.length > 0){ + String cmdToExecute = String.join(" ", args); + fakePlayer.performCommand(cmdToExecute); + } else { + sender.sendMessage(ChatColor.RED + "No command specified."); + } + return true; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..fae401d --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,15 @@ +main: com.zivilon.fakeplayer.FakePlayerPlugin +name: FakePlayer +author: Shinare +version: 1.0 +commands: + fakeplayer_run: + description: Run commands as fake player + Usage: /fakeplayer_run + # This command is probably not even necessary, might be deleted later + fakeplayer_create: + description: Create a fake player. + Usage: /fakeplayer_create + area_command: + description: Run a command through fake player in specific coordinates + Usage: /area_command