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
Binary file added PrisonPearl.jar
Binary file not shown.
36 changes: 19 additions & 17 deletions config.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
free_world: world
free_respawn: true
free_tppearl: true
damagelog_min: 3
damagelog_ticks: 600
ppkill_enabled: true
prison_stealing: true
prison_musthotbar: true
summon_damage_radius: 20
summon_damage_ticks: 20
summon_damage_amt: 2
prison_world: world_the_end
prison_resetbed: false
prison_motd:
- You are trapped in this bleak and endless world
- by a prison pearl.
- Type /pplocate to locate your pearl.
alt_ban_enabled: true
max_imprisoned_alts: 2
free_world: world
free_respawn: true
free_tppearl: true
damagelog_min: 3
damagelog_ticks: 600
ppkill_enabled: true
prison_stealing: true
prison_musthotbar: true
summon_damage_radius: 20
summon_damage_ticks: 20
summon_damage_amt: 2
prison_world: world_the_end
prison_resetbed: false
prison_motd:
- You are trapped in this bleak and endless world
- by a prison pearl.
- Type /pplocate to locate your pearl.
save_ticks: 2400
52 changes: 30 additions & 22 deletions src/com/untamedears/PrisonPearl/AltsList.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,47 @@
class AltsList {
private HashMap<String, String[]> altsHash;
private boolean initialised = false;
private boolean altBanEnabled;

public AltsList() {
}

public void load(File file) {
try {
loadAlts(file);
initialised = true;
} catch (IOException e) {
e.printStackTrace();
Bukkit.getLogger().info("Failed to load file!");
initialised = false;
altBanEnabled = Bukkit.getPluginManager().getPlugin("PrisonPearl").getConfig().getBoolean("alt_ban_enabled");
if(altBanEnabled){
try {
loadAlts(file);
initialised = true;
} catch (IOException e) {
e.printStackTrace();
Bukkit.getLogger().info("Failed to load file!");
initialised = false;
}
}
}

private void loadAlts(File file) throws IOException {
altsHash = new HashMap<String, String[]>();
FileInputStream fis;
fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
if (line.length() > 1) {
String parts[] = line.split(" ");
String[] newString = new String[parts.length];
System.arraycopy(parts, 0, newString, 0, parts.length);
for (String part : parts) {
altsHash.put(part, newString);
}
if(altBanEnabled){
altsHash = new HashMap<String, String[]>();
FileInputStream fis;
fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
if (line.length() > 1) {
String parts[] = line.split(" ");
String[] newString = new String[parts.length];
System.arraycopy(parts, 0, newString, 0, parts.length);
for (String part : parts) {
altsHash.put(part, newString);
}
}
}
}
}

public String[] getAltsArray(String name){
if (initialised && altsHash.containsKey(name)) {
if (altBanEnabled && initialised && altsHash.containsKey(name)) {
String[] names = altsHash.get(name);
String[] alts = new String[names.length-1];
for (int i = 0, j = 0; i < names.length; i++) {
Expand All @@ -62,6 +68,8 @@ public String[] getAltsArray(String name){
}

public Set<String> getAllNames() {
return altsHash.keySet();
if(altBanEnabled && altsHash!=null)
return altsHash.keySet();
else return new HashMap<String, String[]>().keySet();
}
}
207 changes: 126 additions & 81 deletions src/com/untamedears/PrisonPearl/PrisonPearlPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public class PrisonPearlPlugin extends JavaPlugin implements Listener {
private BroadcastManager broadcastman;
private AltsList altsList;
private static Logger log;
private static final Integer maxImprisonedAlts = 2;
private static Integer maxImprisonedAlts;// changed to non final
private boolean altBanEnabled = false;//default set to false, enable in config.yml with "alt_ban_enabled: true"
//private static long loginDelay = 10*60*1000;
private static final String kickMessage = "You have too many imprisoned alts! If you think this is an error, please message the mods on /r/civcraft";
//private static String delayMessage = "You cannot switch alt accounts that quickly, please wait ";
Expand Down Expand Up @@ -72,9 +73,23 @@ public void onEnable() {
broadcastman = new BroadcastManager();
combatTagManager = new CombatTagManager(this.getServer(), log);

loadAlts();
checkBanAllAlts();

//check config for alt_ban_enabled
if(Bukkit.getPluginManager().getPlugin("PrisonPearl").getConfig().contains("alt_ban_enabled"))
altBanEnabled = Bukkit.getPluginManager().getPlugin("PrisonPearl").getConfig().getBoolean("alt_ban_enabled");
//check config for max_imprisoned_alts
if(Bukkit.getPluginManager().getPlugin("PrisonPearl").getConfig().contains("max_imprisoned_alts"))
maxImprisonedAlts = Bukkit.getPluginManager().getPlugin("PrisonPearl").getConfig().getInt("max_imprisoned_alts");
else
maxImprisonedAlts = 2;

if(altBanEnabled){
log.info("Prison Pearl Alt Ban: enabled MaxImprisonedAlts: "+maxImprisonedAlts);
loadAlts();
checkBanAllAlts();
}
else
log.info("Prison Pearl Alt Ban: disabled");

if (Bukkit.getPluginManager().isPluginEnabled("PhysicalShop"))
new PhysicalShopListener(this, pearls);

Expand Down Expand Up @@ -178,7 +193,7 @@ private File getPortaledPlayersFile() {


private File getAltsListFile() {
return new File(getDataFolder(), "alts.txt");
return new File(getDataFolder(), "alts.txt");
}


Expand All @@ -188,7 +203,8 @@ private File getAltsListFile() {
public void onPlayerJoin(PlayerJoinEvent event) {
final Player player = event.getPlayer();
updateAttachment(player);
checkBan(player.getName());
if(altBanEnabled)
checkBan(player.getName());

if (player.isDead())
return;
Expand Down Expand Up @@ -533,17 +549,32 @@ public void onBlockBreakEvent(BlockBreakEvent event) {
}

public void loadAlts() {
if (altsList == null) {
altsList = new AltsList();
if(altBanEnabled){
if (altsList == null) {
altsList = new AltsList();
}
//Check if alts.txt exists, if it not then create it
try{
File altsListFile = getAltsListFile();
if(!altsListFile.exists()){
log.info("alts.txt does not exist, creating.");
altsListFile.createNewFile();
}
altsList.load(altsListFile);
}
catch(IOException e){
log.info(e.getMessage());
}
}
altsList.load(getAltsListFile());
}


public void checkBanAllAlts() {
if (altsList != null) {

if (altBanEnabled && altsList != null) {
Integer bannedCount = 0, unbannedCount = 0, total = 0, result;
for (String name : altsList.getAllNames()) {
//log.info("checking "+name);
log.info("checking "+name);
result = checkBan(name);
total++;
if (result == 2) {
Expand Down Expand Up @@ -584,99 +615,113 @@ private Long getMostRecentAltLogout(String[] alts) {
}

private int checkBan(String name) {
//log.info("checking "+name);
String[] alts = altsList.getAltsArray(name);
Integer pearledCount = pearls.getImprisonedCount(alts);
String[] imprisonedNames = pearls.getImprisonedNames(alts);
String names = "";
for (int i = 0; i < imprisonedNames.length; i++) {
names = names + imprisonedNames[i];
if (i < imprisonedNames.length-1) {
names = names + ", ";
if(altBanEnabled){
//log.info("checking "+name);
String[] alts = null;
if(altsList!=null)//check not null
alts = altsList.getAltsArray(name);
Integer pearledCount = pearls.getImprisonedCount(alts);
String[] imprisonedNames = pearls.getImprisonedNames(alts);
String names = "";
for (int i = 0; i < imprisonedNames.length; i++) {
names = names + imprisonedNames[i];
if (i < imprisonedNames.length-1) {
names = names + ", ";
}
}
}
if (pearledCount > maxImprisonedAlts && pearls.isImprisoned(name)) {
int count = 0;
for (String imprisonedName : imprisonedNames) {
if (imprisonedName.compareTo(name) < 0) {
count++;
}
if (count >= maxImprisonedAlts) {
banAndKick(name, pearledCount, names);
return 2;
}
}
} else if (pearledCount.equals(maxImprisonedAlts) || (pearledCount > maxImprisonedAlts && !pearls.isImprisoned(name))) {
banAndKick(name,pearledCount,names);
return 2;
} else if (banned.containsKey(name) && banned.get(name)) {
this.getServer().getOfflinePlayer(name).setBanned(false);
banned.put(name, false);
return 1;
if (pearledCount > maxImprisonedAlts && pearls.isImprisoned(name)) {
int count = 0;
for (String imprisonedName : imprisonedNames) {
if (imprisonedName.compareTo(name) < 0) {
count++;
}
if (count >= maxImprisonedAlts) {
banAndKick(name, pearledCount, names);
return 2;
}
}
} else if (pearledCount.equals(maxImprisonedAlts) || (pearledCount > maxImprisonedAlts && !pearls.isImprisoned(name))) {
banAndKick(name,pearledCount,names);
return 2;
} else if (banned.containsKey(name) && banned.get(name)) {
this.getServer().getOfflinePlayer(name).setBanned(false);
banned.put(name, false);
return 1;
}
return 0;
}
return 0;
}

private void banAndKick(String name, int pearledCount, String names) {
this.getServer().getOfflinePlayer(name).setBanned(true);
Player p = this.getServer().getPlayer(name);
if (p != null) {
p.kickPlayer(kickMessage);
if(altBanEnabled){
this.getServer().getOfflinePlayer(name).setBanned(true);
Player p = this.getServer().getPlayer(name);
if (p != null) {
p.kickPlayer(kickMessage);
}
banned.put(name, true);
log.info("banning "+name+" for having "+pearledCount+" imprisoned alts: "+names);
}
banned.put(name, true);
log.info("banning "+name+" for having "+pearledCount+" imprisoned alts: "+names);
}

private void checkBans(String[] names) {
Integer pearledCount;
String[] imprisonedNames;
String[] alts;
for (String name : names) {
log.info("checking " + name);
alts = altsList.getAltsArray(name);
imprisonedNames = pearls.getImprisonedNames(alts);
String iNames = "";
for (int j = 0; j < imprisonedNames.length; j++) {
iNames = iNames + imprisonedNames[j];
if (j < imprisonedNames.length - 1) {
iNames = iNames + ", ";
}
}
pearledCount = pearls.getImprisonedCount(alts);
if (pearledCount >= maxImprisonedAlts) {
this.getServer().getOfflinePlayer(name).setBanned(true);
Player p = this.getServer().getPlayer(name);
if (p != null) {
p.kickPlayer(kickMessage);
}
banned.put(name, true);
log.info("banning " + name + ", for having " + pearledCount + " imprisoned alts: " + iNames);
} else if (banned.containsKey(name) && banned.get(name).equals(Boolean.TRUE)) {
this.getServer().getOfflinePlayer(name).setBanned(false);
banned.put(name, false);
log.info("unbanning " + name + ", no longer has too many imprisoned alts.");
}
}
if(altBanEnabled){
Integer pearledCount;
String[] imprisonedNames;
String[] alts;
for (String name : names) {
log.info("checking " + name);
alts = altsList.getAltsArray(name);
imprisonedNames = pearls.getImprisonedNames(alts);
String iNames = "";
for (int j = 0; j < imprisonedNames.length; j++) {
iNames = iNames + imprisonedNames[j];
if (j < imprisonedNames.length - 1) {
iNames = iNames + ", ";
}
}
pearledCount = pearls.getImprisonedCount(alts);
if (pearledCount >= maxImprisonedAlts) {
this.getServer().getOfflinePlayer(name).setBanned(true);
Player p = this.getServer().getPlayer(name);
if (p != null) {
p.kickPlayer(kickMessage);
}
banned.put(name, true);
log.info("banning " + name + ", for having " + pearledCount + " imprisoned alts: " + iNames);
} else if (banned.containsKey(name) && banned.get(name).equals(Boolean.TRUE)) {
this.getServer().getOfflinePlayer(name).setBanned(false);
banned.put(name, false);
log.info("unbanning " + name + ", no longer has too many imprisoned alts.");
}
}
}
}

public boolean isTempBanned(String name) {
if (banned.containsKey(name)) {
if (altBanEnabled && banned.containsKey(name)) {
return banned.get(name);
}
return false;
}

public int getImprisonedCount(String name) {
return pearls.getImprisonedCount(altsList.getAltsArray(name));
if(altBanEnabled)
return pearls.getImprisonedCount(altsList.getAltsArray(name));
else
return 0;
}

public String getImprisonedAltsString(String name) {
String result = "";
String[] alts = pearls.getImprisonedNames(altsList.getAltsArray(name));
for (int i = 0; i < alts.length; i++) {
result = result + "alts[i]";
if (i < alts.length - 1) {
result = result + ", ";
if(altBanEnabled){
String[] alts = pearls.getImprisonedNames(altsList.getAltsArray(name));
for (int i = 0; i < alts.length; i++) {
result = result + "alts[i]";
if (i < alts.length - 1) {
result = result + ", ";
}
}
}
return result;
Expand Down