initial commit
This commit is contained in:
commit
9911249dcc
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/bin/
|
||||
/.settings/
|
||||
/.classpath
|
||||
/.project
|
5
plugin.yml
Normal file
5
plugin.yml
Normal file
@ -0,0 +1,5 @@
|
||||
name: ClickHarvest
|
||||
main: ee.lunasqu.clickharvest.Main
|
||||
version: 1.0
|
||||
api-version: 1.13
|
||||
commands:
|
119
src/ee/lunasqu/clickharvest/CropEvent.java
Normal file
119
src/ee/lunasqu/clickharvest/CropEvent.java
Normal file
@ -0,0 +1,119 @@
|
||||
package ee.lunasqu.clickharvest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.Ageable;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CropEvent implements Listener {
|
||||
private List<Harvestable> cropList = new ArrayList<Harvestable>();
|
||||
|
||||
public void registerHarvestable(Harvestable crop) {
|
||||
cropList.add(crop);
|
||||
}
|
||||
|
||||
public boolean isCrop(Material m) {
|
||||
for (Harvestable h : cropList) {
|
||||
if (h.getCrop().equals(m)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Material getSeed(Material m) {
|
||||
for (Harvestable h : cropList) {
|
||||
if (h.getCrop().equals(m)) return h.getSeed();
|
||||
}
|
||||
return Material.AIR;
|
||||
}
|
||||
|
||||
public int getMaxGrowth(Material m) {
|
||||
for (Harvestable h : cropList) {
|
||||
if (h.getCrop().equals(m)) return h.getGrowth();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public CropEvent () {
|
||||
super();
|
||||
this.registerHarvestable(new Harvestable(Material.WHEAT, Material.WHEAT_SEEDS, 7));
|
||||
this.registerHarvestable(new Harvestable(Material.POTATOES, Material.POTATO, 7));
|
||||
this.registerHarvestable(new Harvestable(Material.CARROTS, Material.CARROT, 7));
|
||||
this.registerHarvestable(new Harvestable(Material.BEETROOTS, Material.BEETROOT_SEEDS, 3));
|
||||
this.registerHarvestable(new Harvestable(Material.NETHER_WART, Material.NETHER_WART, 3));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onRightClick(PlayerInteractEvent e) {
|
||||
Block block = e.getClickedBlock();
|
||||
|
||||
if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
if (!isCrop(block.getType()))
|
||||
return;
|
||||
|
||||
harvestCrop(block.getType(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public void harvestCrop(Material m, PlayerInteractEvent e) {
|
||||
if (!isCrop(m)) return;
|
||||
|
||||
Block block = e.getClickedBlock();
|
||||
Ageable cropData = (Ageable) block.getBlockData();
|
||||
if (cropData.getAge() != getMaxGrowth(m)) return;
|
||||
|
||||
boolean seedInDrop = false;
|
||||
boolean replant = true;
|
||||
for (ItemStack is : block.getDrops()) {
|
||||
if (is.getType() == getSeed(m)) {
|
||||
seedInDrop = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!e.getPlayer().getInventory().containsAtLeast(new ItemStack(getSeed(m)), 1) && !seedInDrop) {
|
||||
replant = false;
|
||||
}
|
||||
|
||||
Collection<ItemStack> drops = block.getDrops(e.getPlayer().getInventory().getItemInMainHand());
|
||||
if (seedInDrop) {
|
||||
for (ItemStack is : drops) {
|
||||
if (is.getType() == getSeed(m)) {
|
||||
is.setAmount(is.getAmount() - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (replant && !seedInDrop) {
|
||||
e.getPlayer().getInventory().remove(new ItemStack(getSeed(m), 1));
|
||||
}
|
||||
|
||||
for (ItemStack is : drops) {
|
||||
if (is.getType() == Material.AIR || is.getAmount() < 1) continue;
|
||||
block.getWorld().dropItemNaturally(block.getLocation(), is);
|
||||
}
|
||||
|
||||
Bukkit.getPluginManager().callEvent(new BlockBreakEvent(block, e.getPlayer()));
|
||||
if (replant) block.setType(m);
|
||||
else block.setType(Material.AIR);
|
||||
|
||||
if (block.getType() == Material.NETHER_WART) {
|
||||
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.BLOCK_NETHER_WART_BREAK, 10, 1);
|
||||
if (replant) e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ITEM_NETHER_WART_PLANT, 8, 1);
|
||||
} else {
|
||||
e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.BLOCK_CROP_BREAK, 10, 1);
|
||||
if (replant) e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ITEM_CROP_PLANT, 8, 1);
|
||||
}
|
||||
}
|
||||
}
|
41
src/ee/lunasqu/clickharvest/Harvestable.java
Normal file
41
src/ee/lunasqu/clickharvest/Harvestable.java
Normal file
@ -0,0 +1,41 @@
|
||||
package ee.lunasqu.clickharvest;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class Harvestable {
|
||||
private Material crop;
|
||||
private Material seed;
|
||||
private int growth;
|
||||
|
||||
public Harvestable(Material crop, Material seed, int growth) {
|
||||
this.setCrop(crop);
|
||||
this.setSeed(seed);
|
||||
this.setGrowth(growth);
|
||||
}
|
||||
|
||||
public Material getCrop() {
|
||||
return crop;
|
||||
}
|
||||
|
||||
public void setCrop(Material crop) {
|
||||
this.crop = crop;
|
||||
}
|
||||
|
||||
public Material getSeed() {
|
||||
return seed;
|
||||
}
|
||||
|
||||
public void setSeed(Material seed) {
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
public int getGrowth() {
|
||||
return growth;
|
||||
}
|
||||
|
||||
public void setGrowth(int growth) {
|
||||
this.growth = growth;
|
||||
}
|
||||
|
||||
|
||||
}
|
18
src/ee/lunasqu/clickharvest/Main.java
Normal file
18
src/ee/lunasqu/clickharvest/Main.java
Normal file
@ -0,0 +1,18 @@
|
||||
package ee.lunasqu.clickharvest;
|
||||
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class Main extends JavaPlugin {
|
||||
public static Main plugin;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
plugin = this;
|
||||
getServer().getPluginManager().registerEvents(new CropEvent(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user