it works
This commit is contained in:
parent
8b4ebaacd4
commit
c470cfda3b
|
@ -10,8 +10,6 @@ import lombok.Getter;
|
||||||
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
|
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary;
|
||||||
import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException;
|
import net.megavex.scoreboardlibrary.api.exception.NoPacketAdapterAvailableException;
|
||||||
import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary;
|
import net.megavex.scoreboardlibrary.api.noop.NoopScoreboardLibrary;
|
||||||
import net.megavex.scoreboardlibrary.api.team.TeamManager;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
@ -30,7 +28,6 @@ import xyz.twovb.toolbox.managers.ConfigManager;
|
||||||
import xyz.twovb.toolbox.managers.PlaceholderManager;
|
import xyz.twovb.toolbox.managers.PlaceholderManager;
|
||||||
import xyz.twovb.toolbox.utils.CustomLogger;
|
import xyz.twovb.toolbox.utils.CustomLogger;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
|
@ -25,25 +25,24 @@ import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDismountEvent;
|
import org.bukkit.event.entity.EntityDismountEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
import org.bukkit.event.player.*;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.inventory.EntityEquipment;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.event.player.PlayerToggleSneakEvent;
|
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.bukkit.util.Transformation;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.twovb.sgm.SGM;
|
import xyz.twovb.sgm.SGM;
|
||||||
import xyz.twovb.sgm.games.GameManager;
|
import xyz.twovb.sgm.games.GameManager;
|
||||||
import xyz.twovb.sgm.games.Minigame;
|
import xyz.twovb.sgm.games.Minigame;
|
||||||
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerFreedFromJailEvent;
|
import xyz.twovb.sgm.games.impl.capturethebrick.events.*;
|
||||||
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerJailedEvent;
|
|
||||||
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerTaggedEvent;
|
|
||||||
import xyz.twovb.sgm.levels.LevelManager;
|
import xyz.twovb.sgm.levels.LevelManager;
|
||||||
import xyz.twovb.toolbox.api.CustomPlayer;
|
import xyz.twovb.toolbox.api.CustomPlayer;
|
||||||
import xyz.twovb.toolbox.utils.ChatUtils;
|
import xyz.twovb.toolbox.utils.ChatUtils;
|
||||||
|
@ -194,7 +193,7 @@ public class CTB implements Minigame {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SGM.getInstance().getCLogger().log(playerStateMap);
|
SGM.getInstance().getCLogger().log(playerStateMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -479,50 +478,113 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerFree(EntityDamageByEntityEvent event) {
|
void handleEntityDamage(EntityDamageByEntityEvent event) {
|
||||||
// Check if a player is allowed to free someone, and if the tagged player is allowed to be free
|
|
||||||
// If both are true, call the custom event
|
|
||||||
if (this.state != GameState.STARTED) return;
|
if (this.state != GameState.STARTED) return;
|
||||||
Entity eventEntity = event.getEntity();
|
Entity eventEntity = event.getEntity();
|
||||||
Entity eventDamager = event.getDamager();
|
Entity eventDamager = event.getDamager();
|
||||||
if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return;
|
|
||||||
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
if (!(eventEntity instanceof Player interacted) || !(eventDamager instanceof Player interacter)) return;
|
||||||
if (getTerritory(tagged) != getTerritory(tagger)) return;
|
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
||||||
ScoreboardTeam taggedTeam = getTeam(tagged);
|
if (getTerritory(interacted) != getTerritory(interacter)) return;
|
||||||
ScoreboardTeam taggerTeam = getTeam(tagger);
|
|
||||||
if (taggedTeam != taggerTeam) return;
|
PlayerGameInteractionEvent interactionEvent = new PlayerGameInteractionEvent(interacted, interacter);
|
||||||
if (playerStateMap.get(tagged) != CtbData.PlayerState.Jailed) return;
|
Bukkit.getServer().getPluginManager().callEvent(interactionEvent);
|
||||||
if (playerStateMap.get(tagger) != CtbData.PlayerState.Free) return;
|
|
||||||
playerStateMap.replace(tagged, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable);
|
if (interactionEvent.isCancelled()) {
|
||||||
playerStateMap.replace(tagger, CtbData.PlayerState.Free, CtbData.PlayerState.Invulnerable);
|
event.setCancelled(true);
|
||||||
PlayerFreedFromJailEvent freedFromJailEvent = new PlayerFreedFromJailEvent(tagged, tagger);
|
}
|
||||||
freedFromJailEvent.callEvent();
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onPlayerFree(EntityDamageByEntityEvent event) {
|
||||||
|
handleEntityDamage(event);
|
||||||
|
Player interacted = (Player) event.getEntity();
|
||||||
|
Player interacter = (Player) event.getDamager();
|
||||||
|
|
||||||
|
if (this.state != GameState.STARTED) return;
|
||||||
|
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
||||||
|
if (getTerritory(interacted) != getTerritory(interacter)) return;
|
||||||
|
ScoreboardTeam interactedTeam = getTeam(interacted);
|
||||||
|
ScoreboardTeam interacterTeam = getTeam(interacter);
|
||||||
|
if (interactedTeam != interacterTeam) return;
|
||||||
|
if (playerStateMap.get(interacted) != CtbData.PlayerState.Jailed) return;
|
||||||
|
if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return;
|
||||||
|
|
||||||
|
playerStateMap.replace(interacted, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable);
|
||||||
|
playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Invulnerable);
|
||||||
|
PlayerFreedFromJailEvent freedFromJailEvent = new PlayerFreedFromJailEvent(interacted, interacter);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(freedFromJailEvent);
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onPlayerHit(EntityDamageByEntityEvent event) {
|
||||||
|
handleEntityDamage(event);
|
||||||
|
Player interacted = (Player) event.getEntity();
|
||||||
|
Player interacter = (Player) event.getDamager();
|
||||||
|
|
||||||
|
if (this.state != GameState.STARTED) return;
|
||||||
|
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
||||||
|
if (getTerritory(interacted) != getTerritory(interacter)) return;
|
||||||
|
ScoreboardTeam interactedTeam = getTeam(interacted);
|
||||||
|
ScoreboardTeam interacterTeam = getTeam(interacter);
|
||||||
|
if (interactedTeam != interacterTeam) return;
|
||||||
|
if (playerStateMap.get(interacted) != CtbData.PlayerState.Jailed) return;
|
||||||
|
if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return;
|
||||||
|
|
||||||
|
playerStateMap.replace(interacted, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable);
|
||||||
|
playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Invulnerable);
|
||||||
|
PlayerFreedFromJailEvent freedFromJailEvent = new PlayerFreedFromJailEvent(interacted, interacter);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(freedFromJailEvent);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onEntityDamage(EntityDamageByEntityEvent event) {
|
void onEntityDamage(EntityDamageByEntityEvent event) {
|
||||||
|
handleEntityDamage(event);
|
||||||
|
Player interacted = (Player) event.getEntity();
|
||||||
|
Player interacter = (Player) event.getDamager();
|
||||||
|
|
||||||
|
if (this.state != GameState.STARTED) return;
|
||||||
|
if (!players.contains(interacted) || !players.contains(interacter)) return;
|
||||||
|
if (getTerritory(interacted) != getTerritory(interacter)) return;
|
||||||
|
ScoreboardTeam interactedTeam = getTeam(interacted);
|
||||||
|
ScoreboardTeam interacterTeam = getTeam(interacter);
|
||||||
|
if (interactedTeam == interacterTeam) return;
|
||||||
|
event.setCancelled(true);
|
||||||
|
|
||||||
|
CtbData.Territory territory = getTerritory(interacted);
|
||||||
|
if (territory == CtbData.Territory.Blue && interacterTeam != blueTeam) return;
|
||||||
|
if (territory == CtbData.Territory.Red && interacterTeam != redTeam) return;
|
||||||
|
if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return;
|
||||||
|
if (playerStateMap.get(interacted) != CtbData.PlayerState.Free && playerStateMap.get(interacted) != CtbData.PlayerState.Stealing) return;
|
||||||
|
|
||||||
|
playerStateMap.replace(interacted, CtbData.PlayerState.Tagged);
|
||||||
|
playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
|
||||||
|
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(interacted, interacter);
|
||||||
|
Bukkit.getServer().getPluginManager().callEvent(taggedEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onBrickSteal(PlayerInteractAtEntityEvent event) {
|
||||||
// Check if a player is allowed to tag, and if the tagged player is allowed to be tagged
|
// Check if a player is allowed to tag, and if the tagged player is allowed to be tagged
|
||||||
// If both are true, call the custom tag event and add players to tagged hashmap
|
// If both are true, call the custom tag event and add players to tagged hashmap
|
||||||
if (this.state != GameState.STARTED) return;
|
if (this.state != GameState.STARTED) return;
|
||||||
Entity eventEntity = event.getEntity();
|
Entity rightClicked = event.getRightClicked();
|
||||||
Entity eventDamager = event.getDamager();
|
Player brickTaker = event.getPlayer();
|
||||||
if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return;
|
// if (!(rightClicked instanceof ArmorStand brickEntity)) return;
|
||||||
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
if (!players.contains(brickTaker)) return;
|
||||||
if (getTerritory(tagged) != getTerritory(tagger)) return;
|
SGM.getInstance().getCLogger().log(rightClicked);
|
||||||
ScoreboardTeam taggedTeam = getTeam(tagged);
|
SGM.getInstance().getCLogger().log(brickTaker);
|
||||||
ScoreboardTeam taggerTeam = getTeam(tagger);
|
ScoreboardTeam taggerTeam = getTeam(brickTaker);
|
||||||
if (taggedTeam == taggerTeam) return;
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
CtbData.Territory territory = getTerritory(tagged);
|
CtbData.Territory territory = getTerritory(brickTaker);
|
||||||
if (territory == CtbData.Territory.Blue && taggerTeam != blueTeam) return;
|
if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return;
|
||||||
if (territory == CtbData.Territory.Red && taggerTeam != redTeam) return;
|
if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return;
|
||||||
if (playerStateMap.get(tagged) != CtbData.PlayerState.Free) return;
|
if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return;
|
||||||
if (playerStateMap.get(tagger) != CtbData.PlayerState.Free) return;
|
playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing);
|
||||||
playerStateMap.replace(tagged, CtbData.PlayerState.Free, CtbData.PlayerState.Tagged);
|
PlayerStealBrickEvent playerStealBrickEvent = new PlayerStealBrickEvent(brickTaker);
|
||||||
playerStateMap.replace(tagger, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
|
playerStealBrickEvent.callEvent();
|
||||||
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(tagged, tagger);
|
|
||||||
taggedEvent.callEvent();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPlayerToJail(Player player) {
|
public void addPlayerToJail(Player player) {
|
||||||
|
@ -596,16 +658,26 @@ public class CTB implements Minigame {
|
||||||
private void placeBrick(Location location, ScoreboardTeam team) {
|
private void placeBrick(Location location, ScoreboardTeam team) {
|
||||||
Location brickSpawnLoc = location;
|
Location brickSpawnLoc = location;
|
||||||
brickSpawnLoc = brickSpawnLoc.clone().add(0.5, 0, 0.5);
|
brickSpawnLoc = brickSpawnLoc.clone().add(0.5, 0, 0.5);
|
||||||
Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.BLOCK_DISPLAY);
|
Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.ARMOR_STAND);
|
||||||
BlockDisplay brickDisplay = (BlockDisplay) brickEntity;
|
ArmorStand armorStand = (ArmorStand) brickEntity;
|
||||||
|
EntityEquipment armorEquipment = armorStand.getEquipment();
|
||||||
|
// armorStand.setInvisible(true);
|
||||||
if (team.equals(redTeam)) {
|
if (team.equals(redTeam)) {
|
||||||
brickDisplay.setBlock(Material.RED_WOOL.createBlockData());
|
armorEquipment.setHelmet(new ItemStack(Material.RED_WOOL));
|
||||||
} else if (team.equals(blueTeam)) {
|
} else if (team.equals(blueTeam)) {
|
||||||
brickDisplay.setBlock(Material.BLUE_WOOL.createBlockData());
|
armorEquipment.setHelmet(new ItemStack(Material.BLUE_WOOL));
|
||||||
}
|
}
|
||||||
Transformation transformation = brickDisplay.getTransformation();
|
|
||||||
transformation.getScale().set(0.5f);
|
// Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.BLOCK_DISPLAY);
|
||||||
brickDisplay.setTransformation(transformation);
|
// BlockDisplay brickDisplay = (BlockDisplay) brickEntity;
|
||||||
|
// if (team.equals(redTeam)) {
|
||||||
|
// brickDisplay.setBlock(Material.RED_WOOL.createBlockData());
|
||||||
|
// } else if (team.equals(blueTeam)) {
|
||||||
|
// brickDisplay.setBlock(Material.BLUE_WOOL.createBlockData());
|
||||||
|
// }
|
||||||
|
// Transformation transformation = brickDisplay.getTransformation();
|
||||||
|
// transformation.getScale().set(0.5f);
|
||||||
|
// brickDisplay.setTransformation(transformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupTeamDisplay(ScoreboardTeam team, String displayName, NamedTextColor color) {
|
private void setupTeamDisplay(ScoreboardTeam team, String displayName, NamedTextColor color) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ public class CtbData {
|
||||||
|
|
||||||
public enum PlayerState {
|
public enum PlayerState {
|
||||||
Free(""),
|
Free(""),
|
||||||
|
Stealing("<yellow><bold>⚠️ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ ⚠️"),
|
||||||
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
||||||
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
||||||
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package xyz.twovb.sgm.games.impl.capturethebrick.events;
|
||||||
|
/*
|
||||||
|
* Created by 2vb - 7/7/2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class PlayerGameInteractionEvent extends Event implements Cancellable {
|
||||||
|
|
||||||
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
|
private final Player interacted;
|
||||||
|
private final Player interacter;
|
||||||
|
private boolean isCancelled;
|
||||||
|
|
||||||
|
public PlayerGameInteractionEvent(Player interacted, Player interacter) {
|
||||||
|
this.interacted = interacted;
|
||||||
|
this.interacter = interacter;
|
||||||
|
this.isCancelled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getInteracted() {
|
||||||
|
return this.interacted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getInteracter() {
|
||||||
|
return this.interacter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.isCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.isCancelled = cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class PlayerStealBrickEvent extends Event implements Cancellable {
|
||||||
public PlayerStealBrickEvent(Player jailed) {
|
public PlayerStealBrickEvent(Player jailed) {
|
||||||
this.jailed = jailed;
|
this.jailed = jailed;
|
||||||
this.isCancelled = false;
|
this.isCancelled = false;
|
||||||
this.message = ChatUtils.translate(CTB.getMessages().getString("system.player.jail.notify").replace("%player%", jailed.getName()));
|
this.message = ChatUtils.translate(CTB.getMessages().getString("system.player.brick.steal.notify"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HandlerList getHandlerList() {
|
public static HandlerList getHandlerList() {
|
||||||
|
|
|
@ -17,4 +17,7 @@ system:
|
||||||
released:
|
released:
|
||||||
notify: "&7You have released %player%!"
|
notify: "&7You have released %player%!"
|
||||||
info: "&7%player% let you free! You must head back to Neutral before you can do anything."
|
info: "&7%player% let you free! You must head back to Neutral before you can do anything."
|
||||||
full: "&7You have returned to Neutral. You can now get back to the game!"
|
full: "&7You have returned to Neutral. You can now get back to the game!"
|
||||||
|
brick:
|
||||||
|
steal:
|
||||||
|
notify: "&7You have stolen a brick. Make it to Neutral without being caught to Capture The Brick™!"
|
Loading…
Reference in New Issue
Block a user