Initial commit

This commit is contained in:
2024-04-23 11:15:11 +08:00
commit fe2ce492dd
31 changed files with 737 additions and 0 deletions

View File

@ -0,0 +1,29 @@
package com.yuyu.srappraise;
import com.sakurarealm.sritem.bukkit.command.CommandBase;
import com.yuyu.srappraise.command.OpenCommand;
import lombok.Getter;
import org.bukkit.ChatColor;
import org.bukkit.plugin.java.JavaPlugin;
public final class SrAppraise extends JavaPlugin {
@Getter
private static SrAppraise instance;//用于获取实例
@Override
public void onEnable() {
getLogger().info(ChatColor.MAGIC+"鉴定插件启动");
CommandBase commandBase = new CommandBase();
this.getCommand("srappraise").setExecutor(commandBase);
commandBase.registerSubCommand("open",new OpenCommand());
}
@Override
public void onDisable() {
// Plugin shutdown logic
}
}

View File

@ -0,0 +1,47 @@
package com.yuyu.srappraise.appraise;
import com.germ.germplugin.api.dynamic.gui.GermGuiScreen;
import com.sakurarealm.sritem.germ.GermGuiService;
import lombok.Getter;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
/**
* @BelongsProject: SrAppraise
* @BelongsPackage: com.yuyu.srappraise
* @FileName: AppraiseManager
* @Author: 峰。
* @Date: 2024/4/16-16:37
* @Version: 1.0
* @Description:提供鉴定服务相关
*/
public class AppraiseManager {
@Getter
private final static AppraiseManager instance = new AppraiseManager();
private AppraiseManager() {
}
public static ConfigurationSection getForgePlayerInventory() {
return GermGuiService.getGermGui("forge", "player_inventory-forge");
}
public static ConfigurationSection getAppraiseInventory() {
return GermGuiService.getGermGui("appraise", "appraise");
}
public void open(Player player,String guiName){
//获取鉴定的窗口
AppraiseScreen screen = new AppraiseScreen(getAppraiseInventory(),guiName);
//获取gui的配置,此处会把读取到的gui配置传到ForgeScreen的构造类中
GermGuiScreen packscreen = GermGuiScreen.getGermGuiScreen("player_inventory-forge", getForgePlayerInventory());
// screen.btnRegister();
//为玩家打开鉴定窗口和背包窗口
packscreen.openGui(player);
screen.openChildGui(player);
}
}

View File

@ -0,0 +1,111 @@
package com.yuyu.srappraise.appraise;
import com.germ.germplugin.api.dynamic.DynamicBase;
import com.germ.germplugin.api.dynamic.gui.*;
import com.sakurarealm.sritem.api.ItemStackHelper;
import com.sakurarealm.sritem.api.SrItemAPI;
import com.sakurarealm.sritem.api.SrItemManager;
import com.sakurarealm.sritem.api.builder.SrItemHandler;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
/**
* @BelongsProject: SrAppraise
* @BelongsPackage: com.yuyu.srappraise.appraise
* @FileName: AppraiseScreen
* @Author: 峰。
* @Date: 2024/4/19-21:32
* @Version: 1.0
* @Description: 用于鉴定界面相关
*/
public class AppraiseScreen extends GermGuiScreen {
public AppraiseScreen(ConfigurationSection configurationSection,String guiName) {
super(guiName,configurationSection);
//TODO(此处绑定给 √ 按钮绑定一个监听事件,在监听事件中获取放入了物品槽位的物品,然后鉴定)
this.btnRegister();
this.setClosedHandler(((player, germGuiScreen) -> {
//窗口关闭事件
this.returnItemStacks(player);
this.close();
}));
}
/**
* 返回鉴定槽位内的物品给玩家
*
* @param player player
*/
synchronized public void returnItemStacks(Player player) {
GermGuiCanvas canvas = (GermGuiCanvas) getGuiPart("utility");
GermGuiSlot slot_biomass = (GermGuiSlot) canvas.getGuiPart("slot_biomass");
ItemStack biomass_itemStack = slot_biomass.getItemStack();
if (biomass_itemStack != null && biomass_itemStack.getType() != Material.AIR) {
player.getInventory().addItem(biomass_itemStack);
}
slot_biomass.setItemStack(Material.AIR);
}
// public ItemStack getSrItem(){
// ItemStack item = SrItemAPI.getItem();
// }
/**
* 此方法用于绑定鉴定事件的发生
*/
public void btnRegister(){
//先获取canvas再获取canvas中的按键
GermGuiCanvas canvas = (GermGuiCanvas) getGuiPart("utility");
GermGuiButton confrimBtn = (GermGuiButton) canvas.getGuiPart("b_confirm");
confrimBtn.registerCallbackHandler((clickPlayer, btn) -> {
GermGuiSlot slot_biomass = (GermGuiSlot) canvas.getGuiPart("slot_biomass");
ItemStack itemStack = slot_biomass.getItemStack();
SrItemHandler srItemHandler = ItemStackHelper.getSrItemHandler(itemStack);
String title = srItemHandler.getTitle();
String index = title.substring(title.indexOf('l') + 1);
String s = srItemHandler.getLore().get(0);
if (SrItemAPI.hasItem(index)) {
//TODO(此处hasItem的索引能通过可以试试getItem能不能通过获取rpg物品)
// SrItemManager.getInstance().getItem(index)
index = s.substring(s.indexOf('-') + 1);
itemStack = SrItemAPI.getItem(index,new HashMap<>(), Bukkit.getPlayer(clickPlayer.getName()),true,true);
if (itemStack == null){
clickPlayer.sendMessage(ChatColor.RED+title+"不存在");
return;
}
if (itemStack.getAmount() != 1) {
clickPlayer.sendMessage(ChatColor.RED + "每次只能鉴定一个物品!");
return;
}
if (itemStack != null && itemStack.getType() != Material.AIR) {
itemStack.setAmount(2);
clickPlayer.sendMessage(ChatColor.RED + "这是" + itemStack.getType().name());
SrItemAPI instance = SrItemAPI.INSTANCE;
slot_biomass.setItemStack(itemStack);
}
}else {
clickPlayer.sendMessage(ChatColor.GREEN+"这是一个"+itemStack.getType().name());
}
}, GermGuiButton.EventType.LEFT_CLICK);
}
}

View File

@ -0,0 +1,45 @@
package com.yuyu.srappraise.command;
import com.sakurarealm.sritem.bukkit.command.SubCommand;
import com.yuyu.srappraise.appraise.AppraiseManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @BelongsProject: SrAppraise
* @BelongsPackage: com.yuyu.srappraise.command
* @FileName: OpenCommand
* @Author: 峰。
* @Date: 2024/4/19-21:14
* @Version: 1.0
* @Description: 用于打开gui窗口
*/
public class OpenCommand implements SubCommand {
@Override
public void onCommand(CommandSender commandSender, String[] strings) {
if (strings.length < 3){
commandSender.sendMessage(ChatColor.RED+"正确的格式为:/srappraise open 姓名 GUIname");
return;
}
Player player = Bukkit.getPlayer(strings[1]);
if (player == null){
commandSender.sendMessage(ChatColor.RED+"玩家"+strings[2]+"不存在!");
return;
}
String gui = strings[2];
if (gui.equalsIgnoreCase("appraise")){
//为玩家打开GUI列表
AppraiseManager.getInstance().open(player,gui);
}else {
commandSender.sendMessage(ChatColor.RED+"请输入正确的GUI名字");
}
}
}