测试版

This commit is contained in:
tianyu 2024-07-25 05:56:32 +08:00
commit cee388aa7d
15 changed files with 1071 additions and 0 deletions

38
.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

42
pom.xml Normal file
View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>DemonCropBuyShop</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>public-rpg</id>
<url>https://repo.aurora-pixels.com/repository/public-rpg/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.12.2</version>
</dependency>
<dependency>
<groupId>me.clip.placeholderapi</groupId>
<artifactId>PlaceholderAPI</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>me.Demon.DemonPlugin</groupId>
<artifactId>DemonAPI</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,103 @@
package me.Demon.DemonCropBuyShop;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class CropData {
private String cropType;
private double dmoney;
private double money;
private double last;
private List<String> log;
public CropData(String cropType) {
this.cropType = cropType;
FileConfiguration yml = Main.plugin.getConfig();
this.dmoney = yml.getDouble(cropType + ".default");
this.money = yml.getDouble(cropType + ".money");
this.last = yml.getDouble(cropType + ".last");
this.log = yml.getStringList(cropType + ".log");
}
public void SaveData() {
FileConfiguration yml = Main.plugin.getConfig();
yml.set(cropType + ".default", this.dmoney);
yml.set(cropType + ".money", this.money);
yml.set(cropType + ".last", this.last);
yml.set(cropType + ".log", this.log);
Main.plugin.saveConfig();
}
public String getCropType() {
return cropType;
}
public ItemStack getItem() {
return new ItemStack(Material.valueOf(this.getCropType()));
}
public double getDmoney() {
return dmoney;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLast() {
return last;
}
public void setLast(double last) {
this.last = last;
}
public List<String> getLog() {
return log;
}
public void setLog(List<String> log) {
this.log = log;
}
public void setCropMarketLog(String lore) {
List<String> list = new ArrayList<>();
list.add(lore);
List<String> jiu_log = getLog();
if (jiu_log.size() >= 4) {
for (int i = 0; i < 4; i++) {
list.add(jiu_log.get(i));
}
} else {
list.addAll(getLog());
}
setLog(list);
}
public String getCurrenBFB() {
double change = getCurrenAndPrevious();
if (change >= 0) {
return "§a§l↑↑ §a" + new DecimalFormat("###.##").format(change) + "%";
} else {
return "§c§l↓↓ §c" + new DecimalFormat("###.##").format(change) + "%";
}
}
public double getCurrenAndPrevious() {
double change = getMoney() - getLast();
return (change / getLast()) * 100;
}
}

View File

@ -0,0 +1,205 @@
package me.Demon.DemonCropBuyShop;
import me.Demon.DemonCropBuyShop.Event.MarktStatsEvent;
import me.Demon.DemonCropBuyShop.Event.PlayerCropBuyEvent;
import me.Demon.DemonPlugin.DemonAPI;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.util.Random;
public class CropShopAPI {
public static int getCropBuyAmount(String CorpType){
FileConfiguration yml = Main.plugin.getConfig();
return yml.getInt("BuyData."+CorpType);
}
public static void addCropBuyAmount(String CorpType,int amount){
FileConfiguration yml = Main.plugin.getConfig();
int a = getCropBuyAmount(CorpType) + amount;
yml.set("BuyData."+CorpType,a);
Main.plugin.saveConfig();
}
public static void setCropBuyAmount(String CorpType,int amount){
FileConfiguration yml = Main.plugin.getConfig();
yml.set("BuyData."+CorpType,amount);
Main.plugin.saveConfig();
}
public static void SellCropsItemsEvant(Player p, String CropType, int sell_groupAmount){
CropData dataAPI = Main.dataAPI.get(CropType);
int price = (int) dataAPI.getMoney();
if(sell_groupAmount >= 2){
price = price * sell_groupAmount;
}
double tax = 0.05;
if(p.hasPermission("vip2.use")){
tax = 0.02;
}else if(p.hasPermission("vip1.use")){
tax = 0.03;
}
price = (int) (price - (price * tax));
double taxMoney = price * tax;
DemonAPI.giveMoney(p, price);
p.sendMessage(Main.prefix + "你获得了: §f$" + new DecimalFormat(",###.##").format(price) + "金币 §6(纳税: " + new DecimalFormat("#.##").format(taxMoney) + "金币)");
int sellAmount = sell_groupAmount * 64;
if(CropType.equalsIgnoreCase("EGG")){
sellAmount = sell_groupAmount * 16;
}
PlayerCropBuyEvent event = new PlayerCropBuyEvent(p, dataAPI.getCropType(), sellAmount,price,(int) taxMoney);
Bukkit.getPluginManager().callEvent(event);
}
public static void Start_Updata_Event(String CropType,int type){
// 获取CropData数据
CropData dataAPI = Main.dataAPI.get(CropType);
// 刷新现在价格
double current_price = dataAPI.getMoney();
// type == 0 系统随机
// type == 1 上涨
// type == 2 下跌
if (type == 0) {
if (current_price >= (dataAPI.getDmoney() * 1.1)) {
// zhenfu_1 = 越大上涨概率低
// zhenfu = 越小概率越高
System_Updata_Price(dataAPI, 40, 70, 30);
} else if (current_price >= (dataAPI.getDmoney() * 0.8)) {
System_Updata_Price(dataAPI, 70, 40, 40);
} else {
System_Updata_Price(dataAPI, 70, 40, 40);
}
} else if (type == 1) {
if (Main.getRandomInt(100, 1) >= 70) {
Admin_Up_Price(dataAPI, 1);
} else {
Admin_Up_Price(dataAPI, 2);
}
} else if (type == 2) {
if (Main.getRandomInt(100, 1) >= 40) {
Admin_Down_Price(dataAPI, 1);
} else {
Admin_Down_Price(dataAPI, 2);
}
}
}
public static void System_Updata_Price(CropData dataAPI,int zhenfu,int zhenfu_1,int die){
// type = 1[] 2[]
int mk_stats = 0;
String new_s = "";
// 刷新现在价格
double server_current = dataAPI.getMoney();
int gailv = Main.getRandomInt(100,1);
if(gailv >= zhenfu){
if(Main.getRandomInt(100,1) >= zhenfu_1){
double Vmin = server_current * 0.02;
double Vmax = server_current * 0.04;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current + Vprice;
new_s = new DecimalFormat("###.##").format(price);
mk_stats = 1;
Bukkit.getConsoleSender().sendMessage("§6[现货交易所SY] §f农产品: "+dataAPI.getCropType()+" 状态: 震浮-涨 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
} else {
double Vmin = server_current * 0.03;
double Vmax = server_current * 0.05;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current - Vprice;
new_s = new DecimalFormat("###.##").format(price);
mk_stats = 2;
Bukkit.getConsoleSender().sendMessage("§6[现货交易所SY] §f农产品: "+dataAPI.getCropType()+" 状态: 震浮-跌 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}
}else if(gailv >= die){
// 扣除
double Vmin = server_current * 0.01;
double Vmax = server_current * 0.03;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current - Vprice;
new_s = new DecimalFormat("###.##").format(price);
mk_stats = 1;
Bukkit.getConsoleSender().sendMessage("§6[现货交易所SY] §f农产品: "+dataAPI.getCropType()+" 状态: 跌 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}else {
double Vmin = server_current * 0.01;
double Vmax = server_current * 0.03;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current + Vprice;
new_s = new DecimalFormat("###.##").format(price);
mk_stats = 2;
Bukkit.getConsoleSender().sendMessage("§6[现货交易所SY] §f农产品: "+dataAPI.getCropType()+" 状态: 涨 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}
double xian_jia_money = Double.parseDouble(new_s);
MarktStatsEvent event = new MarktStatsEvent(dataAPI, mk_stats,xian_jia_money);
Bukkit.getPluginManager().callEvent(event);
}
public static void Admin_Up_Price(CropData dataAPI,int type){
// type = 1[] 2[]
int mk_stats = 1;
String new_s = "";
// 刷新现在价格
double server_current = dataAPI.getMoney();
if(type == 1){
double Vmin = server_current * 0.02;
double Vmax = server_current * 0.04;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current + Vprice;
new_s = new DecimalFormat("###.##").format(price);
Bukkit.getConsoleSender().sendMessage("§6[现货交易所] §f农产品: "+dataAPI.getCropType()+" 状态: 震浮-涨 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}else{
double Vmin = server_current * 0.01;
double Vmax = server_current * 0.03;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current + Vprice;
new_s = new DecimalFormat("###.##").format(price);
Bukkit.getConsoleSender().sendMessage("§6[现货交易所] §f农产品: "+dataAPI.getCropType()+" 状态: 涨 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}
double xian_jia_money = Double.parseDouble(new_s);
MarktStatsEvent event = new MarktStatsEvent(dataAPI, mk_stats,xian_jia_money);
Bukkit.getPluginManager().callEvent(event);
}
public static void Admin_Down_Price(CropData dataAPI,int type){
// type = 1[] 2[]
int mk_stats = 2;
String new_s = "";
// 刷新现在价格
double server_current = dataAPI.getMoney();
if (type == 1) {
double Vmin = server_current * 0.03;
double Vmax = server_current * 0.05;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current - Vprice;
new_s = new DecimalFormat("###.##").format(price);
Bukkit.getConsoleSender().sendMessage("§6[现货交易所] §f农产品: "+dataAPI.getCropType()+" 状态: 震浮-跌 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
} else {
double Vmin = server_current * 0.01;
double Vmax = server_current * 0.03;
double Vprice = new Random().nextDouble()*(Vmax-Vmin)+Vmin;
double price = server_current - Vprice;
new_s = new DecimalFormat("###.##").format(price);
Bukkit.getConsoleSender().sendMessage("§6[现货交易所] §f农产品: "+dataAPI.getCropType()+" 状态: 跌 "+server_current+" ---> "+new_s+" "+getCurrenBFB(price,dataAPI.getMoney()));
}
double xian_jia_money = Double.parseDouble(new_s);
MarktStatsEvent event = new MarktStatsEvent(dataAPI, mk_stats,xian_jia_money);
Bukkit.getPluginManager().callEvent(event);
}
public static String getCurrenBFB(double xianjia,double last){
double change = getCAP(xianjia,last);
if(change >= 0) {
return new DecimalFormat("###.##").format(change) + "%";
}else{
return "§c"+new DecimalFormat("###.##").format(change)+ "%";
}
}
public static double getCAP(double xianjia,double last){
double change = xianjia - last;
return (change / last) * 100;
}
}

View File

@ -0,0 +1,46 @@
package me.Demon.DemonCropBuyShop.Event;
import me.Demon.DemonCropBuyShop.CropData;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class MarktStatsEvent extends Event {
private static HandlerList handlers = new HandlerList();
private CropData dataAPI;
private int type;
private double money;
@Override
public HandlerList getHandlers(){
return handlers;
}
public static HandlerList getHandlerList(){
return handlers;
}
public MarktStatsEvent(CropData dataAPI, int type, double money){
this.dataAPI = dataAPI;
this.type = type;
this.money = money;
}
public CropData getDataAPI() {
return dataAPI;
}
public int getType() {
return type;
}
public double getMoney() {
return money;
}
@Override
public String getEventName() {
return super.getEventName();
}
}

View File

@ -0,0 +1,57 @@
package me.Demon.DemonCropBuyShop.Event;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class PlayerCropBuyEvent extends Event {
private static HandlerList handlers = new HandlerList();
private Player player;
private String Croptype;
private int Buyamount;
private int BuyMoney;
private int BuyTax;
@Override
public HandlerList getHandlers(){
return handlers;
}
public static HandlerList getHandlerList(){
return handlers;
}
public PlayerCropBuyEvent(Player player, String Croptype, int Buyamount, int BuyMoney, int BuyTax){
this.player = player;
this.Croptype = Croptype;
this.Buyamount = Buyamount;
this.BuyMoney = BuyMoney;
this.BuyTax = BuyTax;
}
public Player getPlayer(){
return player;
}
public String getCroptype() {
return Croptype;
}
public int getBuyamount() {
return Buyamount;
}
public int getBuyMoney() {
return BuyMoney;
}
public int getBuyTax() {
return BuyTax;
}
@Override
public String getEventName() {
return super.getEventName();
}
}

View File

@ -0,0 +1,82 @@
package me.Demon.DemonCropBuyShop;
import com.sun.scenario.effect.Crop;
import me.Demon.DemonCropBuyShop.listener.BuyGui;
import me.Demon.DemonCropBuyShop.listener.GuiListener;
import me.Demon.DemonCropBuyShop.listener.MarkStats;
import me.Demon.DemonCropBuyShop.listener.PlayerCropBuy;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Random;
public class Main extends JavaPlugin {
public static Main plugin;
public static int TodayBank = 0;
public static String prefix = "§7[§6战争领域§7] §f";
public static LinkedHashMap<String, CropData> dataAPI = new LinkedHashMap<>();
@Override
public void onEnable() {
plugin = this;
saveDefaultConfig();
Bukkit.getServer().getPluginManager().registerEvents(new PlayerCropBuy(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new GuiListener(), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new MarkStats(), plugin);
Bukkit.getConsoleSender().sendMessage("§e[农贸商店] §r正在启动插件...");
for (String cropType : getConfig().getKeys(false)){
if(getConfig().getString(cropType+".log") != null){
dataAPI.put(cropType,new CropData(cropType));
}
}
Bukkit.getConsoleSender().sendMessage("§e[农贸商店] §r载入农贸: "+dataAPI.size()+"");
long time = 20L * 60 * 30;
new TimeCheckRunnable().runTaskTimer(this, time, time);
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
new Placeholders(this).register();
}
}
@Override
public void onDisable() {
for (String cropType : dataAPI.keySet()){
Main.dataAPI.get(cropType).SaveData();
}
Bukkit.getConsoleSender().sendMessage("§e[农贸商店] §r正在关闭插件...");
}
public boolean onCommand(CommandSender sender, Command cmd, String Command, String[] args) {
if (Command.equalsIgnoreCase("cropshop")) {
if(args.length == 1 && args[0].equalsIgnoreCase("open")){
new BuyGui((Player) sender);
}
if(args.length == 1 && args[0].equalsIgnoreCase("start") && sender.isOp()){
for (String corpType : Main.dataAPI.keySet()) {
CropShopAPI.Start_Updata_Event(corpType,0);
}
sender.sendMessage("[日志-农贸商店] 倒计时结束随机市场调整.");
}
if(args.length == 1 && args[0].equalsIgnoreCase("resetprice") && sender.isOp()){
for (String corpType : Main.dataAPI.keySet()) {
CropShopAPI.Start_Updata_Event(corpType,0);
}
sender.sendMessage("[日志-农贸商店] 倒计时结束随机市场调整.");
}
}
return false;
}
public static boolean itemIsNull(ItemStack item){return item == null || item.getType() == Material.AIR;}
public static boolean itemIsLore(ItemStack item){return item.getItemMeta().getLore() == null;}
public static int getRandomInt(int max,int min){return new Random().nextInt(max) + min;}
}

View File

@ -0,0 +1,61 @@
package me.Demon.DemonCropBuyShop;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class Placeholders extends PlaceholderExpansion {
private Plugin plugin;
public Placeholders(Plugin plugin) {
this.plugin = plugin;
}
@Override
public boolean persist() {
return true;
}
@Override
public boolean canRegister() {
return true;
}
@Override
public String getAuthor() {
return plugin.getDescription().getAuthors().toString();
}
@Override
public String getIdentifier() {
return "dcropshop";
}
// %dcropshop_bfb_ndsad%
// %dcropshop_jg_ndsad%
@Override
public String getVersion() {
return plugin.getDescription().getVersion();
}
public String onPlaceholderRequest(Player p, String indentifier) {if (p == null) { return ""; }
String[] sp = indentifier.split("_");
if (sp.length == 2) {
CropData dataAPI = Main.dataAPI.get(sp[1]);
if (sp[0].equalsIgnoreCase("jg")) {
return "" + dataAPI.getMoney();
} else {
return "" + dataAPI.getCurrenBFB();
}
}else if (sp.length == 3) {
String cropType = sp[1]+"_"+sp[2];
CropData dataAPI = Main.dataAPI.get(cropType);
if (sp[0].equalsIgnoreCase("jg")) {
return "" + dataAPI.getMoney();
} else {
return "" + dataAPI.getCurrenBFB();
}
}
return "-999";
}
}

View File

@ -0,0 +1,23 @@
package me.Demon.DemonCropBuyShop;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.HashMap;
public class TimeCheckRunnable extends BukkitRunnable {
HashMap <Player, Integer> onlineSeconds;
public TimeCheckRunnable() {
this.onlineSeconds = new HashMap<>();
}
public void run() {
for (String corpType : Main.dataAPI.keySet()) {
CropShopAPI.Start_Updata_Event(corpType,0);
}
Bukkit.getConsoleSender().sendMessage("[日志-农贸商店] 倒计时结束随机市场调整.");
}
}

View File

@ -0,0 +1,96 @@
package me.Demon.DemonCropBuyShop.listener;
import me.Demon.DemonCropBuyShop.CropData;
import me.Demon.DemonCropBuyShop.Main;
import me.Demon.DemonPlugin.DemonAPI;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class BuyGui implements InventoryHolder {
private Inventory inventory;
private Player player;
public BuyGui(Player p){
this.player = p;
inventory = Bukkit.createInventory(this,36,"战争领域 - 农贸市场");
int slot = 9;
for (String itemType : Main.dataAPI.keySet()){
CropData dataAPI = Main.dataAPI.get(itemType);
Material material = Material.valueOf(itemType);
ItemStack item = new ItemStack(material,1);
inventory.setItem(slot,shopitem(item,dataAPI));
slot++;
}
for (int i = 27;i<inventory.getSize();i++) {
inventory.setItem(i, glass("§7[[§a▧▧§7]]", 7));
}
inventory.setItem(30, glass("§7[[§a▧▧§7]]", 15));
inventory.setItem(31, BackBook("§a返回菜单"));
inventory.setItem(32, glass("§7[[§a▧▧§7]]", 15));
player.openInventory(inventory);
}
public static ItemStack shopitem(ItemStack items,CropData dataAPI){
ItemStack item = items.clone();
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§7物品: §r"+ DemonAPI.getItemName(item));
List<String> lore = new ArrayList<>();
lore.add("§a§l★§7单位: §2组");
// 计算现价和上一次变动价格的涨幅和跌幅
double change = dataAPI.getCurrenAndPrevious();
String show = new DecimalFormat("###.##").format(change);
String m = new DecimalFormat("###.##").format(dataAPI.getMoney());
if(change >= 0) {
lore.add("§d§l★§7现价: §6" + m+"元 §a(+"+show+"%)");
}else{
lore.add("§d§l★§7现价: §6" + m+"元 §c("+show+"%)");
}
lore.add("§b§l★§7历史行情:");
lore.addAll(dataAPI.getLog());
lore.add("§8#祝老板成为农贸大亨!");
lore.add(" ");
if (item.getType() == Material.EGG) {
lore.add("§a§l★§7左键点击 §f| §7出售16个");
lore.add("§a§l★§7右键点击 §f| §7出售27组");
}else{
lore.add("§a§l★§7左键点击 §f| §7出售64个");
lore.add("§a§l★§7右键点击 §f| §7出售27组");
}
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
public static ItemStack glass(String name,int date){
ItemStack item = new ItemStack(160,1,(short) date);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
public static ItemStack BackBook(String name){
ItemStack item = new ItemStack(Material.BOOK);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(name);
item.setItemMeta(meta);
return item;
}
@Override
public Inventory getInventory() {
return null;
}
}

View File

@ -0,0 +1,127 @@
package me.Demon.DemonCropBuyShop.listener;
import me.Demon.DemonCropBuyShop.CropData;
import me.Demon.DemonCropBuyShop.Event.PlayerCropBuyEvent;
import me.Demon.DemonCropBuyShop.Main;
import me.Demon.DemonPlugin.DemonAPI;
import me.skymc.taboomenu.TabooMenuAPI;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.text.DecimalFormat;
public class GuiListener implements Listener {
@EventHandler
public void onclick(InventoryClickEvent e){
Player p = (Player) e.getWhoClicked();
if(e.getInventory().getHolder() != null && e.getInventory().getHolder() instanceof BuyGui){
e.setCancelled(true);
int rawSlot = e.getRawSlot();
if(rawSlot <= 0 || rawSlot >= e.getInventory().getSize()){
return;
}
if(rawSlot == 31){
TabooMenuAPI.openMenu(p,"商城菜单",true);
return;
}
if(Main.itemIsNull(e.getCurrentItem()) && Main.itemIsLore(e.getCurrentItem())){
return;
}
String CorpType = e.getCurrentItem().getType().name();
if (e.getClick() == ClickType.LEFT) {
if(e.getCurrentItem().getType() == Material.EGG) {
SellItemsEvant(p,CorpType, 16, 1);
} else {
SellItemsEvant(p, CorpType, 64, 1);
}
}
if (e.getClick() == ClickType.RIGHT) {
if(e.getCurrentItem().getType() == Material.EGG) {
SellItemsEvant(p, CorpType, 16*27, 2);
}else{
SellItemsEvant(p, CorpType, 1728, 2);
}
}
}
}
public static void SellItemsEvant(Player p, String CropType, int sellAmount, int type){
if(Main.TodayBank >= 30000000){
p.sendMessage(Main.prefix+"农贸市场每日仅回收3000万金币的农作物.");
p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 2);
return;
}
CropData dataAPI = Main.dataAPI.get(CropType);
//检测玩家是否拥有这么多的物品出售
ItemStack item = dataAPI.getItem();
int PlayerAmount = getInvAmount(p,item);
if(PlayerAmount < sellAmount){
p.sendMessage(Main.prefix+"你没有足够的物品.");
p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 2);
return;
}
SellItemEvent(p.getInventory(),PlayerAmount,item,sellAmount);
int price = (int) dataAPI.getMoney();
if(type == 2){
price = price * 27;
}
double tax = 0.05;
if(p.hasPermission("vip2.use")){
tax = 0.02;
}else if(p.hasPermission("vip1.use")){
tax = 0.03;
}
price = (int) (price - (price * tax));
double taxMoney = price * tax;
DemonAPI.giveMoney(p, price);
Main.TodayBank = Main.TodayBank + price;
p.sendMessage(Main.prefix + "你获得了: §f$" + new DecimalFormat(",###.##").format(price) + "金币 §6(纳税: " + new DecimalFormat("#.##").format(taxMoney) + "金币)");
p.updateInventory();
p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK, 1, 2);
PlayerCropBuyEvent event = new PlayerCropBuyEvent(p, dataAPI.getCropType(), sellAmount,price,(int) taxMoney);
Bukkit.getPluginManager().callEvent(event);
new BuyGui(p);
}
public static int getInvAmount(Player p, ItemStack item){
int amount = 0;
Inventory inv = p.getInventory();
Material material = item.getType();
for (int i = 0;i < 36;i++){
ItemStack items = inv.getItem(i);
if(!Main.itemIsNull(items) && Main.itemIsLore(items)){
Material inv_type = items.getType();
if(inv_type == material){
amount = amount + items.getAmount();
}
}
}
return amount;
}
public static void SellItemEvent(Inventory inv,int playerAmount,ItemStack item,int sellAmount){
int last = playerAmount - sellAmount;
for (int i = 0;i < 36;i++){
ItemStack items = inv.getItem(i);
if(!Main.itemIsNull(items) && Main.itemIsLore(items)){
Material inv_type = items.getType();
if(inv_type == item.getType()){
inv.setItem(i, new ItemStack(Material.AIR));
}
}
}
if(last >= 1) {
ItemStack newItem = new ItemStack(item.getType());
newItem.setAmount(last);
inv.addItem(newItem);
}
}
}

View File

@ -0,0 +1,64 @@
package me.Demon.DemonCropBuyShop.listener;
import me.Demon.DemonCropBuyShop.CropData;
import me.Demon.DemonCropBuyShop.Event.MarktStatsEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import java.text.DecimalFormat;
public class MarkStats implements Listener {
@EventHandler
public void markStats(MarktStatsEvent e){
CropData dataAPI = e.getDataAPI();
// 刷新现在价格
double current_price = dataAPI.getMoney();
// 判断本次事件是涨还是跌
int mk_stats = e.getType();
boolean butt = false;
if(mk_stats == 1){
if(!isMoneyUpLimit(dataAPI.getDmoney(),current_price)){
butt = true;
}
} else {
if(!isMoneyDownLimit(dataAPI.getDmoney(),current_price)){
butt = true;
}
}
if(butt){
// 首先记录当前价格
double change = dataAPI.getCurrenAndPrevious();
String show = new DecimalFormat("###.##").format(change);
if (change >= 0) {
String str_lore = " §f- §6" + dataAPI.getMoney() + " §a§l↑↑ §a" + show + "%";
dataAPI.setCropMarketLog(str_lore);
} else {
String str_lore = " §f- §6" + dataAPI.getMoney() + " §c§l↓↓ §c" + show + "%";
dataAPI.setCropMarketLog(str_lore);
}
// 设置上次价格
dataAPI.setLast(current_price);
// 设置当前价格
dataAPI.setMoney(e.getMoney());
}
}
public static boolean isMoneyUpLimit(double Dmoney,double price){
// Dmoney = 10000 * 1.3 = 13000;
// Bukkit.getConsoleSender().sendMessage("price = "+price+" default = "+Dmoney);
if(price >= (Dmoney * 1.5)){
return true;
}
return false;
}
public static boolean isMoneyDownLimit(double Dmoney,double price){
// Dmoney = 10000 * 1.3 = 13000;
// Bukkit.getConsoleSender().sendMessage("price = "+price+" default = "+Dmoney);
if(price <= (Dmoney * 0.3)){
return true;
}
return false;
}
}

View File

@ -0,0 +1,54 @@
package me.Demon.DemonCropBuyShop.listener;
import me.Demon.DemonCropBuyShop.CropShopAPI;
import me.Demon.DemonCropBuyShop.Event.PlayerCropBuyEvent;
import me.Demon.DemonCropBuyShop.Main;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class PlayerCropBuy implements Listener {
@EventHandler
public void buyCrop(PlayerCropBuyEvent e){
Player p = e.getPlayer();
// 判断农作物出售数量是否大于27组~
String cropType = e.getCroptype();
CropShopAPI.addCropBuyAmount(cropType,e.getBuyamount());
int sellAmount = CropShopAPI.getCropBuyAmount(cropType);
// 若大于27组则执行市场变动
if(sellAmount >= (getCropLimit(cropType) * 2)){
for (String crop : Main.dataAPI.keySet()){
if(crop.equalsIgnoreCase(cropType)){
CropShopAPI.Start_Updata_Event(cropType,2);
CropShopAPI.setCropBuyAmount(cropType,0);
} else {
CropShopAPI.Start_Updata_Event(crop,1);
}
}
}
}
public static int getCropLimit(String Crop){
if(Crop.equalsIgnoreCase("WHEAT")){
return 27 * 64;
}else if(Crop.equalsIgnoreCase("POTATO_ITEM")){
return 48 * 64;
}else if(Crop.equalsIgnoreCase("CARROT_ITEM")){
return 48 * 64;
}else if(Crop.equalsIgnoreCase("MELON")){
return 342 * 64;
}else if(Crop.equalsIgnoreCase("PUMPKIN")){
return 57 * 64;
}else if(Crop.equalsIgnoreCase("CACTUS")){
return 40 * 64;
}else if(Crop.equalsIgnoreCase("SUGAR_CANE")){
return 162 * 64;
}else if(Crop.equalsIgnoreCase("NETHER_STALK")){
return 57 * 64;
}else if(Crop.equalsIgnoreCase("EGG")){
return 70 * 16;
}
return 27 * 64;
}
}

View File

@ -0,0 +1,68 @@
WHEAT:
default: 2280.0
money: 2280.37
last: 2280.64
log:
- ' §f- §63209.64 §c§l↓↓ §c-1.36%'
- ' §f- §63253.77 §a§l↑↑ §a3.11%'
- ' §f- §63155.66 §c§l↓↓ §c-3%'
- ' §f- §63253.16 §a§l↑↑ §a1.32%'
- ' §f- §63210.76 §c§l↓↓ §c-4.08%'
POTATO_ITEM:
default: 1280.0
money: 1280.37
last: 1280.64
log:
- ' §f- §61280.64 §c§l↓↓ §c-1.36%'
CARROT_ITEM:
default: 1280.0
money: 1280.37
last: 1280.64
log:
- ' §f- §61280.64 §c§l↓↓ §c-1.36%'
MELON:
default: 180.0
money: 180.37
last: 180.64
log:
- ' §f- §6180.64 §c§l↓↓ §c-1.36%'
PUMPKIN:
default: 1080.0
money: 1080.37
last: 1080.64
log:
- ' §f- §61080.64 §c§l↓↓ §c-1.36%'
CACTUS:
default: 1080.0
money: 1080.37
last: 1080.64
log:
- ' §f- §61080.64 §c§l↓↓ §c-1.36%'
SUGAR_CANE:
default: 380.0
money: 380.37
last: 380.64
log:
- ' §f- §6380.64 §c§l↓↓ §c-1.36%'
NETHER_STALK:
default: 1080.0
money: 1080.37
last: 1080.64
log:
- ' §f- §6380.64 §c§l↓↓ §c-1.36%'
EGG:
default: 880.0
money: 880.37
last: 880.64
log:
- ' §f- §6380.64 §c§l↓↓ §c-1.36%'
BuyData:
WHEAT: 1
POTATO_ITEM: 1
CARROT_ITEM: 1
MELON: 1
PUMPKIN: 1
CACTUS: 1
SUGAR_CANE: 1
NETHER_STALK: 1
EGG: 1

View File

@ -0,0 +1,5 @@
name: DemonCropBuyShop
main: me.Demon.DemonCropBuyShop.Main
version: 1.0.2
commands:
cropshop: