Block Break and Place management
This commit is contained in:
parent
b2f6ac5bab
commit
ff3faed15d
6 changed files with 117 additions and 5 deletions
|
@ -13,7 +13,7 @@ group = "me.unurled.sacredrealms"
|
|||
version = "0.1.0"
|
||||
description = "The main SR plugin."
|
||||
|
||||
val mcVersion = "1.20.5-R0.1-SNAPSHOT"
|
||||
val mcVersion = "1.20.6-R0.1-SNAPSHOT"
|
||||
val redisVersion = "5.2.0-beta1"
|
||||
val invuiVersion = "1.30"
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package me.unurled.sacredrealms.sr.commands.admin;
|
||||
|
||||
import static me.unurled.sacredrealms.sr.utils.Component.ERROR;
|
||||
import static me.unurled.sacredrealms.sr.utils.Component.textComp;
|
||||
import static me.unurled.sacredrealms.sr.utils.Logger.log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -9,6 +11,8 @@ import java.util.List;
|
|||
import java.util.Map.Entry;
|
||||
import me.unurled.sacredrealms.sr.components.clientbuild.ClientBuild;
|
||||
import me.unurled.sacredrealms.sr.components.clientbuild.ClientBuildManager;
|
||||
import me.unurled.sacredrealms.sr.components.player.PlayerManager;
|
||||
import me.unurled.sacredrealms.sr.components.player.SRPlayer;
|
||||
import me.unurled.sacredrealms.sr.managers.Manager;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
@ -18,6 +22,7 @@ import org.bukkit.command.CommandSender;
|
|||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
@ -70,6 +75,16 @@ public class ClientBuildCommand implements TabExecutor, Listener {
|
|||
sender.sendMessage("You do not have any temporary blocks to save.");
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerManager pm = Manager.getInstance(PlayerManager.class);
|
||||
SRPlayer sr = pm.getPlayer(p.getUniqueId());
|
||||
if (sr == null) {
|
||||
clientBuildManager.removeTemporaryBlocks(p);
|
||||
clientBuildManager.removeTemporaryPreviousBlocks(p);
|
||||
return;
|
||||
}
|
||||
sr.setClientBuilder(false);
|
||||
|
||||
HashMap<Location, BlockData> blocks =
|
||||
(HashMap<Location, BlockData>) clientBuildManager.getTemporaryBlocks(p);
|
||||
log("blocks: " + blocks.size());
|
||||
|
@ -101,7 +116,15 @@ public class ClientBuildCommand implements TabExecutor, Listener {
|
|||
sender.sendMessage(DOES_NOT_EXIST);
|
||||
return;
|
||||
}
|
||||
// set flag for player
|
||||
PlayerManager pm = Manager.getInstance(PlayerManager.class);
|
||||
SRPlayer sr = pm.getPlayer(p.getUniqueId());
|
||||
if (sr == null) {
|
||||
sender.sendMessage(textComp(ERROR));
|
||||
return;
|
||||
}
|
||||
sender.sendMessage("Modify the client build and save after you are finished.");
|
||||
sr.setClientBuilder(true);
|
||||
clientBuildManager.setTemporaryBlocks(p, new HashMap<>());
|
||||
clientBuildManager.setTemporaryPreviousBlocks(p, new HashMap<>());
|
||||
}
|
||||
|
@ -129,9 +152,16 @@ public class ClientBuildCommand implements TabExecutor, Listener {
|
|||
sender.sendMessage("A client build with that name already exists.");
|
||||
return;
|
||||
}
|
||||
PlayerManager pm = Manager.getInstance(PlayerManager.class);
|
||||
SRPlayer sr = pm.getPlayer(p.getUniqueId());
|
||||
if (sr == null) {
|
||||
sender.sendMessage(textComp(ERROR));
|
||||
return;
|
||||
}
|
||||
sender.sendMessage(
|
||||
"Client build created, place blocks that you want to add to the Client"
|
||||
+ " Build and save after you are finished.");
|
||||
sr.setClientBuilder(true);
|
||||
clientBuildManager.setTemporaryBlocks(p, new HashMap<>());
|
||||
clientBuildManager.setTemporaryPreviousBlocks(p, new HashMap<>());
|
||||
}
|
||||
|
@ -234,9 +264,17 @@ public class ClientBuildCommand implements TabExecutor, Listener {
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onBlockBreak(@NotNull BlockBreakEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
PlayerManager pm = Manager.getInstance(PlayerManager.class);
|
||||
SRPlayer sr = pm.getPlayer(p.getUniqueId());
|
||||
if (sr == null) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if (!sr.isClientBuilder()) return;
|
||||
|
||||
if (manager == null) {
|
||||
manager = Manager.getInstance(ClientBuildManager.class);
|
||||
}
|
||||
|
|
|
@ -33,14 +33,14 @@ public class PlayerManager extends Manager {
|
|||
public static final String PLAYER_KEY = "sr.players.";
|
||||
public static final String DATA_MANAGER_NULL = "DataManager is null, Can't save player data.";
|
||||
private final HashMap<UUID, SRPlayer> players;
|
||||
private DataHandler dh;
|
||||
|
||||
private final HashMap<UUID, BukkitTask> actionBarTasks;
|
||||
private DataHandler dh;
|
||||
|
||||
public PlayerManager() {
|
||||
super();
|
||||
players = new HashMap<>();
|
||||
actionBarTasks = new HashMap<>();
|
||||
Bukkit.getPluginManager().registerEvents(this, SR.getInstance());
|
||||
}
|
||||
|
||||
/** Save the data */
|
||||
|
|
|
@ -30,7 +30,7 @@ public class SRPlayer {
|
|||
private static final List<Long> levelRequirements =
|
||||
List.of(100L, 200L, 400L, 800L, 1600L, 3200L, 6400L, 12800L, 25600L, 51200L);
|
||||
|
||||
@Expose private UUID uuid = null;
|
||||
@Expose private UUID uuid;
|
||||
@Expose private int level = 1;
|
||||
@Expose private Long experience = 0L;
|
||||
private double health = 100;
|
||||
|
@ -39,6 +39,7 @@ public class SRPlayer {
|
|||
@Expose private List<PotionEffect> potionEffects = new ArrayList<>();
|
||||
@Expose private Inventory inventory = null;
|
||||
@Expose private List<Integer> treasuresOpened = new ArrayList<>();
|
||||
private boolean isClientBuilder = false;
|
||||
|
||||
public SRPlayer(@NotNull UUID uuid) {
|
||||
this.uuid = uuid;
|
||||
|
@ -272,4 +273,12 @@ public class SRPlayer {
|
|||
public void addTreasureOpened(int id) {
|
||||
treasuresOpened.add(id);
|
||||
}
|
||||
|
||||
public boolean isClientBuilder() {
|
||||
return isClientBuilder;
|
||||
}
|
||||
|
||||
public void setClientBuilder(boolean b) {
|
||||
isClientBuilder = b;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package me.unurled.sacredrealms.sr.components.player.listener;
|
||||
|
||||
import me.unurled.sacredrealms.sr.components.player.PlayerManager;
|
||||
import me.unurled.sacredrealms.sr.components.player.SRPlayer;
|
||||
import me.unurled.sacredrealms.sr.managers.Manager;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PlayerBlockEvent implements Listener {
|
||||
|
||||
public boolean isClientBuilder(@NotNull Player p) {
|
||||
PlayerManager pm = Manager.getInstance(PlayerManager.class);
|
||||
SRPlayer sr = pm.getPlayer(p.getUniqueId());
|
||||
return sr != null && sr.isClientBuilder();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBreakBlock(@NotNull BlockBreakEvent event) {
|
||||
Player p = event.getPlayer();
|
||||
if (p.getGameMode().equals(GameMode.CREATIVE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isClientBuilder(p)) return;
|
||||
|
||||
// make block break client side
|
||||
event.setCancelled(true);
|
||||
|
||||
p.sendBlockChange(event.getBlock().getLocation(), Material.AIR.createBlockData());
|
||||
// TODO: check if it remove durability from items
|
||||
p.playSound(p.getLocation(), event.getBlock().getBlockSoundGroup().getBreakSound(), 1, 1);
|
||||
event.setDropItems(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlaceBlock(@NotNull BlockPlaceEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
if (p.getGameMode().equals(GameMode.CREATIVE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isClientBuilder(p)) return;
|
||||
|
||||
// make block place client side
|
||||
e.setCancelled(true);
|
||||
p.sendBlockChange(e.getBlock().getLocation(), e.getBlockReplacedState().getBlockData());
|
||||
if (p.getInventory().getItemInMainHand().getAmount() != 1) {
|
||||
p.getInventory()
|
||||
.getItemInMainHand()
|
||||
.setAmount(p.getInventory().getItemInMainHand().getAmount() - 1);
|
||||
} else {
|
||||
p.getInventory().setItem(p.getInventory().getHeldItemSlot(), new ItemStack(Material.AIR));
|
||||
}
|
||||
p.playSound(p.getLocation(), e.getBlock().getBlockSoundGroup().getPlaceSound(), 1, 1);
|
||||
}
|
||||
}
|
|
@ -8,6 +8,8 @@ public class Component {
|
|||
|
||||
public static final String NOT_PLAYER = "<red>You must be a player to use this command.";
|
||||
public static final String NO_PERMISSION = "<red>You do not have permission to use this command.";
|
||||
public static final String ERROR =
|
||||
"<red>An error occurred while executing this command. Please" + " contact an admin.";
|
||||
private static MiniMessage miniMessage;
|
||||
|
||||
private Component() {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue