Block Break and Place management
This commit is contained in:
parent
b2f6ac5bab
commit
ff3faed15d
6 changed files with 117 additions and 5 deletions
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue