From b63ecc02b81fccb8e5471706b8bd281776072185 Mon Sep 17 00:00:00 2001 From: ypsdf1 Date: Fri, 10 Jul 2026 19:08:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DPHP=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=9A=E5=A2=9E=E7=9B=8A=E6=95=88=E6=9E=9C=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=A1=A5=E9=BD=90=E5=BF=85=E8=A6=81=E5=8F=82=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E5=AD=98=E5=9C=A8=E6=80=A7=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E7=99=BB=E5=BD=95=E5=BA=93=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=96=B0=E5=A2=9E=E5=AE=9E=E4=BD=93=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/land_api.php | 23 +++++++++++++++++++++-- api/sync.php | 5 +++-- player.php | 6 ++++++ 3 files changed, 30 insertions(+), 4 deletions(-) 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);