Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 107 additions & 32 deletions src/main/java/com/biel/lobby/mapes/Joc.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
import java.lang.reflect.InvocationTargetException;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.*;
import java.util.stream.Collectors;

import org.bukkit.*;
Expand Down Expand Up @@ -70,7 +67,10 @@ public abstract class Joc extends MapaResetejable {
protected boolean won = false;
protected boolean unfairFlag = false;
protected String host;

protected boolean allowRejoin = false;

private HashMap<String, ArrayList> Players = new HashMap<>();

//--Other--
private Boolean blockBreakPlace = false;
private Boolean giveStartingItemsRespawn = false;
Expand Down Expand Up @@ -118,25 +118,82 @@ public void setDefaultGameRules(){
setCustomGameRules();
}
protected abstract void setCustomGameRules();
public void JocIniciat(){
if (JocIniciat){Bukkit.broadcastMessage("S'ha intentat iniciar una partida que ja estava iniciada. Operació anul·lada!"); return;}

protected HashMap savePlayersForRejoin() {

HashMap<String, ArrayList> players = new HashMap<>();

for(Player p: getPlayers()) {
ArrayList<UUID> pl = new ArrayList<>();
pl.add(p.getUniqueId());
players.put(p.getName(), pl);
}

return players;

}

protected void onPlayerRejoin(Player p) {

p.sendMessage(ChatColor.AQUA + "Benvingut de nou!");
p.getInventory().clear();
customPlayerRejoin(p);

}

protected void customPlayerRejoin(Player p) {
p.teleport(world.getSpawnLocation());
}

protected boolean canPlayerRejoin(Player p) {

for(String s: Players.keySet()) {

ArrayList list = Players.get(s);
if(list.contains(p.getUniqueId())) return true;

}

return false;

}

public boolean getAllowRejoin(){
return allowRejoin;
}
public void setAllowRejoin(boolean b) {
allowRejoin = b;
}

public void JocIniciat() {

// Prevent starting the game if already started
if (JocIniciat) return;

// Broadcast game start
Bukkit.broadcastMessage(getGameDisplayName() + "S'ha iniciat la partida!");

// Save start status and enable pbp
JocIniciat = true;
//---
customJocIniciat();
world.setPVP(true);

// Setup game
customJocIniciat();
donarItemsInicials();
teletransportarTothom();
establirTempsInicial();
resetHeartbeat();
//---
updateScoreBoards();
sendGameInfo();

// Save match data
matchData = MatchData.registerStart(this);
for(Player p : getPlayers()){
getPlayerInfo(p);
}
updateScoreBoards();
sendGameInfo();
//sendGlobalMessage("W:" + getWorld().getName());

// Save players for rejoin later
Players = savePlayersForRejoin();

}

Expand Down Expand Up @@ -326,29 +383,44 @@ public void setHost(String name){
public boolean hasHostPrivilleges(Player p){
return host.equalsIgnoreCase(p.getName());
}

@Override
public void Join(Player ply) {
// TODO Auto-generated method stub
if(canJoin(ply)){
if(getPlayers().size() == 0)setHost(ply);

if(getGameState() == GameState.InGame && canPlayerRejoin(ply)) {
onPlayerRejoin(ply);
return;
}

if(canJoin(ply)) {

if(getPlayers().size() == 0) setHost(ply);
}

super.Join(ply);
}

public boolean canJoin(Player ply) {

switch (getGameState()){
case Complete:
return false;
case Editant:
return ply.isOp();
case InGame:
return getAllowSpectators();
case Preparing:
return true;
case Resetejant:
return false;
case WaitingForPlayers:
return true;

case Complete:
return false;

case Editant:
return ply.isOp();

case InGame:
return getAllowSpectators();

case Preparing:
return true;

case Resetejant:
return false;

case WaitingForPlayers:
return true;

}
return true;
Expand Down Expand Up @@ -462,7 +534,7 @@ private void teleportCameraRandomly(Player p) {
public void addSpectator(Player ply){
for (Player p : getPlayers()) {

p.sendMessage(getGameDisplayName() + ply.getName() + " ha entrar com a espectador");
p.sendMessage(getGameDisplayName() + ply.getName() + " ha entrat com a espectador");
}
if (!getSpectators().contains(ply)){
Espectadors.add(ply);
Expand Down Expand Up @@ -638,16 +710,19 @@ public void planificarReseteig(int delay){

@Override
protected void customJoin(Player ply){
//getPlayerInfo(ply);

Utils.clearPlayer(ply);
if (getGameState() == GameState.InGame) {


if(canPlayerRejoin(ply)) {
onPlayerRejoin(ply);
return;
}
addSpectator(ply);

} else {
sendGlobalMessage(getGameDisplayName() + ply.getName() + " ha entrat al joc");
donarItemsPreparatiusGenerals(ply);

}

updateScoreBoard(ply);
Expand Down
78 changes: 53 additions & 25 deletions src/main/java/com/biel/lobby/mapes/JocEquips.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import java.text.MessageFormat;
import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;

import org.bukkit.Bukkit;
Expand Down Expand Up @@ -78,6 +76,36 @@ protected void customJocIniciat() {
updateScoreBoards();

}

// Rejoin
@Override
protected HashMap savePlayersForRejoin() {

HashMap<String, ArrayList> players = new HashMap<>();

for (Equip e : Equips) {
ArrayList<UUID> pl = new ArrayList<>();

for (Player p: e.getPlayers()) {
pl.add(p.getUniqueId());
}

players.put(e.getAdjectiu(), pl);
}

return players;

}

@Override
protected void customPlayerRejoin(Player p) {

fixarSpawn(p);
p.teleport(obtenirEquip(p).getTeamSpawnLocation());
Utils.donarItemsPlayer(p, getStartingItems(p));

}

public void winGame(Equip e){ //TODO
if(won)return;
if(e == null){
Expand Down Expand Up @@ -201,31 +229,31 @@ public void updateHeadColor(Player p){
Com.setHeadColor(p, ColorConverter.chatToRaw(e.getChatColor()));
}
}
public void establirEquipJugador(Player ply, Equip eq){
if (!eq.getPlayers().contains(ply)){
for (Equip e : Equips){
if (e == eq){
e.addPlayer(ply);
}else{
e.removePlayer(ply);
}
}

if(generationMode == TeamGenerationMode.RANDOM) {


} else {
sendGlobalMessage(getGameDisplayName() + ply.getName() + " és a l'equip " + eq.getChatColor() + eq.getAdjectiu());
public void establirEquipJugador(Player ply, Equip eq) {

if (eq.getPlayers().contains(ply)) return;

for (Equip e : Equips){
if (e == eq) {
e.addPlayer(ply);
}else{
e.removePlayer(ply);
}



updateScoreBoards();
ScoreBoardUpdater.updateTeamScore(this);
updateHeadColor(ply);
updateScoreBoards();
}

if(generationMode == TeamGenerationMode.RANDOM) {


} else {
sendGlobalMessage(getGameDisplayName() + ply.getName() + " és a l'equip " + eq.getChatColor() + eq.getAdjectiu());
}


updateScoreBoards();
ScoreBoardUpdater.updateTeamScore(this);
updateHeadColor(ply);
updateScoreBoards();

}
@SuppressWarnings("unchecked")
public <T extends Equip> T obtenirEquip(Player ply, Class<T> type){
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/biel/lobby/mapes/jocs/RainbowClay.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ protected void customJocIniciat() {
super.customJocIniciat();
setBlockBreakPlace(true);
setGiveStartingItemsRespawn(true);
setAllowRejoin(true);
}

@Override
Expand Down