Skip to content

Commit 4b68b00

Browse files
删除交互实体
1 parent 2742187 commit 4b68b00

3 files changed

Lines changed: 0 additions & 126 deletions

File tree

src/main/java/ict/minesunshineone/landmark/listener/PlayerListener.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,12 @@
1010
import org.bukkit.Sound;
1111
import org.bukkit.block.Block;
1212
import org.bukkit.configuration.file.FileConfiguration;
13-
import org.bukkit.entity.Entity;
14-
import org.bukkit.entity.Interaction;
1513
import org.bukkit.entity.Player;
1614
import org.bukkit.event.EventHandler;
1715
import org.bukkit.event.EventPriority;
1816
import org.bukkit.event.Listener;
1917
import org.bukkit.event.block.Action;
2018
import org.bukkit.event.inventory.InventoryClickEvent;
21-
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
2219
import org.bukkit.event.player.PlayerInteractEvent;
2320
import org.bukkit.event.player.PlayerMoveEvent;
2421
import org.bukkit.event.player.PlayerQuitEvent;
@@ -305,26 +302,6 @@ public void onPlayerInteract(PlayerInteractEvent event) {
305302
}
306303
}
307304

308-
@EventHandler
309-
public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) {
310-
Entity entity = event.getRightClicked();
311-
if (!(entity instanceof Interaction)) {
312-
return;
313-
}
314-
315-
Player player = event.getPlayer();
316-
317-
// 检查是否是锚点交互实体
318-
for (Landmark landmark : plugin.getLandmarkManager().getLandmarks().values()) {
319-
if (landmark.getInteractionEntityId() != null
320-
&& landmark.getInteractionEntityId().equals(entity.getUniqueId())) {
321-
event.setCancelled(true);
322-
new LandmarkMenu(plugin, player).open();
323-
break;
324-
}
325-
}
326-
}
327-
328305
@EventHandler
329306
public void onPlayerQuit(PlayerQuitEvent event) {
330307
UUID playerId = event.getPlayer().getUniqueId();

src/main/java/ict/minesunshineone/landmark/manager/LandmarkManager.java

Lines changed: 0 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@
1010
import java.util.Set;
1111
import java.util.UUID;
1212

13-
import org.bukkit.Bukkit;
1413
import org.bukkit.Location;
1514
import org.bukkit.configuration.ConfigurationSection;
1615
import org.bukkit.configuration.file.YamlConfiguration;
1716
import org.bukkit.entity.Entity;
18-
import org.bukkit.entity.Interaction;
1917
import org.bukkit.entity.Player;
2018

2119
import ict.minesunshineone.landmark.LandmarkPlugin;
2220
import ict.minesunshineone.landmark.model.Landmark;
23-
import net.kyori.adventure.text.Component;
2421

2522
public class LandmarkManager {
2623

@@ -55,9 +52,6 @@ public void createLandmark(String name, Location location, String description) {
5552
Landmark landmark = new Landmark(name, location, description, menuPosition[0], menuPosition[1]);
5653
landmarks.put(name.toLowerCase(), landmark);
5754

58-
// 使用统一的方法创建实体
59-
createLandmarkEntities(landmark);
60-
6155
plugin.getSLF4JLogger().info("成功创建锚点展示实体: {}", name);
6256
saveData();
6357
} catch (IllegalArgumentException | IllegalStateException e) {
@@ -107,25 +101,6 @@ public void deleteLandmark(String name) {
107101
String lowerName = name.toLowerCase();
108102
Landmark landmark = landmarks.get(lowerName);
109103
if (landmark != null) {
110-
// 移除交互实体
111-
if (landmark.getInteractionEntityId() != null) {
112-
Location loc = landmark.getLocation();
113-
if (loc != null && loc.getWorld() != null) {
114-
// 移除交互实体
115-
Entity entity = Bukkit.getEntity(landmark.getInteractionEntityId());
116-
if (entity != null) {
117-
entity.remove();
118-
}
119-
120-
// 移除同位置的所有具有相同名称的交互实体
121-
loc.getWorld().getNearbyEntities(loc, 2, 2, 2).stream()
122-
.filter(e -> e instanceof Interaction)
123-
.filter(e -> e.customName() != null && e.customName().equals(Component.text("§e[点击打开]")))
124-
.forEach(Entity::remove);
125-
}
126-
landmark.setInteractionEntityId(null);
127-
}
128-
129104
// 移除锚点数据
130105
landmarks.remove(lowerName);
131106

@@ -254,19 +229,7 @@ public final void loadData() {
254229
int menuColumn = landmarkSection.getInt("menu_column", 1);
255230

256231
Landmark landmark = new Landmark(key, location, description, menuRow, menuColumn);
257-
String interactionId = landmarkSection.getString("interaction_entity_id");
258-
if (interactionId != null) {
259-
landmark.setInteractionEntityId(UUID.fromString(interactionId));
260-
}
261-
262232
landmarks.put(key.toLowerCase(), landmark);
263-
264-
// 延迟创建实体,确保世界加载完成
265-
plugin.getServer().getRegionScheduler().runDelayed(plugin, location, task -> {
266-
if (location.getWorld() != null && location.getChunk().isLoaded()) {
267-
createLandmarkEntities(landmark);
268-
}
269-
}, 100L);
270233
}
271234
} catch (IllegalArgumentException | IllegalStateException e) {
272235
plugin.getSLF4JLogger().error("加载锚点 {} 时发生错误: {}", key, e.getMessage());
@@ -308,8 +271,6 @@ public void saveData() {
308271
Landmark landmark = entry.getValue();
309272
landmarkSection.set("location", landmark.getLocation());
310273
landmarkSection.set("description", landmark.getDescription());
311-
landmarkSection.set("interaction_entity_id", landmark.getInteractionEntityId() != null
312-
? landmark.getInteractionEntityId().toString() : null);
313274
landmarkSection.set("menu_row", landmark.getMenuRow());
314275
landmarkSection.set("menu_column", landmark.getMenuColumn());
315276
}
@@ -428,68 +389,13 @@ public boolean isPlayerNearLandmark(Player player, Location landmarkLoc) {
428389
&& playerLoc.distance(landmarkLoc) <= plugin.getConfigManager().getUnlockRadius();
429390
}
430391

431-
private void createLandmarkEntities(Landmark landmark) {
432-
try {
433-
Location location = landmark.getLocation();
434-
if (location.getWorld() == null || !location.getChunk().isLoaded()) {
435-
return;
436-
}
437-
438-
// 确保位置是方块中心
439-
Location centerLoc = location.clone();
440-
centerLoc.setX(location.getBlockX() + 0.5);
441-
centerLoc.setY(location.getBlockY());
442-
centerLoc.setZ(location.getBlockZ() + 0.5);
443-
444-
// 创建交互实体
445-
Location interactLoc = centerLoc.clone().add(0, 0, 0);
446-
Interaction interaction = location.getWorld().spawn(interactLoc, Interaction.class, entity -> {
447-
entity.setInteractionWidth(3.5f);
448-
entity.setInteractionHeight(2.0f);
449-
entity.setPersistent(true);
450-
entity.setInvulnerable(true);
451-
entity.setCustomNameVisible(true);
452-
entity.customName(Component.text("§e[点击打开]"));
453-
entity.setGravity(false);
454-
});
455-
456-
landmark.setInteractionEntityId(interaction.getUniqueId());
457-
saveData(); // 保存实体ID
458-
} catch (IllegalArgumentException | IllegalStateException e) {
459-
plugin.getSLF4JLogger().error("重建锚点实体时发生错误: {}", e.getMessage());
460-
}
461-
}
462-
463392
public void cleanup() {
464-
// 清理所有实体
465-
for (Landmark landmark : landmarks.values()) {
466-
removeLandmarkEntities(landmark);
467-
}
468-
469393
// 清理数据结构
470394
landmarks.clear();
471395
unlockedLandmarks.clear();
472396
cooldowns.clear();
473397
}
474398

475-
private void removeLandmarkEntities(Landmark landmark) {
476-
if (landmark.getDisplayEntityId() != null) {
477-
Entity entity = Bukkit.getEntity(landmark.getDisplayEntityId());
478-
if (entity != null) {
479-
entity.remove();
480-
}
481-
landmark.setDisplayEntityId(null);
482-
}
483-
484-
if (landmark.getInteractionEntityId() != null) {
485-
Entity entity = Bukkit.getEntity(landmark.getInteractionEntityId());
486-
if (entity != null) {
487-
entity.remove();
488-
}
489-
landmark.setInteractionEntityId(null);
490-
}
491-
}
492-
493399
public void updateMenuPosition(String landmarkName, int newRow, int newColumn) {
494400
Landmark landmark = landmarks.get(landmarkName.toLowerCase());
495401
if (landmark != null) {

src/main/java/ict/minesunshineone/landmark/model/Landmark.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public class Landmark {
1010
private Location location;
1111
private String description;
1212
private UUID displayEntityId;
13-
private UUID interactionEntityId;
1413
private int menuRow; // 在菜单中的行位置
1514
private int menuColumn; // 在菜单中的列位置
1615

@@ -62,14 +61,6 @@ public void setDisplayEntityId(UUID displayEntityId) {
6261
this.displayEntityId = displayEntityId;
6362
}
6463

65-
public UUID getInteractionEntityId() {
66-
return interactionEntityId;
67-
}
68-
69-
public void setInteractionEntityId(UUID interactionEntityId) {
70-
this.interactionEntityId = interactionEntityId;
71-
}
72-
7364
public int getMenuRow() {
7465
return menuRow;
7566
}

0 commit comments

Comments
 (0)