commit 853a129e896c0cad87be20ba656f1f81e5b02d4d Author: 5vl Date: Fri Sep 23 09:56:38 2022 +0200 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..075dd7a --- /dev/null +++ b/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + me.fivevl + canemeal + 1.0.0 + jar + + CanemMeal + + Makes sugar cane bonemeal-able + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + io.papermc.paper + paper-api + 1.19.2-R0.1-SNAPSHOT + provided + + + diff --git a/src/main/java/me/fivevl/canemeal/InteractEvent.java b/src/main/java/me/fivevl/canemeal/InteractEvent.java new file mode 100644 index 0000000..8f4ed12 --- /dev/null +++ b/src/main/java/me/fivevl/canemeal/InteractEvent.java @@ -0,0 +1,55 @@ +package me.fivevl.canemeal; + +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import java.util.Random; + +public class InteractEvent implements Listener { + Random random = new Random(); + @EventHandler + public void onClick(PlayerInteractEvent e) { + Player p = e.getPlayer(); + if (p.getInventory().getItemInMainHand().getType() != Material.BONE_MEAL || e.getClickedBlock() == null || e.getClickedBlock().getType() != Material.SUGAR_CANE) { + return; + } + Location topBlock = e.getClickedBlock().getLocation(); + while (topBlock.getBlock().getType() == Material.SUGAR_CANE) { + topBlock.add(0, 1, 0); + } + if (topBlock.getBlockY() >= p.getWorld().getMaxHeight()) { + p.sendActionBar(ChatColor.RED + "Your sugar cane is at the world height limit, which is " + p.getWorld().getMaxHeight() + " blocks!"); + return; + } + Block above = topBlock.getBlock(); + if (above.getType() != Material.AIR && above.getType() != Material.SUGAR_CANE) { + p.sendActionBar(ChatColor.RED + "Your sugar cane cannot grow through blocks!"); + return; + } + p.getInventory().getItemInMainHand().setAmount(p.getInventory().getItemInMainHand().getAmount() - 1); + p.getWorld().playEffect(e.getClickedBlock().getLocation().add(0.5, 0.5, 0.5), Effect.BONE_MEAL_USE, 0); + int height = 0; + if (random.nextBoolean()) { + Block newBlock = topBlock.getBlock(); + newBlock.setType(Material.SUGAR_CANE); + height = newBlock.getY(); + } else { + for (int i = 0; i < 2; i++) { + Block newBlock = topBlock.getBlock(); + if (newBlock.getType() != Material.AIR && newBlock.getType() != Material.SUGAR_CANE) { + p.sendActionBar(ChatColor.RED + "Your sugar cane cannot grow through blocks!"); + return; + } + newBlock.setType(Material.SUGAR_CANE); + height = newBlock.getY(); + } + } + p.sendActionBar(ChatColor.GREEN + "The top of your sugar cane is now at Y level " + height + "!"); + } +} diff --git a/src/main/java/me/fivevl/canemeal/Main.java b/src/main/java/me/fivevl/canemeal/Main.java new file mode 100644 index 0000000..0c1e515 --- /dev/null +++ b/src/main/java/me/fivevl/canemeal/Main.java @@ -0,0 +1,11 @@ +package me.fivevl.canemeal; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +public final class Main extends JavaPlugin { + @Override + public void onEnable() { + Bukkit.getPluginManager().registerEvents(new InteractEvent(), this); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..25cbe42 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: CanemMeal +version: '${project.version}' +main: me.fivevl.canemeal.Main +api-version: 1.19 +authors: [ 5vl ] +description: Makes sugar cane bonemeal-able