Skip to content

Commit 6492b00

Browse files
authored
Version1.0
1 parent 0e75b2b commit 6492b00

3 files changed

Lines changed: 170 additions & 0 deletions

File tree

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package com.koirdsuzu.dropRateController;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandSender;
7+
import org.bukkit.command.TabCompleter;
8+
import org.bukkit.configuration.file.FileConfiguration;
9+
import org.bukkit.entity.Entity;
10+
import org.bukkit.entity.LivingEntity;
11+
import org.bukkit.entity.Player;
12+
import org.bukkit.event.EventHandler;
13+
import org.bukkit.event.Listener;
14+
import org.bukkit.event.block.BlockBreakEvent;
15+
import org.bukkit.event.entity.EntityDeathEvent;
16+
import org.bukkit.inventory.ItemStack;
17+
import org.bukkit.plugin.java.JavaPlugin;
18+
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
import java.util.Random;
22+
23+
public class DropRateController extends JavaPlugin implements Listener, TabCompleter {
24+
25+
private double dropRate = 1.0; // Default drop rate is 1%
26+
private Random random;
27+
private FileConfiguration config;
28+
29+
@Override
30+
public void onEnable() {
31+
// Initialize config and random
32+
saveDefaultConfig();
33+
config = getConfig();
34+
random = new Random();
35+
36+
// Load drop rate from config
37+
dropRate = config.getDouble("dropRate", 1.0);
38+
39+
// Register event listener
40+
Bukkit.getPluginManager().registerEvents(this, this);
41+
42+
// Set tab completer
43+
getCommand("dropchance").setTabCompleter(this);
44+
45+
getLogger().info("DropRateController enabled.");
46+
}
47+
48+
@Override
49+
public void onDisable() {
50+
getLogger().info("DropRateController disabled.");
51+
}
52+
53+
// Handle mob drops
54+
@EventHandler
55+
public void onEntityDeath(EntityDeathEvent event) {
56+
Entity entity = event.getEntity();
57+
if (entity instanceof LivingEntity) {
58+
LivingEntity livingEntity = (LivingEntity) entity;
59+
if (livingEntity.getKiller() != null) {
60+
if (random.nextDouble() < dropRate / 100.0) {
61+
// Leave default drops as is if the drop condition is met
62+
return;
63+
} else {
64+
// Clear drops if the condition is not met
65+
event.getDrops().clear();
66+
}
67+
}
68+
}
69+
}
70+
71+
// Handle block drops
72+
@EventHandler
73+
public void onBlockBreak(BlockBreakEvent event) {
74+
Player player = event.getPlayer();
75+
if (!player.hasPermission("dropratecontroller.use")) {
76+
return;
77+
}
78+
79+
List<ItemStack> drops = new ArrayList<>(event.getBlock().getDrops(player.getInventory().getItemInMainHand()));
80+
event.setDropItems(false); // Prevent default drops
81+
82+
for (ItemStack drop : drops) {
83+
if (random.nextDouble() < dropRate / 100.0) {
84+
event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), drop);
85+
}
86+
}
87+
}
88+
89+
@Override
90+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
91+
if (command.getName().equalsIgnoreCase("dropchance")) {
92+
// Check permission
93+
if (!sender.hasPermission("dropratecontroller.use")) {
94+
sender.sendMessage(ChatColor.RED + config.getString("messages.no_permission", "You do not have permission to use this command."));
95+
return true;
96+
}
97+
98+
if (args.length == 0) {
99+
sender.sendMessage(ChatColor.RED + config.getString("messages.usage", "Usage: /dropchance <get|set <value>>"));
100+
return true;
101+
}
102+
103+
if (args[0].equalsIgnoreCase("get")) {
104+
sender.sendMessage(ChatColor.GREEN + String.format(config.getString("messages.get", "Current drop rate: %.2f%%"), dropRate));
105+
return true;
106+
}
107+
108+
if (args[0].equalsIgnoreCase("set")) {
109+
if (args.length < 2) {
110+
sender.sendMessage(ChatColor.RED + config.getString("messages.invalid", "Invalid value. Please provide a number between 0 and 100."));
111+
return true;
112+
}
113+
try {
114+
double newRate = Double.parseDouble(args[1]);
115+
if (newRate < 0 || newRate > 100) {
116+
sender.sendMessage(ChatColor.RED + config.getString("messages.range_error", "Please enter a number between 0 and 100."));
117+
return true;
118+
}
119+
dropRate = newRate;
120+
config.set("dropRate", dropRate);
121+
saveConfig();
122+
sender.sendMessage(ChatColor.GREEN + String.format(config.getString("messages.set", "Drop rate updated to %.2f%%"), dropRate));
123+
} catch (NumberFormatException e) {
124+
sender.sendMessage(ChatColor.RED + config.getString("messages.invalid", "Invalid value. Please provide a number between 0 and 100."));
125+
}
126+
return true;
127+
}
128+
}
129+
return false;
130+
}
131+
132+
@Override
133+
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
134+
List<String> completions = new ArrayList<>();
135+
if (command.getName().equalsIgnoreCase("dropchance")) {
136+
if (args.length == 1) {
137+
if ("get".startsWith(args[0].toLowerCase())) completions.add("get");
138+
if ("set".startsWith(args[0].toLowerCase())) completions.add("set");
139+
} else if (args.length == 2 && args[0].equalsIgnoreCase("set")) {
140+
completions.add("0");
141+
completions.add("50");
142+
completions.add("100");
143+
}
144+
}
145+
return completions;
146+
}
147+
}

src/main/resources/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
dropRate: 1.0
2+
messages:
3+
usage: "Usage: /dropchance <get|set <value>>"
4+
get: "Current drop rate: %.2f%%"
5+
set: "Drop rate updated to %.2f%%"
6+
invalid: "Invalid value. Please provide a number between 0 and 100."
7+
range_error: "Please enter a number between 0 and 100."
8+
no_permission: "You do not have permission to use this command."

src/main/resources/plugin.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
name: DropRateController
2+
version: '1.0'
3+
main: com.koirdsuzu.dropRateController.DropRateController
4+
api-version: '1.13'
5+
authors: [koirdsuzu]
6+
description: アイテムのドロップ率を変えるプラグイン
7+
website: https://github.com/koirdsuzu/
8+
commands:
9+
dropchance:
10+
description: Manage the drop chance for items.
11+
usage: /dropchance <get|set> [value]
12+
permissions:
13+
dropratecontroller.use:
14+
description: Allows access to the dropchance command.
15+
default: op

0 commit comments

Comments
 (0)