diff --git a/api/land_api.php b/api/land_api.php index 2a5dabb..3521caa 100644 --- a/api/land_api.php +++ b/api/land_api.php @@ -500,6 +500,7 @@ function initLandTables($db) { 'deny_raid' => "INTEGER DEFAULT 0", 'deny_fire_spread' => "INTEGER DEFAULT 0", 'deny_item_frame' => "INTEGER DEFAULT 0", + 'deny_entity_interact' => "INTEGER DEFAULT 0", 'deny_move' => "INTEGER DEFAULT 0", 'deny_pickup' => "INTEGER DEFAULT 0", 'deny_fire' => "INTEGER DEFAULT 0", @@ -632,7 +633,7 @@ function handleSyncLands($db, $post) { punish_commands, deny_block_place, deny_block_break, deny_pvp, deny_fall_damage, deny_hunger, deny_all_damage, deny_drop, deny_mount, deny_ender_pearl, deny_bow, deny_potion, deny_explosion, deny_raid, deny_fire_spread, - deny_all_effects, deny_item_frame, deny_move, deny_pickup, deny_fire, + deny_all_effects, deny_item_frame, deny_entity_interact, deny_move, deny_pickup, deny_fire, peace_mode, peace_mode_duration, peace_whitelist, enforce_game_mode, mode_exempt, enter_msg, leave_msg, confiscate_msg, deny_thrown_projectiles, deny_glowing, deny_redstone_interaction, @@ -647,7 +648,7 @@ function handleSyncLands($db, $post) { :punish_commands, :deny_block_place, :deny_block_break, :deny_pvp, :deny_fall_damage, :deny_hunger, :deny_all_damage, :deny_drop, :deny_mount, :deny_ender_pearl, :deny_bow, :deny_potion, :deny_explosion, :deny_raid, :deny_fire_spread, - :deny_all_effects, :deny_item_frame, :deny_move, :deny_pickup, :deny_fire, + :deny_all_effects, :deny_item_frame, :deny_entity_interact, :deny_move, :deny_pickup, :deny_fire, :peace_mode, :peace_mode_duration, :peace_whitelist, :enforce_game_mode, :mode_exempt, :enter_msg, :leave_msg, :confiscate_msg, :deny_thrown_projectiles, :deny_glowing, :deny_redstone_interaction, @@ -694,6 +695,7 @@ function handleSyncLands($db, $post) { $stmt->bindValue(':deny_fire_spread', (int)($land['deny_fire_spread'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_all_effects', (int)($land['deny_all_effects'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_item_frame', (int)($land['deny_item_frame'] ?? 0), SQLITE3_INTEGER); + $stmt->bindValue(':deny_entity_interact', (int)($land['deny_entity_interact'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_move', (int)($land['deny_move'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_pickup', (int)($land['deny_pickup'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_fire', (int)($land['deny_fire'] ?? 0), SQLITE3_INTEGER); @@ -1207,6 +1209,23 @@ function playerExists($db, $playerName) { // 表可能不存在,忽略 } + // ★ 兜底:检查login.db(Java游戏库,玩家注册的权威数据源) + try { + $loginDbPath = defined('GAME_LOGIN_DB') ? GAME_LOGIN_DB : (__DIR__ . '/../../plugin/login.db'); + if (file_exists($loginDbPath)) { + $loginDb = new SQLite3($loginDbPath); + $loginDb->enableExceptions(true); + $stmt = $loginDb->prepare("SELECT COUNT(*) as cnt FROM users WHERE player_name = :player"); + $stmt->bindValue(':player', $playerName, SQLITE3_TEXT); + $result = $stmt->execute(); + $row = $result->fetchArray(SQLITE3_ASSOC); + $loginDb->close(); + if ($row && $row['cnt'] > 0) return true; + } + } catch (\Throwable $e) { + // login.db 可能不存在,忽略 + } + return false; } diff --git a/api/sync.php b/api/sync.php index a818469..51b2d53 100644 --- a/api/sync.php +++ b/api/sync.php @@ -469,7 +469,7 @@ function syncLands() { peace_mode, peace_mode_duration, peace_whitelist, enforce_game_mode, mode_exempt, enter_msg, leave_msg, confiscate_msg, enable_announce, announce_template, txt_content, deny_block_break, deny_block_place, deny_fluid, deny_pvp, deny_fire_spread, deny_all_effects, - deny_item_frame, deny_move, deny_pickup, deny_drop, deny_explosion, deny_fall_damage, deny_hunger, + deny_item_frame, deny_entity_interact, deny_move, deny_pickup, deny_drop, deny_explosion, deny_fall_damage, deny_hunger, deny_all_damage, clear_effects, give_effects, clear_all_bad_effects, admin_changed, deny_thrown_projectiles, deny_glowing, deny_redstone_interaction, deny_door_interaction, deny_noteblock_jukebox, deny_lead, deny_crop_harvest, deny_wool_shear, deny_animal_feeding, @@ -478,7 +478,7 @@ function syncLands() { :peace_mode, :peace_dur, :peace_wl, :enforce_gm, :mode_exempt, :enter_msg, :leave_msg, :confiscate_msg, :announce, :announce_tpl, :txt_content, :deny_block_break, :deny_block_place, :deny_fluid, :deny_pvp, :deny_fire_spread, :deny_all_effects, - :deny_item_frame, :deny_move, :deny_pickup, :deny_drop, :deny_explosion, :deny_fall_damage, :deny_hunger, + :deny_item_frame, :deny_entity_interact, :deny_move, :deny_pickup, :deny_drop, :deny_explosion, :deny_fall_damage, :deny_hunger, :deny_all_damage, :clear_effects, :give_effects, :clear_all_bad_effects, :admin_changed, :deny_thrown_projectiles, :deny_glowing, :deny_redstone_interaction, :deny_door_interaction, :deny_noteblock_jukebox, :deny_lead, :deny_crop_harvest, :deny_wool_shear, :deny_animal_feeding, @@ -515,6 +515,7 @@ function syncLands() { $stmt->bindValue(':deny_fire_spread', (int)($land['deny_fire_spread'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_all_effects', (int)($land['deny_all_effects'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_item_frame', (int)($land['deny_item_frame'] ?? 0), SQLITE3_INTEGER); + $stmt->bindValue(':deny_entity_interact', (int)($land['deny_entity_interact'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_move', (int)($land['deny_move'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_pickup', (int)($land['deny_pickup'] ?? 0), SQLITE3_INTEGER); $stmt->bindValue(':deny_drop', (int)($land['deny_drop'] ?? 0), SQLITE3_INTEGER); diff --git a/player.php b/player.php index b021635..ad20fd6 100644 --- a/player.php +++ b/player.php @@ -3164,6 +3164,8 @@ async function addClearEffect(landName) { current.push(eff); const url = new URL(API + 'land_api.php', location.href); + url.searchParams.set('action', 'update_land_field'); + url.searchParams.set('token', TOKEN); const body = new URLSearchParams(); body.set('name', landName); body.set('field', 'clear_effects'); @@ -3244,6 +3246,8 @@ async function addGiveEffect(landName) { current.push([eff, Math.min(Math.max(level,1),255), Math.min(Math.max(duration,1),3600)]); const url = new URL(API + 'land_api.php', location.href); + url.searchParams.set('action', 'update_land_field'); + url.searchParams.set('token', TOKEN); const body = new URLSearchParams(); body.set('name', landName); body.set('field', 'give_effects'); @@ -3264,6 +3268,8 @@ async function addGiveEffect(landName) { async function removeLandEffect(landName, field, effValue) { try { const url = new URL(API + 'land_api.php', location.href); + url.searchParams.set('action', 'update_land_field'); + url.searchParams.set('token', TOKEN); const detailUrl = new URL(API + 'land_api.php', location.href); detailUrl.searchParams.set('action', 'land_detail'); detailUrl.searchParams.set('token', TOKEN);