fix mysql, entityhider ignore temp players
This commit is contained in:
parent
c3eaf2eccd
commit
7ad63246f3
7 changed files with 72 additions and 24 deletions
2
pom.xml
2
pom.xml
|
@ -47,8 +47,6 @@
|
||||||
<artifact>*:*</artifact>
|
<artifact>*:*</artifact>
|
||||||
<excludes>
|
<excludes>
|
||||||
<exclude>META-INF/**</exclude>
|
<exclude>META-INF/**</exclude>
|
||||||
<exclude>sqlite-jdbc.properties</exclude>
|
|
||||||
<exclude>mariadb.properties</exclude>
|
|
||||||
</excludes>
|
</excludes>
|
||||||
</filter>
|
</filter>
|
||||||
</filters>
|
</filters>
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static net.tylermurphy.hideAndSeek.configuration.Config.databasePort;
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.databaseType;
|
import static net.tylermurphy.hideAndSeek.configuration.Config.databaseType;
|
||||||
|
|
||||||
public class Database {
|
public class Database {
|
||||||
|
@ -25,12 +26,14 @@ public class Database {
|
||||||
|
|
||||||
public Database(){
|
public Database(){
|
||||||
|
|
||||||
if(databaseType.equals("SQLITE")) {
|
if(databaseType.equalsIgnoreCase("SQLITE")) {
|
||||||
Main.getInstance().getLogger().info("SQLITE database chosen");
|
Main.getInstance().getLogger().info("SQLITE database chosen");
|
||||||
connection = new SQLiteConnection();
|
connection = new SQLiteConnection();
|
||||||
} else {
|
} else if(databaseType.equalsIgnoreCase("MYSQL")) {
|
||||||
Main.getInstance().getLogger().info("MYSQL database chosen");
|
Main.getInstance().getLogger().info("MYSQL database chosen");
|
||||||
connection = new MySQLConnection();
|
connection = new MySQLConnection();
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Invalid database type: " + databaseType);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerInfo = new GameDataTable(this);
|
playerInfo = new GameDataTable(this);
|
||||||
|
|
|
@ -201,7 +201,7 @@ public class GameDataTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateInfo(byte[] uuid, int hider_wins, int seeker_wins, int hider_games, int seeker_games, int hider_kills, int seeker_kills, int hider_deaths, int seeker_deaths){
|
protected void updateInfo(byte[] uuid, int hider_wins, int seeker_wins, int hider_games, int seeker_games, int hider_kills, int seeker_kills, int hider_deaths, int seeker_deaths){
|
||||||
String sql = "INSERT OR REPLACE INTO hs_data (uuid, hider_wins, seeker_wins, hider_games, seeker_games, hider_kills, seeker_kills, hider_deaths, seeker_deaths) VALUES (?,?,?,?,?,?,?,?,?)";
|
String sql = "REPLACE INTO hs_data (uuid, hider_wins, seeker_wins, hider_games, seeker_games, hider_kills, seeker_kills, hider_deaths, seeker_deaths) VALUES (?,?,?,?,?,?,?,?,?)";
|
||||||
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
||||||
statement.setBytes(1, uuid);
|
statement.setBytes(1, uuid);
|
||||||
statement.setInt(2, hider_wins);
|
statement.setInt(2, hider_wins);
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class InventoryTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveInventory(@NotNull UUID uuid, @NotNull ItemStack[] itemArray) {
|
public void saveInventory(@NotNull UUID uuid, @NotNull ItemStack[] itemArray) {
|
||||||
String sql = "INSERT OR REPLACE INTO hs_inventory (uuid, inventory) VALUES (?,?)";
|
String sql = "REPLACE INTO hs_inventory (uuid, inventory) VALUES (?,?)";
|
||||||
String data = itemStackArrayToBase64(itemArray);
|
String data = itemStackArrayToBase64(itemArray);
|
||||||
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
||||||
statement.setBytes(1, database.encodeUUID(uuid));
|
statement.setBytes(1, database.encodeUUID(uuid));
|
||||||
|
|
|
@ -96,7 +96,7 @@ public class NameDataTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean update(@NotNull UUID uuid, @NotNull String name){
|
public boolean update(@NotNull UUID uuid, @NotNull String name){
|
||||||
String sql = "INSERT OR REPLACE INTO hs_names (uuid, name) VALUES (?,?)";
|
String sql = "REPLACE INTO hs_names (uuid, name) VALUES (?,?)";
|
||||||
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
try(Connection connection = database.connect(); PreparedStatement statement = connection.prepareStatement(sql)) {
|
||||||
statement.setBytes(1, database.encodeUUID(uuid));
|
statement.setBytes(1, database.encodeUUID(uuid));
|
||||||
statement.setString(2, name);
|
statement.setString(2, name);
|
||||||
|
|
|
@ -25,6 +25,7 @@ import net.tylermurphy.hideAndSeek.Main;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
|
||||||
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
import static net.tylermurphy.hideAndSeek.configuration.Config.*;
|
||||||
|
|
||||||
|
@ -43,7 +44,8 @@ public class MySQLConnection implements DatabaseConnection {
|
||||||
Main.getInstance().getLogger().info("Database name: " + databaseName);
|
Main.getInstance().getLogger().info("Database name: " + databaseName);
|
||||||
|
|
||||||
|
|
||||||
config.setJdbcUrl("jdbc:mariadb://"+databaseHost+":"+databasePort+"/"+databaseName);
|
config.setDriverClassName(org.mariadb.jdbc.Driver.class.getName());
|
||||||
|
config.setJdbcUrl("jdbc:mariadb://"+databaseHost+":"+databasePort+"/"+databaseName.trim());
|
||||||
config.addDataSourceProperty("cachePrepStmts", "true");
|
config.addDataSourceProperty("cachePrepStmts", "true");
|
||||||
config.addDataSourceProperty("prepStmtCacheSize", "250");
|
config.addDataSourceProperty("prepStmtCacheSize", "250");
|
||||||
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
|
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
|
||||||
|
|
|
@ -84,26 +84,38 @@ public class EntityHider implements Listener {
|
||||||
/**
|
/**
|
||||||
* Add or remove the given entity and observer entry from the table.
|
* Add or remove the given entity and observer entry from the table.
|
||||||
* @param observer - the player observer.
|
* @param observer - the player observer.
|
||||||
* @param entityID - ID of the entity.
|
* @param newEntityId - ID of the entity.
|
||||||
* @param member - TRUE if they should be present in the table, FALSE otherwise.
|
* @param member - TRUE if they should be present in the table, FALSE otherwise.
|
||||||
* @return TRUE if they already were present, FALSE otherwise.
|
* @return TRUE if they already were present, FALSE otherwise.
|
||||||
*/
|
*/
|
||||||
protected boolean setMembership(Player observer, int entityID, boolean member) {
|
protected boolean setMembership(Player observer, int newEntityId, boolean member) {
|
||||||
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = observer.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return member;
|
||||||
|
}
|
||||||
if (member) {
|
if (member) {
|
||||||
return observerEntityMap.put(observer.getEntityId(), entityID, true) != null;
|
return observerEntityMap.put(newEntityId, entityID, true) != null;
|
||||||
} else {
|
} else {
|
||||||
return observerEntityMap.remove(observer.getEntityId(), entityID) != null;
|
return observerEntityMap.remove(newEntityId, entityID) != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the given entity and observer is present in the table.
|
* Determine if the given entity and observer is present in the table.
|
||||||
* @param observer - the player observer.
|
* @param observer - the player observer.
|
||||||
* @param entityID - ID of the entity.
|
* @param newEntityID - ID of the entity.
|
||||||
* @return TRUE if they are present, FALSE otherwise.
|
* @return TRUE if they are present, FALSE otherwise.
|
||||||
*/
|
*/
|
||||||
protected boolean getMembership(Player observer, int entityID) {
|
protected boolean getMembership(Player observer, int newEntityID) {
|
||||||
return observerEntityMap.contains(observer.getEntityId(), entityID);
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = observer.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return observerEntityMap.contains(entityID, newEntityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -124,7 +136,12 @@ public class EntityHider implements Listener {
|
||||||
* @param entity - the entity to remove.
|
* @param entity - the entity to remove.
|
||||||
*/
|
*/
|
||||||
protected void removeEntity(Entity entity) {
|
protected void removeEntity(Entity entity) {
|
||||||
int entityID = entity.getEntityId();
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = entity.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (Map<Integer, Boolean> maps : observerEntityMap.rowMap().values()) {
|
for (Map<Integer, Boolean> maps : observerEntityMap.rowMap().values()) {
|
||||||
maps.remove(entityID);
|
maps.remove(entityID);
|
||||||
|
@ -136,8 +153,13 @@ public class EntityHider implements Listener {
|
||||||
* @param player - the player that jused logged out.
|
* @param player - the player that jused logged out.
|
||||||
*/
|
*/
|
||||||
protected void removePlayer(Player player) {
|
protected void removePlayer(Player player) {
|
||||||
// Cleanup
|
int entityID;
|
||||||
observerEntityMap.rowMap().remove(player.getEntityId());
|
try {
|
||||||
|
entityID = player.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
observerEntityMap.rowMap().remove(entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,7 +216,13 @@ public class EntityHider implements Listener {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final boolean toggleEntity(Player observer, Entity entity) {
|
public final boolean toggleEntity(Player observer, Entity entity) {
|
||||||
if (isVisible(observer, entity.getEntityId())) {
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = observer.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (isVisible(observer, entityID)) {
|
||||||
return hideEntity(observer, entity);
|
return hideEntity(observer, entity);
|
||||||
} else {
|
} else {
|
||||||
return !showEntity(observer, entity);
|
return !showEntity(observer, entity);
|
||||||
|
@ -209,7 +237,13 @@ public class EntityHider implements Listener {
|
||||||
*/
|
*/
|
||||||
public final boolean showEntity(Player observer, Entity entity) {
|
public final boolean showEntity(Player observer, Entity entity) {
|
||||||
validate(observer, entity);
|
validate(observer, entity);
|
||||||
boolean hiddenBefore = !setVisibility(observer, entity.getEntityId(), true);
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = entity.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
boolean hiddenBefore = !setVisibility(observer, entityID, true);
|
||||||
|
|
||||||
// Resend packets
|
// Resend packets
|
||||||
if (manager != null && hiddenBefore) {
|
if (manager != null && hiddenBefore) {
|
||||||
|
@ -226,12 +260,18 @@ public class EntityHider implements Listener {
|
||||||
*/
|
*/
|
||||||
public final boolean hideEntity(Player observer, Entity entity) {
|
public final boolean hideEntity(Player observer, Entity entity) {
|
||||||
validate(observer, entity);
|
validate(observer, entity);
|
||||||
boolean visibleBefore = setVisibility(observer, entity.getEntityId(), false);
|
int entityID;
|
||||||
|
try {
|
||||||
|
entityID = entity.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
boolean visibleBefore = setVisibility(observer, entityID, false);
|
||||||
|
|
||||||
if (visibleBefore) {
|
if (visibleBefore) {
|
||||||
PacketContainer destroyEntity = new PacketContainer(ENTITY_DESTROY);
|
PacketContainer destroyEntity = new PacketContainer(ENTITY_DESTROY);
|
||||||
try {
|
try {
|
||||||
destroyEntity.getIntegerArrays().write(0, new int[]{entity.getEntityId()});
|
destroyEntity.getIntegerArrays().write(0, new int[]{entityID});
|
||||||
} catch (Exception e){ return false; }
|
} catch (Exception e){ return false; }
|
||||||
// Make the entity disappear
|
// Make the entity disappear
|
||||||
manager.sendServerPacket(observer, destroyEntity);
|
manager.sendServerPacket(observer, destroyEntity);
|
||||||
|
@ -252,8 +292,13 @@ public class EntityHider implements Listener {
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final boolean canSee(Player observer, Entity entity) {
|
public final boolean canSee(Player observer, Entity entity) {
|
||||||
validate(observer, entity);
|
validate(observer, entity);
|
||||||
|
int entityID;
|
||||||
return isVisible(observer, entity.getEntityId());
|
try {
|
||||||
|
entityID = entity.getEntityId();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return isVisible(observer, entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validate(Player observer, Entity entity) {
|
private void validate(Player observer, Entity entity) {
|
||||||
|
|
Loading…
Reference in a new issue