- Баллы
- 76
- Имя в Minecraft
- Ryazha_
Код:
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
if (event.getInventory().getHolder() instanceof Block) {
Block clickedBlock = (Block) event.getInventory().getHolder();
if (clickedBlock.getType() == Material.ENDER_CHEST || clickedBlock.getType() == Material.CHEST) {
Location chestLocation = clickedBlock.getLocation();
event.setCancelled(true);
checkCases(chestLocation, (Player) event.getPlayer());
}
}
}
private static final double COORDINATE_TOLERANCE = 0.85; // Погрешность для сравнения координат
private void checkCases(Location chestLocation, Player player) {
try {
File pluginFolder = plugin.getDataFolder();
File[] files = pluginFolder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().endsWith(".db")) {
String dbName = file.getName();
String[] parts = dbName.split("\\.");
String caseName = parts[0]; // Имя кейса из имени файла
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:" + plugin.getDataFolder() + "/" + dbName);
Statement statement = connection.createStatement()) {
ResultSet resultSet = statement.executeQuery("SELECT * FROM cases WHERE x=? AND y=? AND z=?");
while (resultSet.next()) {
double x = resultSet.getDouble("x");
double y = resultSet.getDouble("y");
double z = resultSet.getDouble("z");
if (isLocationWithinTolerance(chestLocation, x, y, z)) {
String caseType = resultSet.getString("type");
animateCase(caseName, caseType, player);
return;
}
}
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private boolean isLocationWithinTolerance(Location location, double x, double y, double z) {
return Math.abs(location.getX() - x) < COORDINATE_TOLERANCE &&
Math.abs(location.getY() - y) < COORDINATE_TOLERANCE &&
Math.abs(location.getZ() - z) < COORDINATE_TOLERANCE;
}
По окончанию проверки должны появляться партиклы и т.д. вокруг сундука, если всё верно.
Вот код класса, проверки, вроде, все правильные, ошибок в консоли нет.