mirror of
https://github.com/plexusorg/Plex.git
synced 2024-12-22 17:17:37 +00:00
fix NPE and codec issues
This commit is contained in:
parent
d0b1d09f38
commit
9f19bd14ca
@ -37,6 +37,7 @@ import dev.plex.world.CustomWorld;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import org.bson.conversions.Bson;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
@ -7,8 +7,10 @@ import dev.plex.storage.StorageType;
|
|||||||
import dev.plex.util.PermissionsUtil;
|
import dev.plex.util.PermissionsUtil;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
@ -34,8 +36,7 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
{
|
{
|
||||||
player.setOp(true);
|
player.setOp(true);
|
||||||
PlexLog.debug("Automatically opped " + player.getName() + " since ranks are enabled.");
|
PlexLog.debug("Automatically opped " + player.getName() + " since ranks are enabled.");
|
||||||
}
|
} else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
|
||||||
{
|
{
|
||||||
player.setOp(false);
|
player.setOp(false);
|
||||||
PlexLog.debug("Automatically deopped " + player.getName() + " since ranks are disabled.");
|
PlexLog.debug("Automatically deopped " + player.getName() + " since ranks are disabled.");
|
||||||
@ -48,8 +49,7 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
plexPlayer.setName(player.getName()); // set the name of the player
|
plexPlayer.setName(player.getName()); // set the name of the player
|
||||||
plexPlayer.setIps(Arrays.asList(player.getAddress().getAddress().getHostAddress().trim())); // set the arraylist of ips
|
plexPlayer.setIps(Arrays.asList(player.getAddress().getAddress().getHostAddress().trim())); // set the arraylist of ips
|
||||||
DataUtils.insert(plexPlayer); // insert data in some wack db
|
DataUtils.insert(plexPlayer); // insert data in some wack db
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
||||||
List<String> ips = plexPlayer.getIps();
|
List<String> ips = plexPlayer.getIps();
|
||||||
@ -92,15 +92,18 @@ public class PlayerListener<T> extends PlexListener
|
|||||||
plexPlayer.loadPunishments();
|
plexPlayer.loadPunishments();
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
if (plugin.getStorageType() != StorageType.MONGODB)
|
||||||
{
|
{
|
||||||
String plural = notes.size() == 1 ? "note." : "notes.";
|
plugin.getSqlNotes().getNotes(plexPlayer.getUuid()).whenComplete((notes, ex) ->
|
||||||
if (!notes.isEmpty())
|
|
||||||
{
|
{
|
||||||
PlexUtils.broadcastToAdmins(Component.text(plexPlayer.getName() + " has " + notes.size() + " " + plural).color(NamedTextColor.GOLD));
|
String plural = notes.size() == 1 ? "note." : "notes.";
|
||||||
PlexUtils.broadcastToAdmins(Component.text("Click to view their " + plural).clickEvent(ClickEvent.runCommand("/notes " + plexPlayer.getName() + " list")).color(NamedTextColor.GOLD));
|
if (!notes.isEmpty())
|
||||||
}
|
{
|
||||||
});
|
PlexUtils.broadcastToAdmins(Component.text(plexPlayer.getName() + " has " + notes.size() + " " + plural).color(NamedTextColor.GOLD));
|
||||||
|
PlexUtils.broadcastToAdmins(Component.text("Click to view their " + plural).clickEvent(ClickEvent.runCommand("/notes " + plexPlayer.getName() + " list")).color(NamedTextColor.GOLD));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// saving the player's data
|
// saving the player's data
|
||||||
|
@ -11,6 +11,7 @@ import dev.plex.storage.StorageType;
|
|||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import dev.plex.util.TimeUtils;
|
import dev.plex.util.TimeUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
@ -22,6 +23,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@ -105,8 +107,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
{
|
{
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
});
|
});
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
Plex.get().getSqlPunishment().insertPunishment(punishment);
|
Plex.get().getSqlPunishment().insertPunishment(punishment);
|
||||||
}
|
}
|
||||||
@ -117,8 +118,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
return !FileUtils.readFileToString(file, StandardCharsets.UTF_8).trim().isEmpty();
|
return !FileUtils.readFileToString(file, StandardCharsets.UTF_8).trim().isEmpty();
|
||||||
}
|
} catch (IOException e)
|
||||||
catch (IOException e)
|
|
||||||
{
|
{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -129,6 +129,11 @@ public class PunishmentManager implements PlexBase
|
|||||||
{
|
{
|
||||||
return CompletableFuture.supplyAsync(() ->
|
return CompletableFuture.supplyAsync(() ->
|
||||||
{
|
{
|
||||||
|
if (!DataUtils.hasPlayedBefore(uuid))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
PlexPlayer player = DataUtils.getPlayer(uuid);
|
PlexPlayer player = DataUtils.getPlayer(uuid);
|
||||||
player.loadPunishments();
|
player.loadPunishments();
|
||||||
return player.getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
return player.getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
||||||
@ -138,10 +143,10 @@ public class PunishmentManager implements PlexBase
|
|||||||
public boolean isBanned(UUID uuid)
|
public boolean isBanned(UUID uuid)
|
||||||
{
|
{
|
||||||
// TODO: If a person is using MongoDB, this will error out because it is checking for bans on a player that doesn't exist yet
|
// TODO: If a person is using MongoDB, this will error out because it is checking for bans on a player that doesn't exist yet
|
||||||
/*if (!DataUtils.hasPlayedBefore(uuid))
|
if (!DataUtils.hasPlayedBefore(uuid))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}*/
|
}
|
||||||
return DataUtils.getPlayer(uuid).getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
return DataUtils.getPlayer(uuid).getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,8 +164,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
List<PlexPlayer> players = Plex.get().getMongoPlayerData().getPlayers();
|
List<PlexPlayer> players = Plex.get().getMongoPlayerData().getPlayers();
|
||||||
return players.stream().map(PlexPlayer::getPunishments).flatMap(Collection::stream).filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN).toList();
|
return players.stream().map(PlexPlayer::getPunishments).flatMap(Collection::stream).filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN).toList();
|
||||||
});
|
});
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
//PlexLog.debug("Checking active bans mysql");
|
//PlexLog.debug("Checking active bans mysql");
|
||||||
CompletableFuture<List<Punishment>> future = new CompletableFuture<>();
|
CompletableFuture<List<Punishment>> future = new CompletableFuture<>();
|
||||||
@ -191,8 +195,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
.peek(punishment -> punishment.setActive(false)).collect(Collectors.toList()));
|
.peek(punishment -> punishment.setActive(false)).collect(Collectors.toList()));
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
});
|
});
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return Plex.get().getSqlPunishment().removeBan(uuid);
|
return Plex.get().getSqlPunishment().removeBan(uuid);
|
||||||
}
|
}
|
||||||
@ -220,8 +223,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
Bukkit.broadcast(PlexUtils.messageComponent("unfrozePlayer", "Plex", Bukkit.getOfflinePlayer(player.getUuid()).getName()));
|
Bukkit.broadcast(PlexUtils.messageComponent("unfrozePlayer", "Plex", Bukkit.getOfflinePlayer(player.getUuid()).getName()));
|
||||||
}
|
}
|
||||||
}.runTaskLater(Plex.get(), 20 * seconds);
|
}.runTaskLater(Plex.get(), 20 * seconds);
|
||||||
}
|
} else if (punishment.getType() == PunishmentType.MUTE)
|
||||||
else if (punishment.getType() == PunishmentType.MUTE)
|
|
||||||
{
|
{
|
||||||
player.setMuted(true);
|
player.setMuted(true);
|
||||||
ZonedDateTime now = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
ZonedDateTime now = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package dev.plex.storage;
|
package dev.plex.storage;
|
||||||
|
|
||||||
|
import com.mongodb.ConnectionString;
|
||||||
|
import com.mongodb.MongoClientOptions;
|
||||||
|
import com.mongodb.MongoClientSettings;
|
||||||
import com.mongodb.client.MongoClient;
|
import com.mongodb.client.MongoClient;
|
||||||
import com.mongodb.client.MongoClients;
|
import com.mongodb.client.MongoClients;
|
||||||
import dev.morphia.Datastore;
|
import dev.morphia.Datastore;
|
||||||
@ -7,7 +10,9 @@ import dev.morphia.Morphia;
|
|||||||
import dev.morphia.mapping.MapperOptions;
|
import dev.morphia.mapping.MapperOptions;
|
||||||
import dev.plex.PlexBase;
|
import dev.plex.PlexBase;
|
||||||
import dev.plex.player.PlexPlayer;
|
import dev.plex.player.PlexPlayer;
|
||||||
|
import dev.plex.storage.codec.ZonedDateTimeCodec;
|
||||||
import dev.plex.util.PlexLog;
|
import dev.plex.util.PlexLog;
|
||||||
|
import org.bson.codecs.configuration.CodecRegistries;
|
||||||
|
|
||||||
public class MongoConnection implements PlexBase
|
public class MongoConnection implements PlexBase
|
||||||
{
|
{
|
||||||
@ -42,7 +47,7 @@ public class MongoConnection implements PlexBase
|
|||||||
connectionString = "mongodb://" + host + ":" + port + "/?uuidRepresentation=STANDARD";
|
connectionString = "mongodb://" + host + ":" + port + "/?uuidRepresentation=STANDARD";
|
||||||
}
|
}
|
||||||
PlexLog.debug("Using mongo connection string: " + connectionString);
|
PlexLog.debug("Using mongo connection string: " + connectionString);
|
||||||
MongoClient client = MongoClients.create(connectionString);
|
MongoClient client = MongoClients.create(MongoClientSettings.builder().codecRegistry(CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromCodecs(new ZonedDateTimeCodec()))).applyConnectionString(new ConnectionString(connectionString)).build());
|
||||||
Datastore datastore = Morphia.createDatastore(client, database == null ? "admin" : database, MapperOptions.DEFAULT);
|
Datastore datastore = Morphia.createDatastore(client, database == null ? "admin" : database, MapperOptions.DEFAULT);
|
||||||
datastore.getMapper().map(PlexPlayer.class);
|
datastore.getMapper().map(PlexPlayer.class);
|
||||||
datastore.ensureIndexes();
|
datastore.ensureIndexes();
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package dev.plex.storage.codec;
|
||||||
|
|
||||||
|
import org.bson.BsonReader;
|
||||||
|
import org.bson.BsonWriter;
|
||||||
|
import org.bson.codecs.Codec;
|
||||||
|
import org.bson.codecs.DecoderContext;
|
||||||
|
import org.bson.codecs.EncoderContext;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
|
import static dev.plex.util.TimeUtils.TIMEZONE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Taah
|
||||||
|
* @project Plex
|
||||||
|
* @since 6:53 PM [28-05-2022]
|
||||||
|
*/
|
||||||
|
public class ZonedDateTimeCodec implements Codec<ZonedDateTime>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public ZonedDateTime decode(BsonReader reader, DecoderContext decoderContext)
|
||||||
|
{
|
||||||
|
return ZonedDateTime.ofInstant(Instant.ofEpochMilli(reader.readDateTime()), ZoneId.of(TIMEZONE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void encode(BsonWriter writer, ZonedDateTime value, EncoderContext encoderContext)
|
||||||
|
{
|
||||||
|
writer.writeDateTime(value.toInstant().toEpochMilli());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ZonedDateTime> getEncoderClass()
|
||||||
|
{
|
||||||
|
return ZonedDateTime.class;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user