This commit is contained in:
parent
e463925efd
commit
84dc304136
|
@ -19,6 +19,7 @@ import net.megavex.scoreboardlibrary.api.sidebar.component.animation.SidebarAnim
|
|||
import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam;
|
||||
import net.megavex.scoreboardlibrary.api.team.TeamDisplay;
|
||||
import net.megavex.scoreboardlibrary.api.team.TeamManager;
|
||||
import net.megavex.scoreboardlibrary.api.team.enums.CollisionRule;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
@ -37,7 +38,9 @@ import org.bukkit.event.entity.PlayerDeathEvent;
|
|||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.twovb.sgm.SGM;
|
||||
import xyz.twovb.sgm.games.GameManager;
|
||||
|
@ -59,8 +62,10 @@ public class CTB implements Minigame {
|
|||
private final UUID uuid;
|
||||
private final ArrayList<Location> redBrickSpawns = new ArrayList<Location>();
|
||||
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
|
||||
private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
|
||||
private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
|
||||
private Location redSpawnLocation;
|
||||
private Location blueSpawnLocation;
|
||||
// private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
|
||||
// private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
|
||||
private final ArrayList<Player> players = new ArrayList<Player>();
|
||||
private final HashMap<Player, Location> playerLocationHashMap = new HashMap<>();
|
||||
// tagger, tagged
|
||||
|
@ -74,13 +79,14 @@ public class CTB implements Minigame {
|
|||
private GameState state;
|
||||
private int bricks;
|
||||
private int territoryLevel;
|
||||
private int boundsLevel;
|
||||
private Location spawnLoc;
|
||||
private TeamManager teamManager;
|
||||
private Sidebar sb;
|
||||
private SidebarAnimation<Component> headerAnimation;
|
||||
private ComponentSidebarLayout layout;
|
||||
private CommandSender owner;
|
||||
|
||||
private int tagTime;
|
||||
private int jailTime;
|
||||
|
||||
private int taskId;
|
||||
|
||||
|
@ -99,7 +105,6 @@ public class CTB implements Minigame {
|
|||
gameWorld = createGameWorld(world, uuid);
|
||||
gameWorld.setAutoSave(false);
|
||||
if (applyOptions(world)) {
|
||||
this.owner = owner;
|
||||
this.teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager();
|
||||
this.redTeam = teamManager.createIfAbsent("red_team");
|
||||
this.blueTeam = teamManager.createIfAbsent("blue_team");
|
||||
|
@ -200,10 +205,14 @@ public class CTB implements Minigame {
|
|||
public void start(CommandSender sender) {
|
||||
if (checkStart(sender)) {
|
||||
for (Player player : players) {
|
||||
player.getInventory().clear();
|
||||
player.teleport(this.spawnLoc);
|
||||
sb.addPlayer(player);
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
playerStateMap.put(player, CtbData.PlayerState.Free);
|
||||
for (ScoreboardTeam teams : teamManager.teams()) {
|
||||
|
||||
}
|
||||
}
|
||||
for (int i = 0; i <= this.bricks - 1; i++) {
|
||||
placeBrick(redBrickSpawns.get(i), redTeam);
|
||||
|
@ -332,7 +341,7 @@ public class CTB implements Minigame {
|
|||
}
|
||||
|
||||
private void releasePlayer(Player tagged, Player tagger) {
|
||||
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free);
|
||||
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Invulnerable);
|
||||
playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable);
|
||||
CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||
CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||
|
@ -394,6 +403,7 @@ public class CTB implements Minigame {
|
|||
} else if (team.equals(blueTeam)) {
|
||||
jail = blueJail;
|
||||
}
|
||||
|
||||
CtbData.Territory territory = getTerritory(tagger);
|
||||
|
||||
Player tagged = taggedPlayerHashMap.get(tagger);
|
||||
|
@ -449,6 +459,14 @@ public class CTB implements Minigame {
|
|||
Player tagger = event.getTagger();
|
||||
if (this.state != GameState.STARTED) return;
|
||||
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
||||
if (playerStateMap.get(tagged) == CtbData.PlayerState.Stealing) {
|
||||
ScoreboardTeam team = getTeam(tagged);
|
||||
if (team == redTeam) {
|
||||
placeBrick(tagged.getLocation(), blueTeam);
|
||||
} else if (team == blueTeam) {
|
||||
placeBrick(tagged.getLocation(), redTeam);
|
||||
}
|
||||
}
|
||||
taggedPlayerHashMap.putIfAbsent(tagger, tagged);
|
||||
CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||
CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||
|
@ -460,6 +478,18 @@ public class CTB implements Minigame {
|
|||
armorStandEntity.setSmall(true);
|
||||
tagger.addPassenger(armorStandEntity);
|
||||
armorStandEntity.addPassenger(tagged);
|
||||
new BukkitRunnable() {
|
||||
private int seconds = 0;
|
||||
@Override
|
||||
public void run() {
|
||||
if (seconds > tagTime) {
|
||||
tagger.sendMessage("out of time");
|
||||
} else {
|
||||
tagger.sendMessage(String.valueOf(tagTime));
|
||||
seconds++;
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(SGM.getInstance(), 0, 20L);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -577,17 +607,26 @@ public class CTB implements Minigame {
|
|||
Player brickTaker = event.getPlayer();
|
||||
if (!(rightClicked instanceof ArmorStand)) return;
|
||||
if (!players.contains(brickTaker)) return;
|
||||
SGM.getInstance().getCLogger().log(rightClicked);
|
||||
SGM.getInstance().getCLogger().log(brickTaker);
|
||||
EntityEquipment equipment = ((ArmorStand) rightClicked).getEquipment();
|
||||
Material brickMaterial = null;
|
||||
if (equipment.getHelmet().getType().equals(Material.RED_WOOL)) {
|
||||
brickMaterial = Material.RED_WOOL;
|
||||
} else if (equipment.getHelmet().getType().equals(Material.BLUE_WOOL)) {
|
||||
brickMaterial = Material.BLUE_WOOL;
|
||||
}
|
||||
ScoreboardTeam taggerTeam = getTeam(brickTaker);
|
||||
event.setCancelled(true);
|
||||
CtbData.Territory territory = getTerritory(brickTaker);
|
||||
if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return;
|
||||
if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return;
|
||||
if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return;
|
||||
if (brickMaterial != null) return;
|
||||
playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing);
|
||||
EntityEquipment playerEquipment = event.getPlayer().getEquipment();
|
||||
playerEquipment.setHelmet(new ItemStack(brickMaterial));
|
||||
PlayerStealBrickEvent playerStealBrickEvent = new PlayerStealBrickEvent(brickTaker);
|
||||
playerStealBrickEvent.callEvent();
|
||||
rightClicked.remove();
|
||||
}
|
||||
|
||||
public void addPlayerToJail(Player player) {
|
||||
|
@ -645,8 +684,10 @@ public class CTB implements Minigame {
|
|||
}
|
||||
|
||||
public void removePlayerFromTeams(Player player) {
|
||||
getTeam(player).defaultDisplay().removeEntry(player.getName());
|
||||
this.teamManager.removePlayer(player);
|
||||
if (getTeam(player) != null) {
|
||||
getTeam(player).defaultDisplay().removeEntry(player.getName());
|
||||
this.teamManager.removePlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
public ScoreboardTeam getTeam(Player player) {
|
||||
|
@ -664,28 +705,18 @@ public class CTB implements Minigame {
|
|||
Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.ARMOR_STAND);
|
||||
ArmorStand armorStand = (ArmorStand) brickEntity;
|
||||
EntityEquipment armorEquipment = armorStand.getEquipment();
|
||||
// armorStand.setInvisible(true);
|
||||
// TODO: make sure the children cannot uneqip the wool :sob:
|
||||
if (team.equals(redTeam)) {
|
||||
armorEquipment.setHelmet(new ItemStack(Material.RED_WOOL));
|
||||
} else if (team.equals(blueTeam)) {
|
||||
armorEquipment.setHelmet(new ItemStack(Material.BLUE_WOOL));
|
||||
}
|
||||
|
||||
// Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.BLOCK_DISPLAY);
|
||||
// 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) {
|
||||
TeamDisplay display = team.defaultDisplay();
|
||||
display.displayName(Component.text(displayName));
|
||||
display.collisionRule(CollisionRule.NEVER);
|
||||
display.playerColor(color);
|
||||
}
|
||||
|
||||
|
@ -755,8 +786,9 @@ public class CTB implements Minigame {
|
|||
if (mapInfoSection != null) {
|
||||
this.bricks = mapInfoSection.getInt("brickCount");
|
||||
this.territoryLevel = mapInfoSection.getInt("territory");
|
||||
this.boundsLevel = mapInfoSection.getInt("boundary");
|
||||
this.spawnLoc = parseString(mapInfoSection.getString("spawn"));
|
||||
this.jailTime = mapInfoSection.getInt("jailTime");
|
||||
this.tagTime = mapInfoSection.getInt("tagTime");
|
||||
} else {
|
||||
SGM.getInstance().getCLogger().error("Invalid map info. Please fix before trying again.");
|
||||
return false;
|
||||
|
@ -770,12 +802,13 @@ public class CTB implements Minigame {
|
|||
ConfigurationSection teamConfig = config.getConfigurationSection("teams." + teamName);
|
||||
if (teamConfig != null) {
|
||||
List<String> brickSpawns = teamConfig.getStringList("brickSpawns");
|
||||
List<String> playerSpawnArea = teamConfig.getStringList("playerSpawnArea");
|
||||
|
||||
if (team.equals(CtbData.Teams.Red)) {
|
||||
this.redJail = parseString(teamConfig.getString("jail"));
|
||||
this.redSpawnLocation = parseString(teamConfig.getString("playerSpawn"));
|
||||
} else if (team.equals(CtbData.Teams.Blue)) {
|
||||
this.blueJail = parseString(teamConfig.getString("jail"));
|
||||
this.blueSpawnLocation = parseString(teamConfig.getString("playerSpawn"));
|
||||
}
|
||||
|
||||
// Get brick locations
|
||||
|
@ -792,21 +825,6 @@ public class CTB implements Minigame {
|
|||
SGM.getInstance().getCLogger().error("Invalid brick spawns. Please fix before trying again.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Hopefully that works!
|
||||
if (playerSpawnArea.size() == 2) {
|
||||
for (String rawSpawnLoc : playerSpawnArea) {
|
||||
Location spawnLoc = parseString(rawSpawnLoc);
|
||||
if (team.equals(CtbData.Teams.Red)) {
|
||||
this.redSpawnArea.add(spawnLoc);
|
||||
} else if (team.equals(CtbData.Teams.Blue)) {
|
||||
this.blueSpawnArea.add(spawnLoc);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
SGM.getInstance().getCLogger().error("Invalid spawn area. Please fix before trying again.");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
SGM.getInstance().getCLogger().error("Invalid teams. Please fix before trying again.");
|
||||
return false;
|
||||
|
|
|
@ -7,7 +7,7 @@ public class CtbData {
|
|||
|
||||
public enum PlayerState {
|
||||
Free(""),
|
||||
Stealing("<yellow>⚠<bold>ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ</bold>⚠"),
|
||||
Stealing("<yellow>⚠<bold> ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ ⚠"),
|
||||
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
||||
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
||||
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
||||
|
|
|
@ -15,7 +15,7 @@ system:
|
|||
notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!"
|
||||
info: "&7You have tagged %player%! You have 25 seconds to take them to Jail! Crouch if you would like to set them free."
|
||||
released:
|
||||
notify: "&7You have released %player%!"
|
||||
notify: "&7You have released %player%! 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!"
|
||||
brick:
|
||||
|
|
|
@ -8,19 +8,15 @@ teams:
|
|||
brickSpawns:
|
||||
- 0,0,0
|
||||
- 0,0,0
|
||||
# The "y" coordinate does not matter for this value,
|
||||
# it will always teleport the player to the highest block.
|
||||
playerSpawnArea:
|
||||
- 0,0,0
|
||||
- 0,0,0
|
||||
playerSpawn: 0,0,0
|
||||
jail: 0,0,0
|
||||
tagTime: 25
|
||||
jailTime: 25
|
||||
blue:
|
||||
brickSpawns:
|
||||
- 0,0,0
|
||||
- 0,0,0
|
||||
# The "y" coordinate does not matter for this value,
|
||||
# it will always teleport the player to the highest block.
|
||||
playerSpawnArea:
|
||||
- 0,0,0
|
||||
- 0,0,0
|
||||
playerSpawn: 0,0,0
|
||||
jail: 0,0,0
|
||||
tagTime: 25
|
||||
jailTime: 25
|
Loading…
Reference in New Issue
Block a user