diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 746b260a5d3fd53296ea793d499a6bbc9da9517e..dce7b13ef68ffcc4188ef9904663488adaf97728 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.bin and b/.gradle/8.5/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index 64d85103fe16a3a5738c1e67645b28a92df84401..3ee9d16e1044b097aae57904200ac619ef6a9d5a 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.lock and b/.gradle/8.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index 8f6f7a896bb1e02150949724b12e6448ea91d2eb..0f3bd98f57324ab1698f63c480aa1795a8878217 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.bin and b/.gradle/8.5/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.5/fileHashes/fileHashes.lock b/.gradle/8.5/fileHashes/fileHashes.lock index 080993a19d3a3a653d068f2659c625ec712d55a2..67ea60ba176b47d0a3e6cb1daf00f1916bb865b2 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.lock and b/.gradle/8.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin index 971f922c75a975dad2143d41f8f7cc869a333538..410f115731ba8a7edde9b89fa6b8947e61ed37e2 100644 Binary files a/.gradle/8.5/fileHashes/resourceHashesCache.bin and b/.gradle/8.5/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 38847464eeb81c527633ea8ac60711c0d8bffbf8..c0a0d1fadc889152643cfc5483f8ca7103935be7 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/classes/java/main/CropHarvester/CropCollector$1.class b/build/classes/java/main/CropHarvester/CropCollector$1.class new file mode 100644 index 0000000000000000000000000000000000000000..309d91e8908275ef50c8ed2edbb9652c80907eb8 Binary files /dev/null and b/build/classes/java/main/CropHarvester/CropCollector$1.class differ diff --git a/build/classes/java/main/CropHarvester/CropCollector.class b/build/classes/java/main/CropHarvester/CropCollector.class new file mode 100644 index 0000000000000000000000000000000000000000..87803cd521313a088e19fa4fa72995e3d6e0e088 Binary files /dev/null and b/build/classes/java/main/CropHarvester/CropCollector.class differ diff --git a/build/classes/java/main/CropHarvester/CropHarvester.class b/build/classes/java/main/CropHarvester/CropHarvester.class index ff85e91168e5b5b70b515f32babb8f58b18f07d0..31eeb07e58f1d5f500a3555b0803aef841979c53 100644 Binary files a/build/classes/java/main/CropHarvester/CropHarvester.class and b/build/classes/java/main/CropHarvester/CropHarvester.class differ diff --git a/build/classes/java/main/Plots/Plots.class b/build/classes/java/main/Plots/Plots.class index 39eb1e1cc809c7a63c5133102feef8ad40f1a6b7..5a7553abf3b3a69aa83b6ad3229e0b18b99ecfb0 100644 Binary files a/build/classes/java/main/Plots/Plots.class and b/build/classes/java/main/Plots/Plots.class differ diff --git a/build/classes/java/main/Timber/Timber.class b/build/classes/java/main/Timber/Timber.class index 69a8eb3ee202bb623424e19c725718d7d0e76e26..87340a79a66795d038bb393da94b0d560262d456 100644 Binary files a/build/classes/java/main/Timber/Timber.class and b/build/classes/java/main/Timber/Timber.class differ diff --git a/build/libs/pixelcampusessentials-1.0.jar b/build/libs/pixelcampusessentials-1.0.jar index 9d491d233a51ab1cf8f2ece025f575072dfe4eda..cfccd3c509a3045dbebdcb3acc56daf21def4db0 100644 Binary files a/build/libs/pixelcampusessentials-1.0.jar and b/build/libs/pixelcampusessentials-1.0.jar differ diff --git a/build/resources/main/plugin.yml b/build/resources/main/plugin.yml index 3c96f98da8445f98ea1c75798791db2f107cbc92..e6ee0b825cf50be827e8b0dcd660d15d3382e0c4 100644 --- a/build/resources/main/plugin.yml +++ b/build/resources/main/plugin.yml @@ -29,3 +29,6 @@ permissions: pixelcampusessentials.chop: description: Timber default: op + pixelcampusessentials.harvest: + description: Crop Harvester + default: op \ No newline at end of file diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CropHarvester.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/CropHarvester.class.uniqueId0 index 38173e9f7a6f1d44394c579b4294e5e48d31301c..6e68263a68f75b97886600785bd0ec8b10e1f999 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CropHarvester.class.uniqueId0 and b/build/tmp/compileJava/compileTransaction/stash-dir/CropHarvester.class.uniqueId0 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index b425c846d180f8670e01980d6e2ae99d89bfc727..d9178ebccaa1204a80849e52d2b5e24a4341b935 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/CropHarvester/CropCollector.java b/src/main/java/CropHarvester/CropCollector.java new file mode 100644 index 0000000000000000000000000000000000000000..e792ea1a6ce1f236408f5f880d7b388610744af1 --- /dev/null +++ b/src/main/java/CropHarvester/CropCollector.java @@ -0,0 +1,38 @@ +package CropHarvester; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Collection; +import java.util.function.BiConsumer; + +public class CropCollector { + + public static void collectCrops(Block plant, Player player){ + + Collection<ItemStack> drops = plant.getDrops(); + ItemStack[] droppedItems = new ItemStack[drops.size()]; + + droppedItems = drops.toArray(droppedItems); + + droppedItems[1].subtract(); //index 1 contains seeds. removes one, because one is needed to be "replanted" + + for (ItemStack droppedItem : droppedItems) { + + + //puts item in next free slot or sums to existing stack. addItem() returns the Items that couldnt be stored in the Inventory + player.getInventory().addItem(droppedItem).forEach(new BiConsumer<Integer, ItemStack>() { + @Override + public void accept(Integer ignored, ItemStack leftoverItems) { //drops crops that didnt find space in the Inventory + + plant.getWorld().dropItem(plant.getLocation(), leftoverItems); + } + }); + } + + + } + + +} diff --git a/src/main/java/CropHarvester/CropHarvester.java b/src/main/java/CropHarvester/CropHarvester.java index 961ed5ccd4f5f5e562fd4729146fecf9413c2cbc..5e93a038e2229a5b57d8bc2255309653d1127875 100644 --- a/src/main/java/CropHarvester/CropHarvester.java +++ b/src/main/java/CropHarvester/CropHarvester.java @@ -1,5 +1,7 @@ package CropHarvester; +import org.bukkit.Material; +import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.Tag; import org.bukkit.block.Block; @@ -7,8 +9,8 @@ import org.bukkit.block.data.Ageable; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; import java.util.Objects; @@ -17,32 +19,56 @@ public class CropHarvester implements Listener { @EventHandler public void playerRightClick(PlayerInteractEvent e){ - if(!Objects.requireNonNull(e.getHand()).isHand())return; - if(!checkForFullGrownCrop(e))return; + if(!isPermitted(e.getPlayer()))return; + if(!Objects.equals(e.getHand(), EquipmentSlot.HAND))return; + if(!isFullGrownCrop(e.getClickedBlock()))return; + + Block plant = e.getClickedBlock(); Player player = e.getPlayer(); - player.sendMessage(Objects.requireNonNull(e.getClickedBlock()).getType().toString()); - e.getClickedBlock().breakNaturally(); - player.playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_CROP_BREAK,1,1); - } + try { + CropCollector.collectCrops(plant,player); //Calculates Loot and puts it into Inventory or drops it + Ageable resetCrop = (Ageable) plant.getBlockData(); + resetCrop.setAge(0); //sets the Crop back to 0 "growth". Illusion as if the Crop was re-planted. CropCollector handles the loot. - //returns false on fail - private boolean checkForFullGrownCrop(PlayerInteractEvent e){ + plant.setBlockData(resetCrop); + }catch (Exception exception){ + return; + } + + //visual and audio effects + plant.getWorld().playSound(plant.getLocation(), Sound.BLOCK_CROP_BREAK,1,0.8f); + plant.getWorld().spawnParticle(Particle.BLOCK_CRACK,plant.getLocation().add(0.5,0,0.5),5,0.2,0,0.2,0,Material.COARSE_DIRT.createBlockData()); + player.swingMainHand(); + } - if(!e.getAction().equals(Action.RIGHT_CLICK_BLOCK))return false; //check for right click on a block - Block clickedBlock = e.getClickedBlock(); + //returns false on fail + private boolean isFullGrownCrop(Block clickedBlock){ - if(!Tag.CROPS.isTagged(Objects.requireNonNull(clickedBlock).getType()))return false; //check if the clicked block is a type of crop + try { + if (!Tag.CROPS.isTagged(clickedBlock.getType())) + return false; //check if the clicked block is a type of crop + }catch (NullPointerException e){ + return false; + } Ageable ageable = (Ageable) clickedBlock.getBlockData(); - if(ageable.getAge() != ageable.getMaximumAge())return false; + if(ageable.getMaterial().equals(Material.MELON_STEM) || ageable.getMaterial().equals(Material.PUMPKIN_STEM)) return false; //ignore pumpkins and Melons - return true; + return ageable.getAge() == ageable.getMaximumAge(); } + + private boolean isPermitted(Player p){ + return + ( + Tag.ITEMS_HOES.isTagged(p.getInventory().getItemInMainHand().getType()) + ) + && p.hasPermission("pixelcampusessentials.harvest"); + } } diff --git a/src/main/java/FunAndElse/KeepOutOfFlying.java b/src/main/java/FunAndElse/KeepOutOfFlying.java new file mode 100644 index 0000000000000000000000000000000000000000..05e4e646cc24ff84a175a32936534d1adfb36bfa --- /dev/null +++ b/src/main/java/FunAndElse/KeepOutOfFlying.java @@ -0,0 +1,15 @@ +package FunAndElse; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class KeepOutOfFlying implements Listener { + + @EventHandler + public void playerJoin(PlayerJoinEvent e){ + + + + } +} diff --git a/src/main/java/Plots/Plots.java b/src/main/java/Plots/Plots.java index 01c0f7ef90b9cdc65c7ee1c1d1d827282a193331..c3170247c0a03099203e5d0a761078e5208d9442 100644 --- a/src/main/java/Plots/Plots.java +++ b/src/main/java/Plots/Plots.java @@ -65,7 +65,7 @@ public class Plots implements CommandExecutor, Listener { } if(!sender.hasPermission("suwupremeEssentials.plot")){ - sender.sendMessage("§cYou dont have the nessecary Permissions to use Plots"); + sender.sendMessage("§cYou dont have the necessary Permissions to use Plots"); return true; } @@ -184,7 +184,7 @@ public class Plots implements CommandExecutor, Listener { } if(getRegionSize(newRegion) > MAX_PLOT_SIZE){ - p.sendMessage("§cYour Plot cannot exeed " + MAX_PLOT_SIZE + " Blocks in Size"); + p.sendMessage("§cYour Plot cannot exceed " + MAX_PLOT_SIZE + " Blocks in Size"); return; } diff --git a/src/main/java/Timber/Timber.java b/src/main/java/Timber/Timber.java index 8118ce4675a8744ba652ffff3a48c3d68d2b2761..b5ca243c631d8742d7aab364621707e84957cb36 100644 --- a/src/main/java/Timber/Timber.java +++ b/src/main/java/Timber/Timber.java @@ -24,7 +24,7 @@ public class Timber implements Listener { if( p.isSneaking() && - e.getPlayer().isSneaking() && e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.NETHERITE_AXE) && + Tag.ITEMS_AXES.isTagged(p.getInventory().getItemInMainHand().getType()) && isLogAt(e.getBlock().getLocation()) ){ diff --git a/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java b/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java index 925552b1c2d8e54ee647b4cae845b5d3a62b4500..858cf2982ac51cc5e36685f5ebba2cbf5cfc1dd7 100644 --- a/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java +++ b/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java @@ -1,10 +1,7 @@ package org.fsi.pixelcampusessentials; import CropHarvester.CropHarvester; -import FunAndElse.FreezePlayer; -import FunAndElse.Fullbright; -import FunAndElse.PlayerStats; -import FunAndElse.SpeedLadder; +import FunAndElse.*; import Plots.PlayerSelection; import Plots.Plots; import Plots.PlotsTabComplete; @@ -27,6 +24,7 @@ public final class Pixelcampusessentials extends JavaPlugin { getServer().getPluginManager().registerEvents(new SpeedLadder(),this); getServer().getPluginManager().registerEvents(new FreezePlayer(),this); getServer().getPluginManager().registerEvents(new CropHarvester(),this); + getServer().getPluginManager().registerEvents(new KeepOutOfFlying(),this); try { getCommand("plot").setExecutor(new Plots()); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 14ea60aadd58e5edce4c3910a1dd4e3b45e6d0e5..7e183c965cfd53900e10fd4f8ea88cc847b555d7 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -29,3 +29,6 @@ permissions: pixelcampusessentials.chop: description: Timber default: op + pixelcampusessentials.harvest: + description: Crop Harvester + default: op \ No newline at end of file