finish invisible (glow) item frame

This commit is contained in:
zhangyuheng 2024-01-15 21:14:21 +08:00
parent 533226c8f4
commit aa158062ea
4 changed files with 98 additions and 1 deletions

View File

@ -6,7 +6,7 @@
<groupId>cn.lunadeer</groupId>
<artifactId>EssentialsD</artifactId>
<version>0.3</version>
<version>0.5</version>
<packaging>jar</packaging>
<name>EssentialsD</name>

View File

@ -1,6 +1,7 @@
package cn.lunadeer.essentialsd;
import cn.lunadeer.essentialsd.commands.*;
import cn.lunadeer.essentialsd.recipes.InvisibleGlowItemFrame;
import cn.lunadeer.essentialsd.recipes.InvisibleItemFrame;
import cn.lunadeer.essentialsd.utils.ConfigManager;
import cn.lunadeer.essentialsd.utils.XLogger;
@ -24,6 +25,7 @@ public final class EssentialsD extends JavaPlugin {
Objects.requireNonNull(Bukkit.getPluginCommand("skull")).setExecutor(new Skull());
this.getServer().addRecipe(InvisibleItemFrame.getRecipe());
this.getServer().addRecipe(InvisibleGlowItemFrame.getRecipe());
String logo = "EssentialsD 已加载 版本: " + getPluginMeta().getVersion() + "\n";
// https://patorjk.com/software/taag/#p=display&f=Big&t=EssentialsD

View File

@ -3,11 +3,26 @@ package cn.lunadeer.essentialsd;
import cn.lunadeer.essentialsd.commands.ShowItem;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPlaceEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.persistence.PersistentDataType;
import java.util.Objects;
public class Events implements Listener {
@EventHandler
@ -23,4 +38,56 @@ public class Events implements Listener {
}
event.setCancelled(true);
}
@EventHandler
public void placeItemFrame(HangingPlaceEvent event) {
Entity entity = event.getEntity();
if (entity.getType() != EntityType.ITEM_FRAME && entity.getType() != EntityType.GLOW_ITEM_FRAME) {
return;
}
if (!Objects.requireNonNull(event.getItemStack()).getItemMeta().getPersistentDataContainer().has(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE)) {
return;
}
if (entity.getType() == EntityType.ITEM_FRAME) {
ItemFrame itemFrame = (ItemFrame) entity;
itemFrame.getPersistentDataContainer().set(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE, (byte) 1);
} else if (entity.getType() == EntityType.GLOW_ITEM_FRAME) {
GlowItemFrame itemFrame = (GlowItemFrame) entity;
itemFrame.getPersistentDataContainer().set(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE, (byte) 1);
}
}
@EventHandler
public void putSomeOnItemFrame(PlayerInteractEntityEvent event) {
Entity entity = event.getRightClicked();
if(!(entity instanceof ItemFrame)) {
return;
}
if (!entity.getPersistentDataContainer().has(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE)) {
return;
}
if (entity.getType() == EntityType.ITEM_FRAME || entity.getType() == EntityType.GLOW_ITEM_FRAME) {
ItemFrame itemFrame = (ItemFrame) entity;
itemFrame.setVisible(false);
}
}
@EventHandler
public void removeSomeOnItemFrame(EntityDamageByEntityEvent event) {
Entity entity = event.getEntity();
if (!(entity instanceof ItemFrame)) {
return;
}
if (!(event.getDamager() instanceof Player)) {
return;
}
if (!entity.getPersistentDataContainer().has(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE)) {
return;
}
if (entity.getType() == EntityType.ITEM_FRAME || entity.getType() == EntityType.GLOW_ITEM_FRAME) {
ItemFrame itemFrame = (ItemFrame) entity;
itemFrame.setVisible(true);
}
}
}

View File

@ -0,0 +1,28 @@
package cn.lunadeer.essentialsd.recipes;
import cn.lunadeer.essentialsd.EssentialsD;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
public class InvisibleGlowItemFrame {
public static ShapedRecipe getRecipe() {
NamespacedKey key = new NamespacedKey(EssentialsD.instance, "invisible_glow_item_frame");
ItemStack item = new ItemStack(Material.GLOW_ITEM_FRAME, 1);
ItemMeta meta = item.getItemMeta();
meta.displayName(Component.text("隐形发光物品展示框"));
meta.getPersistentDataContainer().set(new NamespacedKey(EssentialsD.instance, "invisible"), PersistentDataType.BYTE, (byte) 1);
item.setItemMeta(meta);
ShapedRecipe recipe = new ShapedRecipe(key, item);
recipe.shape("sss","sgs","sss");
recipe.setIngredient('s',Material.BLAZE_ROD);
recipe.setIngredient('g',Material.GLASS_PANE);
return recipe;
}
}