├── .DS_Store ├── .classpath ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .idea ├── $PRODUCT_WORKSPACE_FILE$ ├── .gitignore ├── .name ├── compiler.xml ├── encodings.xml ├── misc.xml └── vcs.xml ├── .project ├── .settings ├── org.eclipse.jdt.core.prefs └── org.eclipse.m2e.core.prefs ├── MinecraftBut.iml ├── README.md ├── pom.xml └── src └── main ├── java └── games │ └── bevs │ └── minecraftbut │ ├── MinecraftButPlugin.java │ ├── commands │ └── MinecraftButCommand.java │ ├── commons │ ├── Console.java │ ├── FallingBlockUtils.java │ ├── Sounds.java │ ├── TabUtils.java │ ├── XMaterial.java │ ├── gui │ │ ├── Menu.java │ │ └── MenuIcon.java │ └── utils │ │ ├── CC.java │ │ ├── Callback.java │ │ ├── InventoryUtils.java │ │ ├── ItemStackBuilder.java │ │ └── MathUtils.java │ ├── gui │ └── SenerarioMenu.java │ ├── listeners │ └── WelcomeListener.java │ ├── senerario │ ├── ScenerarioManager.java │ ├── Senerario.java │ ├── options │ │ ├── DataType.java │ │ └── Optional.java │ └── senerarios │ │ ├── AnvilRain.java │ │ ├── BedRockTrail.java │ │ ├── BlockPotions.java │ │ ├── EnderDragonAppears.java │ │ ├── FasterAndFaster.java │ │ ├── LinkedDeaths.java │ │ ├── LinkedHealth.java │ │ ├── MaducerWorld.java │ │ ├── MobsMultiple.java │ │ ├── NoJump.java │ │ ├── OneHit.java │ │ ├── RainingBlocks.java │ │ ├── ShrinkingInventory.java │ │ ├── SunDeath.java │ │ ├── TNTOnSelf.java │ │ ├── TNTRain.java │ │ ├── TheLavaRises.java │ │ ├── TheWaterRises.java │ │ ├── WorldDecay.java │ │ ├── deathout │ │ └── DeathOut.java │ │ ├── gemeater │ │ ├── GemEater.java │ │ ├── GemManager.java │ │ └── gems │ │ │ ├── CoalGem.java │ │ │ ├── DiamondGem.java │ │ │ ├── EmeraldGem.java │ │ │ ├── GemBase.java │ │ │ ├── GoldGem.java │ │ │ ├── IronGem.java │ │ │ ├── LapisGem.java │ │ │ └── RedstoneGem.java │ │ ├── linkedinvs │ │ └── LinkedInventories.java │ │ └── mathorstop │ │ └── MathOrStop.java │ └── world │ └── ButWorld.java └── resources └── plugin.yml /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcbut/MinecraftBut/518835626916abbd7df658258af15edb0e8a5ba7/.DS_Store -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - Server Version: [e.g. 1.8, 1.14] 28 | - Server Type [e.g. Spigot, Bukkit, Paper, Taco] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | pom.xml.tag 3 | pom.xml.releaseBackup 4 | pom.xml.versionsBackup 5 | pom.xml.next 6 | release.properties 7 | dependency-reduced-pom.xml 8 | buildNumber.properties 9 | .mvn/timing.properties 10 | # https://github.com/takari/maven-wrapper#usage-without-binary-jar 11 | .mvn/wrapper/maven-wrapper.jar 12 | -------------------------------------------------------------------------------- /.idea/$PRODUCT_WORKSPACE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 1.8 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | MinecraftButPlugin -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MinecraftBut 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 3 | org.eclipse.jdt.core.compiler.compliance=1.8 4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 5 | org.eclipse.jdt.core.compiler.release=disabled 6 | org.eclipse.jdt.core.compiler.source=1.8 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /MinecraftBut.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MinecraftBut 2 | [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VWG7DUFDRYXDA) 3 | A Minecraft Plugin created for YouTubers such as BajanCandian, Skeppy, BadBoyHalo, A6D 4 | The YouTubers spawn in a small world with the option to apply multiple different senerarios 5 | 6 | ## Join the Discord server for support 7 | [Join the Discord](https://discord.gg/fx9Kg5N) (Note: You must be 13 years of age or older to use Discord) 8 | 9 | ## Reddit 10 | [/r/MinecratBut](https://www.reddit.com/r/MinecratBut) (yes we know it's misspelt) 11 | 12 | ## Don't wanna set up the plugin yourself? 13 | Join my server `play.minecraftbut.net` where you can play arcade games with friends and play MinecraftBut, as well as regularly hosted events. 14 | 15 | ## Download 16 | [Download the latest version of the plugin](https://github.com/mcbut/MinecraftBut/releases/latest) 17 | 18 | It'll also be nice if you starred the project <3 (It pretty much means 'like' & it's free) 19 | 20 | ## Versions 21 | Mainly we support [1.8.x](https://getbukkit.org/get/WAH0jXqYA2s3Gzzg3toWHG1R3lHNCNZY) & 1.14.x servers. Other versions are untested and support will generally not be provided when using other versions. I recommend TacoSpigot or PaperSpigot, but as a bare minimum I recommend you use Spigot over Bukkit or CraftBukkit. 22 | 23 | ## Support <3 24 | We use yourkit for performance tuning of this project 25 | 26 | YourKit supports open source projects with innovative and intelligent tools 27 | for monitoring and profiling Java and .NET applications. 28 | YourKit is the creator of [YourKit Java Profiler](https://www.yourkit.com/java/profiler), 29 | [YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/), [YourKit YouMonitor](https://www.yourkit.com/youmonitor) 30 | 31 | Personally I would strongly recommend them if you're a developer :D 32 | 33 | [![yourkit logo](https://www.yourkit.com/images/yklogo.png)](https://www.yourkit.com) 34 | 35 | ## Videos 36 | * [Skeppy's video: Lava is rising - 558,119 views](https://www.youtube.com/watch?v=0dvbqzXiA_o) 37 | * [Skeppy's video: Water is rising - 1,113,071 views](https://www.youtube.com/watch?v=Kcul2iXfPDY) 38 | * [Wilbur Soot's video: Minecraft, But I Leave a Trail of Bedrock - 972,845 views](https://www.youtube.com/watch?v=Kcul2iXfPDY) 39 | * [Skeppy's video: TNT Rain](https://www.youtube.com/watch?v=kkU8-3teKS0) 40 | * [Skeepy's video: 1 Hit](https://www.youtube.com/watch?v=bpvQGu1cwlQ) 41 | * [Skeppy's video: Anvil rain](https://www.youtube.com/watch?v=IONiD9ZnqEg) 42 | * [Skeppy's video: the world decays](https://www.youtube.com/watch?v=I9PjCahtpzs) 43 | * [Skeppy's video: Minecraft, But Sunlight Kills You](https://www.youtube.com/watch?v=QW1dvp4xSE8) 44 | ##### *(Want to be added to this list? Contact Heath or CyberFlame on Discord)* 45 | 46 | ## Senerario (Yes, I know it's spelt wrong haha) 47 | * Lava is Rising 48 | * Water is Rising 49 | * Raining TNT 50 | * Raining Blocks 51 | * No Jumping 52 | * Dragon spawns 53 | * One heart - you only have 1 heart 54 | * Bedrock Trail - You leave a bedrock trail behind you 55 | * Gem Eater (Ore Eater) - You can only eat ores to live 56 | * TNT Spawn on Self - Tnt will spawn on you every so often 57 | * Anvil Rain - Anvil falls from the sky 58 | * Death Out - Set into spectator when you die (or kick when you die) 59 | * World Decay - Every block the sun touches slowly breaks down 60 | * Linked Inventories - everyone shares inventory (1.8 only) 61 | * Linked Health - everyone shares health 62 | * Linked Deaths - One player dies, everyone dies 63 | * FasterAndFaster - get faster every minute 64 | * Maducer World - world truns to bedrock 65 | * Mobs Multiple - Every time you hit a mob, it multiples 66 | * Shrinking Inventory - you get less and less inventory space as time goes on 67 | * Block Potion - every block gives a potion when broken 68 | 69 | Command to view all credits and their YouTube channels: 70 | ``` 71 | /mb credit 72 | ``` 73 | 74 | 75 | ## How to install 76 | 0. Use Spigot on version [1.8.x](https://getbukkit.org/get/WAH0jXqYA2s3Gzzg3toWHG1R3lHNCNZY) or 1.14 (these are the only officially supported ones) 77 | 0. You can buy a Minecraft server from [here](https://mcprohosting.com/order?aff=81875) unless you already have a host or you can self-host it. 78 | 0. Configure the server how you want it in server.properties 79 | 0. Then just drop the "MinecraftBut.jar" into the "/plugins" folder of the server 80 | 0. Start the server and you're done 81 | **Sidenote**: You could probably get away with using PaperSpigot or TacoSpigot, as they're variants of Spigot. You might even be able to use Bukkit and CraftBukkit, however, only Bukkit inherited "jars" are supported, so that means no Sponge etc. but modified spigot jars should be fine. 82 | 83 | ## Permissions 84 | 85 | ``` 86 | minecraftbut.command.minecraftbut 87 | ``` 88 | We only have one permission node for the root command 89 | 90 | ## Commands 91 | ``` 92 | /MinecraftBut 93 | /mb 94 | ``` 95 | Opens the GUI to enable and disable Senerarios 96 | 97 | ``` 98 | /MinecraftBut help 99 | /mb help 100 | ``` 101 | Help command 102 | 103 | ``` 104 | /MinecraftBut Senerario help 105 | /mb s help 106 | ``` 107 | Learn ways that you can configure a Senerario 108 | 109 | ``` 110 | /MinecraftBut Senerario 111 | /mb s 112 | ``` 113 | Configure a Senerario 114 | 115 | Note: senerarioId can be found in the lore of the item in the menu 116 | 117 | ``` 118 | /MinecraftBut changeworld 119 | /mb cw 120 | ``` 121 | Change the world that the plugin is running on, use case is just for Multiverse support 122 | 123 | Note: I will not support the plugin running on multiple worlds at once, as it's out of the scope of common need of the YouTubers, however I think it works in the Nether and The End. 124 | 125 | ## Features 126 | [Feature Requests](https://feathub.com/HeathLoganCampbell/MinecraftBut) 127 | Or request a feature on the Discord server 128 | 129 | ## Developers 130 | ### How To set up the work environment 131 | https://youtu.be/l7zyhCOyD4A 132 | 133 | ### Tools used 134 | * [Maven](https://maven.apache.org/) this should already be install on most common IDEs 135 | * [BuildTools](https://www.spigotmc.org/wiki/buildtools/#1-8-8) 136 | * [Lombok](https://projectlombok.org/download) 137 | 138 | ### Download code 139 | ``` 140 | git clone git@github.com:HeathLoganCampbell/MinecraftBut.git 141 | ``` 142 | A folder called "MinecraftBut" is now created, so from now on you can cd to this folder and type 143 | ``git pull`` to download changes made 144 | 145 | ### Add a Senerario 146 | Simply extend Senerario, like so: 147 | ```java 148 | public class DummyExample extends Senerario { 149 | //This allows players to edit the field through the command 150 | //'/mb s DummyExample someNumberToEdit 1' which sets the value to 1 151 | @Optional 152 | private int someNumberToEdit = 5; 153 | 154 | public DummyExample(ButWorld butWorld) { 155 | super("Dummy Name", butWorld, XMaterial.ANVIL.parseMaterial(), new String[] { 156 | "This is a description of the senerario" 157 | }); 158 | } 159 | 160 | //called when Senerario is enabled 161 | @Override 162 | public void onStart() { 163 | //If you have a repeating task, I guess using repeat(runnable, ticks) 164 | //which auto cancels on disabl 165 | this.repeat(() -> {}, 20l * 1); 166 | } 167 | 168 | //called when Senerario is disalbed 169 | @Override 170 | public void onFinish() { 171 | 172 | } 173 | 174 | //Registers when the Senerario is enabled 175 | @EventHandler 176 | public void onPlayerMove(PlayerMoveEvent e) { 177 | Player player = e.getPlayer(); 178 | player.sendMessage("Hey " + someNumberToEdit); 179 | } 180 | } 181 | ``` 182 | 183 | Then simply go to the games.bevs.minecraftbut.MinecraftButPlugin class 184 | ```java 185 | // and add the following line in games.bevs.minecraftbut.MinecraftButPlugin 186 | private void populateScenerarios(ButWorld butWorld) 187 | { 188 | ... 189 | this.scenerarioManager.registerSenerario(new DummyExample(butWorld)); 190 | } 191 | ``` 192 | You can find more examples within [games.bevs.minecraftbut.senerario.senerarios](https://github.com/HeathLoganCampbell/MinecraftBut/tree/master/src/main/java/games/bevs/minecraftbut/senerario/senerarios) 193 | 194 | 195 | ## Looking for a specific release? 196 | [Releases](https://github.com/HeathLoganCampbell/MinecraftBut/releases) 197 | 198 | ## Contributing 199 | If you modify this plugin in any positive way please consider submitting your changes as a pull request. After all, this is open-source. 200 | If you find a bug please submit an issue describing the bug. 201 | 202 | ## Donate 203 | I don't expect anyone to really donate, but I have put time into this plugin so it would be dope if I made something back from it. 204 | Baked with love by Sprock (Heath) 205 | 206 | [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VWG7DUFDRYXDA) 207 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 4 | 4.0.0 5 | games.bevs.minecraftbut 6 | MinecraftButPlugin 7 | 0.0.1-SNAPSHOT 8 | MinecraftBut 9 | 10 | 11 | 1.8 12 | 1.8 13 | UTF-8 14 | 1.8.8-R0.1-SNAPSHOT 15 | 1.0 16 | 17 | 18 | 19 | 20 | 21 | jitpack.io 22 | https://jitpack.io 23 | 24 | 25 | spigot-repo 26 | https://hub.spigotmc.org/nexus/content/repositories/snapshots/ 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | org.spigotmc 35 | spigot 36 | ${spiogt.version} 37 | provided 38 | 39 | 41 | 42 | 43 | 44 | org.apache.commons 45 | commons-lang3 46 | 3.9 47 | 48 | 49 | 50 | 51 | org.projectlombok 52 | lombok 53 | 1.18.8 54 | provided 55 | 56 | 57 | 58 | 59 | clean install 60 | ${project.name} 61 | ${basedir}/src/main/java 62 | 63 | 64 | . 65 | true 66 | ${basedir}/src/main/resources/ 67 | 68 | *.yml 69 | 70 | 71 | 72 | 73 | 74 | maven-compiler-plugin 75 | 2.3.2 76 | 77 | 1.8 78 | 1.8 79 | 80 | 81 | 82 | org.apache.maven.plugins 83 | maven-shade-plugin 84 | 2.3 85 | 86 | 87 | package 88 | 89 | shade 90 | 91 | 92 | false 93 | 94 | 95 | *:* 96 | 97 | META-INF/*.SF 98 | META-INF/*.DSA 99 | META-INF/*.RSA 100 | 101 | 102 | 103 | 104 | 105 | 106 | org.bukkit:* 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/MinecraftButPlugin.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | import games.bevs.minecraftbut.senerario.senerarios.*; 6 | import games.bevs.minecraftbut.senerario.senerarios.mathorstop.MathOrStop; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.command.CommandMap; 9 | import org.bukkit.plugin.java.JavaPlugin; 10 | 11 | import games.bevs.minecraftbut.commands.MinecraftButCommand; 12 | import games.bevs.minecraftbut.listeners.WelcomeListener; 13 | import games.bevs.minecraftbut.senerario.ScenerarioManager; 14 | import games.bevs.minecraftbut.senerario.senerarios.deathout.DeathOut; 15 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.GemEater; 16 | import games.bevs.minecraftbut.senerario.senerarios.linkedinvs.LinkedInventories; 17 | import games.bevs.minecraftbut.world.ButWorld; 18 | import lombok.Getter; 19 | 20 | @Getter 21 | public class MinecraftButPlugin extends JavaPlugin 22 | { 23 | private ButWorld butWorld; 24 | private ScenerarioManager scenerarioManager; 25 | 26 | @Override 27 | public void onEnable() 28 | { 29 | this.butWorld = new ButWorld(Bukkit.getWorlds().get(0)); 30 | 31 | this.scenerarioManager = new ScenerarioManager(); 32 | this.populateScenerarios(this.butWorld); 33 | 34 | Bukkit.getPluginManager().registerEvents(new WelcomeListener(this.butWorld), this); 35 | 36 | this.registerCommands(); 37 | } 38 | 39 | @Override 40 | public void onDisable() 41 | { 42 | } 43 | 44 | public static MinecraftButPlugin getPlugin() 45 | { 46 | return JavaPlugin.getPlugin(MinecraftButPlugin.class); 47 | } 48 | 49 | private void populateScenerarios(ButWorld butWorld) 50 | { 51 | boolean minecraft18 = Bukkit.getServer().getClass().getPackage().toString().contains("1_8"); 52 | 53 | Bukkit.broadcastMessage(Bukkit.getServer().getClass().getPackage().toString()); 54 | this.scenerarioManager.registerSenerario(new EnderDragonAppears(butWorld)); 55 | this.scenerarioManager.registerSenerario(new NoJump(butWorld)); 56 | this.scenerarioManager.registerSenerario(new OneHit(butWorld)); 57 | this.scenerarioManager.registerSenerario(new RainingBlocks(butWorld)); 58 | this.scenerarioManager.registerSenerario(new TheLavaRises(butWorld)); 59 | this.scenerarioManager.registerSenerario(new TheWaterRises(butWorld)); 60 | this.scenerarioManager.registerSenerario(new TNTRain(butWorld)); 61 | this.scenerarioManager.registerSenerario(new BedRockTrail(butWorld)); 62 | this.scenerarioManager.registerSenerario(new TNTOnSelf(butWorld)); 63 | this.scenerarioManager.registerSenerario(new GemEater(butWorld)); 64 | this.scenerarioManager.registerSenerario(new DeathOut(butWorld)); 65 | this.scenerarioManager.registerSenerario(new WorldDecay(butWorld)); 66 | this.scenerarioManager.registerSenerario(new FasterAndFaster(butWorld)); 67 | this.scenerarioManager.registerSenerario(new MaducerWorld(butWorld)); 68 | this.scenerarioManager.registerSenerario(new LinkedDeaths(butWorld)); 69 | this.scenerarioManager.registerSenerario(new BlockPotions(butWorld)); 70 | this.scenerarioManager.registerSenerario(new LinkedHealth(butWorld)); 71 | this.scenerarioManager.registerSenerario(new ShrinkingInventory(butWorld)); 72 | this.scenerarioManager.registerSenerario(new MobsMultiple(butWorld)); 73 | this.scenerarioManager.registerSenerario(new SunDeath(butWorld)); 74 | 75 | 76 | 77 | if(minecraft18) 78 | { 79 | this.scenerarioManager.registerSenerario(new MathOrStop(butWorld)); 80 | this.scenerarioManager.registerSenerario(new AnvilRain(butWorld)); 81 | this.scenerarioManager.registerSenerario(new LinkedInventories(butWorld)); 82 | } 83 | } 84 | 85 | private CommandMap getCommandMap() 86 | { 87 | try{ 88 | Field commandMapField = Bukkit.getServer().getClass().getDeclaredField("commandMap"); 89 | commandMapField.setAccessible(true); 90 | return (CommandMap) commandMapField.get(Bukkit.getServer()); 91 | } 92 | catch(Exception exception){ 93 | exception.printStackTrace(); 94 | } 95 | 96 | return null; 97 | } 98 | 99 | private void registerCommands() 100 | { 101 | CommandMap commandMap = this.getCommandMap(); 102 | if(commandMap == null) 103 | { 104 | for(int i = 0; i < 20; i++) 105 | Bukkit.broadcastMessage(""); 106 | 107 | for(int i = 0; i < 20; i++) 108 | { 109 | Bukkit.broadcastMessage(" FUCK, I can't get access to the commandMap"); 110 | Bukkit.broadcastMessage(""); 111 | Bukkit.broadcastMessage(""); 112 | } 113 | return; 114 | } 115 | 116 | MinecraftButCommand minecraftButCMD = new MinecraftButCommand(this.scenerarioManager); 117 | commandMap.register(minecraftButCMD.getName(), minecraftButCMD); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commands/MinecraftButCommand.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commands; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | import java.util.Iterator; 6 | import java.util.List; 7 | import java.util.stream.Collectors; 8 | 9 | import org.bukkit.Bukkit; 10 | import org.bukkit.World; 11 | import org.bukkit.command.Command; 12 | import org.bukkit.command.CommandSender; 13 | import org.bukkit.entity.Player; 14 | import org.bukkit.util.StringUtil; 15 | 16 | import com.google.common.collect.ImmutableList; 17 | 18 | import games.bevs.minecraftbut.MinecraftButPlugin; 19 | import games.bevs.minecraftbut.commons.utils.CC; 20 | import games.bevs.minecraftbut.gui.SenerarioMenu; 21 | import games.bevs.minecraftbut.senerario.ScenerarioManager; 22 | import games.bevs.minecraftbut.senerario.Senerario; 23 | 24 | public class MinecraftButCommand extends Command 25 | { 26 | public static final String ROOT_PERMISSION = "minecraftbut.command.minecraftbut"; 27 | 28 | private static List SENERARIOS = null; 29 | 30 | private SenerarioMenu senerarioMenu = new SenerarioMenu(CC.b + "Senerario"); 31 | 32 | private ScenerarioManager scenerarioManager; 33 | 34 | public MinecraftButCommand(ScenerarioManager scenerarioManager) { 35 | super("MinecraftBut", 36 | "Pops up with the gui to edit the set up", 37 | "/MinecraftBut", Arrays.asList("mb")); 38 | 39 | this.scenerarioManager = scenerarioManager; 40 | 41 | Bukkit.getPluginManager().registerEvents(senerarioMenu, MinecraftButPlugin.getPlugin()); 42 | 43 | ArrayList scenerariosOut = new ArrayList<>(); 44 | 45 | 46 | Iterator senerarios = MinecraftButPlugin.getPlugin().getScenerarioManager().getSenerarios().values().iterator(); 47 | while(senerarios.hasNext()) 48 | scenerariosOut.add(senerarios.next().getId()); 49 | 50 | SENERARIOS = scenerariosOut; 51 | } 52 | 53 | private void sendSenerarioList(CommandSender sender) 54 | { 55 | sender.sendMessage(CC.aqua + "LIST OF SENERARIOS"); 56 | 57 | Iterator senerarios = MinecraftButPlugin.getPlugin().getScenerarioManager().getSenerarios().values().iterator(); 58 | while(senerarios.hasNext()) 59 | { 60 | Senerario senerario = senerarios.next(); 61 | sender.sendMessage(CC.aqua + senerario.getName() + " [ Id: " + senerario.getId() + " ]"); 62 | } 63 | } 64 | 65 | public void listCredits(CommandSender sender) 66 | { 67 | sender.sendMessage(CC.green + "Sprock : https://www.youtube.com/channel/UCQlwZZLg3YZb5RYboR94jPQ"); 68 | sender.sendMessage(CC.green + "GeorgeNotFound : https://www.youtube.com/user/GeorgeeeHDPlays"); 69 | sender.sendMessage(CC.green + "BadBoyHalo : https://www.youtube.com/user/thesaintsofgames"); 70 | sender.sendMessage(CC.green + "Dream : https://www.youtube.com/user/DreamTraps"); 71 | sender.sendMessage(CC.green + "Skeppy : https://www.youtube.com/channel/UCzMjRlKVO9XIqH_crIFpi6w"); 72 | sender.sendMessage(CC.green + "WilburSoot : https://www.youtube.com/channel/UC1n_PfsVqxllCcnMPlxBIjw"); 73 | sender.sendMessage(CC.green + "CallMeCarson : https://www.youtube.com/user/TheBlueCrewPros"); 74 | 75 | } 76 | 77 | @Override 78 | public boolean execute(CommandSender sender, String cmd, String[] args) 79 | { 80 | if(!sender.hasPermission(ROOT_PERMISSION)) 81 | { 82 | sender.sendMessage(CC.red + "You do not have the permission " + ROOT_PERMISSION); 83 | return false; 84 | } 85 | 86 | if(args.length == 1) 87 | { 88 | if(args[0].equalsIgnoreCase("list") || args[0].equalsIgnoreCase("l")) 89 | { 90 | sendSenerarioList(sender); 91 | return true; 92 | } 93 | 94 | if(args[0].equalsIgnoreCase("credit") || args[0].equalsIgnoreCase("credits") || args[0].equalsIgnoreCase("c")) 95 | { 96 | this.listCredits(sender); 97 | return true; 98 | } 99 | 100 | if(args[0].equalsIgnoreCase("helpall") || args[0].equalsIgnoreCase("ha")) 101 | { 102 | Iterator senerarios = MinecraftButPlugin.getPlugin().getScenerarioManager().getSenerarios().values().iterator(); 103 | while(senerarios.hasNext()) 104 | { 105 | Senerario senerario = senerarios.next(); 106 | senerario.help(sender); 107 | } 108 | return true; 109 | } 110 | 111 | if(args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("h")) 112 | { 113 | sender.sendMessage(CC.aqua + "/MinecraftBut list - Will list all Senerario"); 114 | sender.sendMessage(CC.aqua + "/MinecraftBut credit - List creators of each idea"); 115 | sender.sendMessage(CC.aqua + "/MinecraftBut help - Helps with top level commands"); 116 | sender.sendMessage(CC.aqua + "/MinecraftBut helpall - Will tell you all Senerario configs"); 117 | sender.sendMessage(CC.aqua + "/MinecraftBut Senerario - Allows you to config a Senerario"); 118 | sender.sendMessage(CC.aqua + "/MinecraftBut World - Set the world that is currently effect"); 119 | sender.sendMessage(CC.aqua + "You can use 'Mb' as shorthand for 'MinecraftBut'"); 120 | sender.sendMessage(CC.aqua + "You can use 's' as shorthand for 'Senerario'"); 121 | return true; 122 | } 123 | } 124 | if(args.length >= 2) 125 | { 126 | if(args[0].equalsIgnoreCase("changeworld") || args[0].equalsIgnoreCase("cw")) 127 | { 128 | String worldName = args[1]; 129 | World world = Bukkit.getWorld(worldName); 130 | if(world == null) 131 | { 132 | Bukkit.getWorlds().forEach( optionWorld -> sender.sendMessage("World Option: " + optionWorld.getName())); 133 | sender.sendMessage(CC.red + "This is not a world!"); 134 | return false; 135 | } 136 | 137 | MinecraftButPlugin.getPlugin().getButWorld().setWorld(world); 138 | sender.sendMessage(CC.green + "MinecraftBut ] World set to " + world.getName()); 139 | } 140 | 141 | if(args[0].equalsIgnoreCase("Senerario") || args[0].equalsIgnoreCase("s")) 142 | { 143 | String senerarioId = args[1]; 144 | Senerario senerario = this.scenerarioManager.getSenerario(senerarioId); 145 | if(senerario == null) 146 | { 147 | this.sendSenerarioList(sender); 148 | sender.sendMessage(CC.red + "senerario not found!"); 149 | return false; 150 | } 151 | 152 | return senerario.handleCommand(sender, args); 153 | } 154 | } else { 155 | if(sender instanceof Player) 156 | { 157 | senerarioMenu.open((Player) sender); 158 | return true; 159 | } 160 | } 161 | 162 | return false; 163 | } 164 | 165 | //Command will only be ran once in a while so speed doesn't matter 166 | @Override 167 | public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { 168 | if (args.length == 2) { 169 | return StringUtil.copyPartialMatches(args[1], SENERARIOS, new ArrayList(SENERARIOS.size())); 170 | } 171 | 172 | if (args.length == 3) { 173 | //Get scene 174 | String scene = args[1]; 175 | Senerario senerario = this.scenerarioManager.getSenerario(scene); 176 | if(senerario != null) 177 | { 178 | List options = senerario.getOptionalFields().stream().map(field -> field.getName()).collect(Collectors.toList()); 179 | return StringUtil.copyPartialMatches(args[2], options, new ArrayList(options.size())); 180 | } 181 | } 182 | return ImmutableList.of(); 183 | } 184 | 185 | } 186 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/Console.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons; 2 | 3 | import org.bukkit.Bukkit; 4 | 5 | import games.bevs.minecraftbut.commons.utils.CC; 6 | 7 | public class Console { 8 | 9 | public static void log(String message) 10 | { 11 | Bukkit.broadcastMessage(CC.iGray + "[MinecraftBut]" + message); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/FallingBlockUtils.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons; 2 | 3 | import java.lang.reflect.InvocationTargetException; 4 | import java.lang.reflect.Method; 5 | 6 | import org.bukkit.Material; 7 | import org.bukkit.Sound; 8 | import org.bukkit.entity.FallingBlock; 9 | 10 | public class FallingBlockUtils { 11 | 12 | private static Class fallingclazz; 13 | private static Method method; 14 | 15 | static 16 | { 17 | try { 18 | fallingclazz = FallingBlock.class; 19 | method = fallingclazz.getDeclaredMethod("getBlockData"); 20 | } catch (NoSuchMethodException e) { 21 | e.printStackTrace(); 22 | } catch (SecurityException e) { 23 | e.printStackTrace(); 24 | } 25 | } 26 | 27 | //if(fallingBlock.getBlockData().getMaterial() == XMaterial.ANVIL.parseMaterial()) 1.14 28 | //if(fallingBlock.getBlockId() == 145) 1.8 29 | // will need optimizing 30 | public static boolean fallingBlockMatch(FallingBlock fallingBlock, Material material) { 31 | // try { 32 | // Class fallingclazz = fallingBlock.getClass(); 33 | // Method method = fallingclazz.getDeclaredMethod("getBlockData"); 34 | // Object blockData = method.invoke(fallingBlock); 35 | // Class blockDataClazz = blockData.getClass(); 36 | // Method method2 = blockDataClazz.getDeclaredMethod("getMaterial"); 37 | // Material fallingMaterial = (Material) method2.invoke(blockData); 38 | // return fallingMaterial == material; 39 | // } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | SecurityException e) { 40 | // e.printStackTrace(); 41 | return fallingBlock.getBlockId() == material.getId(); 42 | // } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/Sounds.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons; 2 | 3 | import org.bukkit.Sound; 4 | 5 | public enum Sounds { 6 | AMBIENCE_CAVE("AMBIENCE_CAVE", "AMBIENT_CAVE"), 7 | AMBIENCE_RAIN("AMBIENCE_RAIN", "WEATHER_RAIN"), 8 | AMBIENCE_THUNDER("AMBIENCE_THUNDER", "ENTITY_LIGHTNING_THUNDER"), 9 | ANVIL_BREAK("ANVIL_BREAK", "BLOCK_ANVIL_BREAK"), 10 | ANVIL_LAND("ANVIL_LAND", "BLOCK_ANVIL_LAND"), 11 | ANVIL_USE("ANVIL_USE", "BLOCK_ANVIL_USE"), 12 | ARROW_HIT("ARROW_HIT", "ENTITY_ARROW_HIT"), 13 | BURP("BURP", "ENTITY_PLAYER_BURP"), 14 | CHEST_CLOSE("CHEST_CLOSE", "ENTITY_CHEST_CLOSE"), 15 | CHEST_OPEN("CHEST_OPEN", "ENTITY_CHEST_OPEN"), 16 | CLICK("CLICK", "UI_BUTTON_CLICK"), 17 | DOOR_CLOSE("DOOR_CLOSE", "BLOCK_WOODEN_DOOR_CLOSE"), 18 | DOOR_OPEN("DOOR_OPEN", "BLOCK_WOODEN_DOOR_OPEN"), 19 | DRINK("DRINK", "ENTITY_GENERIC_DRINK"), 20 | EAT("EAT", "ENTITY_GENERIC_EAT"), 21 | EXPLODE("EXPLODE", "ENTITY_GENERIC_EXPLODE"), 22 | FALL_BIG("FALL_BIG", "ENTITY_GENERIC_BIG_FALL"), 23 | FALL_SMALL("FALL_SMALL", "ENTITY_GENERIC_SMALL_FALL"), 24 | FIRE("FIRE", "BLOCK_FIRE_AMBIENT"), 25 | FIRE_IGNITE("FIRE_IGNITE", "ITEM_FLINTANDSTEEL_USE"), 26 | FIZZ("FIZZ", "BLOCK_FIRE_EXTINGUISH"), 27 | FUSE("FUSE", "ENTITY_TNT_PRIMED"), 28 | GLASS("GLASS", "BLOCK_GLASS_BREAK"), 29 | HURT_FLESH("HURT_FLESH", "ENTITY_PLAYER_HURT"), 30 | ITEM_BREAK("ITEM_BREAK", "ENTITY_ITEM_BREAK"), 31 | ITEM_PICKUP("ITEM_PICKUP", "ENTITY_ITEM_PICKUP"), 32 | LAVA("LAVA", "BLOCK_LAVA_AMBIENT"), 33 | LAVA_POP("LAVA_POP", "BLOCK_LAVA_POP"), 34 | LEVEL_UP("LEVEL_UP", "ENTITY_PLAYER_LEVELUP"), 35 | MINECART_BASE("MINECART_BASE", "ENTITY_MINECART_RIDING"), 36 | MINECART_INSIDE("MINECART_INSIDE", "ENTITY_MINECART_RIDING"), 37 | NOTE_BASS("NOTE_BASS", "BLOCK_NOTE_BASS"), 38 | NOTE_PIANO("NOTE_PIANO", "BLOCK_NOTE_HARP"), 39 | NOTE_BASS_DRUM("NOTE_BASS_DRUM", "BLOCK_NOTE_BASEDRUM"), 40 | NOTE_STICKS("NOTE_STICKS", "BLOCK_NOTE_HAT"), 41 | NOTE_BASS_GUITAR("NOTE_BASS_GUITAR", "BLOCK_NOTE_BASS"), 42 | NOTE_SNARE_DRUM("NOTE_SNARE_DRUM", "BLOCK_NOTE_SNARE"), 43 | NOTE_PLING("NOTE_PLING", "BLOCK_NOTE_PLING"), 44 | ORB_PICKUP("ORB_PICKUP", "ENTITY_EXPERIENCE_ORB_PICKUP"), 45 | PISTON_EXTEND("PISTON_EXTEND", "BLOCK_PISTON_EXTEND"), 46 | PISTON_RETRACT("PISTON_RETRACT", "BLOCK_PISTON_CONTRACT"), 47 | PORTAL("PORTAL", "BLOCK_PORTAL_AMBIENT"), 48 | PORTAL_TRAVEL("PORTAL_TRAVEL", "BLOCK_PORTAL_TRAVEL"), 49 | PORTAL_TRIGGER("PORTAL_TRIGGER", "BLOCK_PORTAL_TRIGGER"), 50 | SHOOT_ARROW("SHOOT_ARROW", "ENTITY_ARROW_SHOOT"), 51 | SPLASH("SPLASH", "ENTITY_GENERIC_SPLASH"), 52 | SPLASH2("SPLASH2", "ENTITY_BOBBER_SPLASH"), 53 | STEP_GRASS("STEP_GRASS", "BLOCK_GRASS_STEP"), 54 | STEP_GRAVEL("STEP_GRAVEL", "BLOCK_GRAVEL_STEP"), 55 | STEP_LADDER("STEP_LADDER", "BLOCK_LADDER_STEP"), 56 | STEP_SAND("STEP_SAND", "BLOCK_SAND_STEP"), 57 | STEP_SNOW("STEP_SNOW", "BLOCK_SNOW_STEP"), 58 | STEP_STONE("STEP_STONE", "BLOCK_STONE_STEP"), 59 | STEP_WOOD("STEP_WOOD", "BLOCK_WOOD_STEP"), 60 | STEP_WOOL("STEP_WOOL", "BLOCK_CLOTH_STEP"), 61 | SWIM("SWIM", "ENTITY_GENERIC_SWIM"), 62 | WATER("WATER", "BLOCK_WATER_AMBIENT"), 63 | WOOD_CLICK("WOOD_CLICK", "BLOCK_WOOD_BUTTON_CLICK_ON"), 64 | BAT_DEATH("BAT_DEATH", "ENTITY_BAT_DEATH"), 65 | BAT_HURT("BAT_HURT", "ENTITY_BAT_HURT"), 66 | BAT_IDLE("BAT_IDLE", "ENTITY_BAT_AMBIENT"), 67 | BAT_LOOP("BAT_LOOP", "ENTITY_BAT_LOOP"), 68 | BAT_TAKEOFF("BAT_TAKEOFF", "ENTITY_BAT_TAKEOFF"), 69 | BLAZE_BREATH("BLAZE_BREATH", "ENTITY_BLAZE_AMBIENT"), 70 | BLAZE_DEATH("BLAZE_DEATH", "ENTITY_BLAZE_DEATH"), 71 | BLAZE_HIT("BLAZE_HIT", "ENTITY_BLAZE_HURT"), 72 | CAT_HISS("CAT_HISS", "ENTITY_CAT_HISS"), 73 | CAT_HIT("CAT_HIT", "ENTITY_CAT_HURT"), 74 | CAT_MEOW("CAT_MEOW", "ENTITY_CAT_AMBIENT"), 75 | CAT_PURR("CAT_PURR", "ENTITY_CAT_PURR"), 76 | CAT_PURREOW("CAT_PURREOW", "ENTITY_CAT_PURREOW"), 77 | CHICKEN_IDLE("CHICKEN_IDLE", "ENTITY_CHICKEN_AMBIENT"), 78 | CHICKEN_HURT("CHICKEN_HURT", "ENTITY_CHICKEN_HURT"), 79 | CHICKEN_EGG_POP("CHICKEN_EGG_POP", "ENTITY_CHICKEN_EGG"), 80 | CHICKEN_WALK("CHICKEN_WALK", "ENTITY_CHICKEN_STEP"), 81 | COW_IDLE("COW_IDLE", "ENTITY_COW_AMBIENT"), 82 | COW_HURT("COW_HURT", "ENTITY_COW_HURT"), 83 | COW_WALK("COW_WALK", "ENTITY_COW_STEP"), 84 | CREEPER_HISS("CREEPER_HISS", "ENTITY_CREEPER_PRIMED"), 85 | CREEPER_DEATH("CREEPER_DEATH", "ENTITY_CREEPER_DEATH"), 86 | ENDERDRAGON_DEATH("ENDERDRAGON_DEATH", "ENTITY_ENDERDRAGON_DEATH"), 87 | ENDERDRAGON_GROWL("ENDERDRAGON_GROWL", "ENTITY_ENDERDRAGON_GROWL"), 88 | ENDERDRAGON_HIT("ENDERDRAGON_HIT", "ENTITY_ENDERDRAGON_HURT"), 89 | ENDERDRAGON_WINGS("ENDERDRAGON_WINGS", "ENTITY_ENDERDRAGON_FLAP"), 90 | ENDERMAN_DEATH("ENDERMAN_DEATH", "ENTITY_ENDERMEN_DEATH"), 91 | ENDERMAN_HIT("ENDERMAN_HIT", "ENTITY_ENDERMEN_HURT"), 92 | ENDERMAN_IDLE("ENDERMAN_IDLE", "ENTITY_ENDERMEN_AMBIENT"), 93 | ENDERMAN_TELEPORT("ENDERMAN_TELEPORT", "ENTITY_ENDERMEN_TELEPORT"), 94 | ENDERMAN_SCREAM("ENDERMAN_SCREAM", "ENTITY_ENDERMEN_SCREAM"), 95 | ENDERMAN_STARE("ENDERMAN_STARE", "ENTITY_ENDERMEN_STARE"), 96 | GHAST_SCREAM("GHAST_SCREAM", "ENTITY_GHAST_SCREAM"), 97 | GHAST_SCREAM2("GHAST_SCREAM2", "ENTITY_GHAST_HURT"), 98 | GHAST_CHARGE("GHAST_CHARGE", "ENTITY_GHAST_WARN"), 99 | GHAST_DEATH("GHAST_DEATH", "ENTITY_GHAST_DEATH"), 100 | GHAST_FIREBALL("GHAST_FIREBALL", "ENTITY_GHAST_SHOOT"), 101 | GHAST_MOAN("GHAST_MOAN", "ENTITY_GHAST_AMBIENT"), 102 | IRONGOLEM_DEATH("IRONGOLEM_DEATH", "ENTITY_IRONGOLEM_DEATH"), 103 | IRONGOLEM_HIT("IRONGOLEM_HIT", "ENTITY_IRONGOLEM_HURT"), 104 | IRONGOLEM_THROW("IRONGOLEM_THROW", "ENTITY_IRONGOLEM_ATTACK"), 105 | IRONGOLEM_WALK("IRONGOLEM_WALK", "ENTITY_IRONGOLEM_STEP"), 106 | MAGMACUBE_WALK("MAGMACUBE_WALK", "ENTITY_MAGMACUBE_SQUISH"), 107 | MAGMACUBE_WALK2("MAGMACUBE_WALK2", "ENTITY_MAGMACUBE_SQUISH"), 108 | MAGMACUBE_JUMP("MAGMACUBE_JUMP", "ENTITY_MAGMACUBE_JUMP"), 109 | PIG_IDLE("PIG_IDLE", "ENTITY_PIG_AMBIENT"), 110 | PIG_DEATH("PIG_DEATH", "ENTITY_PIG_DEATH"), 111 | PIG_WALK("PIG_WALK", "ENTITY_PIG_STEP"), 112 | SHEEP_IDLE("SHEEP_IDLE", "ENTITY_SHEEP_AMBIENT"), 113 | SHEEP_SHEAR("SHEEP_SHEAR", "ENTITY_SHEEP_SHEAR"), 114 | SHEEP_WALK("SHEEP_WALK", "ENTITY_SHEEP_STEP"), 115 | SILVERFISH_HIT("SILVERFISH_HIT", "ENTITY_SILVERFISH_HURT"), 116 | SILVERFISH_KILL("SILVERFISH_KILL", "ENTITY_SILVERFISH_DEATH"), 117 | SILVERFISH_IDLE("SILVERFISH_IDLE", "ENTITY_SILVERFISH_AMBIENT"), 118 | SILVERFISH_WALK("SILVERFISH_WALK", "ENTITY_SILVERFISH_STEP"), 119 | SKELETON_IDLE("SKELETON_IDLE", "ENTITY_SKELETON_AMBIENT"), 120 | SKELETON_DEATH("SKELETON_DEATH", "ENTITY_SKELETON_DEATH"), 121 | SKELETON_HURT("SKELETON_HURT", "ENTITY_SKELETON_HURT"), 122 | SKELETON_WALK("SKELETON_WALK", "ENTITY_SKELETON_STEP"), 123 | SLIME_ATTACK("SLIME_ATTACK", "ENTITY_SLIME_ATTACK"), 124 | SLIME_WALK("SLIME_WALK", "ENTITY_SLIME_JUMP"), 125 | SLIME_WALK2("SLIME_WALK2", "ENTITY_SLIME_SQUISH"), 126 | SPIDER_IDLE("SPIDER_IDLE", "ENTITY_SPIDER_AMBIENT"), 127 | SPIDER_DEATH("SPIDER_DEATH", "ENTITY_SPIDER_DEATH"), 128 | SPIDER_WALK("SPIDER_WALK", "ENTITY_SPIDER_STEP"), 129 | WITHER_DEATH("WITHER_DEATH", "ENTITY_WITHER_DEATH"), 130 | WITHER_HURT("WITHER_HURT", "ENTITY_WITHER_HURT"), 131 | WITHER_IDLE("WITHER_IDLE", "ENTITY_WITHER_AMBIENT"), 132 | WITHER_SHOOT("WITHER_SHOOT", "ENTITY_WITHER_SHOOT"), 133 | WITHER_SPAWN("WITHER_SPAWN", "ENTITY_WITHER_SPAWN"), 134 | WOLF_BARK("WOLF_BARK", "ENTITY_WOLF_AMBIENT"), 135 | WOLF_DEATH("WOLF_DEATH", "ENTITY_WOLF_DEATH"), 136 | WOLF_GROWL("WOLF_GROWL", "ENTITY_WOLF_GROWL"), 137 | WOLF_HOWL("WOLF_HOWL", "ENTITY_WOLF_HOWL"), 138 | WOLF_HURT("WOLF_HURT", "ENTITY_WOLF_HURT"), 139 | WOLF_PANT("WOLF_PANT", "ENTITY_WOLF_PANT"), 140 | WOLF_SHAKE("WOLF_SHAKE", "ENTITY_WOLF_SHAKE"), 141 | WOLF_WALK("WOLF_WALK", "ENTITY_WOLF_STEP"), 142 | WOLF_WHINE("WOLF_WHINE", "ENTITY_WOLF_WHINE"), 143 | ZOMBIE_METAL("ZOMBIE_METAL", "ENTITY_ZOMBIE_ATTACK_IRON_DOOR"), 144 | ZOMBIE_WOOD("ZOMBIE_WOOD", "ENTITY_ZOMBIE_ATTACK_DOOR_WOOD"), 145 | ZOMBIE_WOODBREAK("ZOMBIE_WOODBREAK", "ENTITY_ZOMBIE_BREAK_DOOR_WOOD"), 146 | ZOMBIE_IDLE("ZOMBIE_IDLE", "ENTITY_ZOMBIE_AMBIENT"), 147 | ZOMBIE_DEATH("ZOMBIE_DEATH", "ENTITY_ZOMBIE_DEATH"), 148 | ZOMBIE_HURT("ZOMBIE_HURT", "ENTITY_ZOMBIE_HURT"), 149 | ZOMBIE_INFECT("ZOMBIE_INFECT", "ENTITY_ZOMBIE_INFECT"), 150 | ZOMBIE_UNFECT("ZOMBIE_UNFECT", "ENTITY_ZOMBIE_VILLAGER_CONVERTED"), 151 | ZOMBIE_REMEDY("ZOMBIE_REMEDY", "ENTITY_ZOMBIE_VILLAGER_CURE"), 152 | ZOMBIE_WALK("ZOMBIE_WALK", "ENTITY_ZOMBIE_STEP"), 153 | ZOMBIE_PIG_IDLE("ZOMBIE_PIG_IDLE", "ENTITY_ZOMBIE_PIG_AMBIENT"), 154 | ZOMBIE_PIG_ANGRY("ZOMBIE_PIG_ANGRY", "ENTITY_ZOMBIE_PIG_ANGRY"), 155 | ZOMBIE_PIG_DEATH("ZOMBIE_PIG_DEATH", "ENTITY_ZOMBIE_PIG_DEATH"), 156 | ZOMBIE_PIG_HURT("ZOMBIE_PIG_HURT", "ENTITY_ZOMBIE_PIG_HURT"), 157 | DIG_WOOL("DIG_WOOL", "BLOCK_CLOTH_BREAK"), 158 | DIG_GRASS("DIG_GRASS", "BLOCK_GRASS_BREAK"), 159 | DIG_GRAVEL("DIG_GRAVEL", "BLOCK_GRAVEL_BREAK"), 160 | DIG_SAND("DIG_SAND", "BLOCK_SAND_BREAK"), 161 | DIG_SNOW("DIG_SNOW", "BLOCK_SNOW_BREAK"), 162 | DIG_STONE("DIG_STONE", "BLOCK_STONE_BREAK"), 163 | DIG_WOOD("DIG_WOOD", "BLOCK_WOOD_BREAK"), 164 | FIREWORK_BLAST("FIREWORK_BLAST", "ENTITY_FIREWORK_BLAST"), 165 | FIREWORK_BLAST2("FIREWORK_BLAST2", "ENTITY_FIREWORK_BLAST_FAR"), 166 | FIREWORK_LARGE_BLAST("FIREWORK_LARGE_BLAST", "ENTITY_FIREWORK_LARGE_BLAST"), 167 | FIREWORK_LARGE_BLAST2("FIREWORK_LARGE_BLAST2", "ENTITY_FIREWORK_LARGE_BLAST_FAR"), 168 | FIREWORK_TWINKLE("FIREWORK_TWINKLE", "ENTITY_FIREWORK_TWINKLE"), 169 | FIREWORK_TWINKLE2("FIREWORK_TWINKLE2", "ENTITY_FIREWORK_TWINKLE_FAR"), 170 | FIREWORK_LAUNCH("FIREWORK_LAUNCH", "ENTITY_FIREWORK_LAUNCH"), 171 | SUCCESSFUL_HIT("SUCCESSFUL_HIT", "ENTITY_PLAYER_ATTACK_STRONG"), 172 | HORSE_ANGRY("HORSE_ANGRY", "ENTITY_HORSE_ANGRY"), 173 | HORSE_ARMOR("HORSE_ARMOR", "ENTITY_HORSE_ARMOR"), 174 | HORSE_BREATHE("HORSE_BREATHE", "ENTITY_HORSE_BREATHE"), 175 | HORSE_DEATH("HORSE_DEATH", "ENTITY_HORSE_DEATH"), 176 | HORSE_GALLOP("HORSE_GALLOP", "ENTITY_HORSE_GALLOP"), 177 | HORSE_HIT("HORSE_HIT", "ENTITY_HORSE_HURT"), 178 | HORSE_IDLE("HORSE_IDLE", "ENTITY_HORSE_AMBIENT"), 179 | HORSE_JUMP("HORSE_JUMP", "ENTITY_HORSE_JUMP"), 180 | HORSE_LAND("HORSE_LAND", "ENTITY_HORSE_LAND"), 181 | HORSE_SADDLE("HORSE_SADDLE", "ENTITY_HORSE_SADDLE"), 182 | HORSE_SOFT("HORSE_SOFT", "ENTITY_HORSE_STEP"), 183 | HORSE_WOOD("HORSE_WOOD", "ENTITY_HORSE_STEP_WOOD"), 184 | DONKEY_ANGRY("DONKEY_ANGRY", "ENTITY_DONKEY_ANGRY"), 185 | DONKEY_DEATH("DONKEY_DEATH", "ENTITY_DONKEY_DEATH"), 186 | DONKEY_HIT("DONKEY_HIT", "ENTITY_DONKEY_HURT"), 187 | DONKEY_IDLE("DONKEY_IDLE", "ENTITY_DONKEY_AMBIENT"), 188 | HORSE_SKELETON_DEATH("HORSE_SKELETON_DEATH", "ENTITY_SKELETON_HORSE_DEATH"), 189 | HORSE_SKELETON_HIT("HORSE_SKELETON_HIT", "ENTITY_SKELETON_HORSE_HURT"), 190 | HORSE_SKELETON_IDLE("HORSE_SKELETON_IDLE", "ENTITY_SKELETON_HORSE_AMBIENT"), 191 | HORSE_ZOMBIE_DEATH("HORSE_ZOMBIE_DEATH", "ENTITY_ZOMBIE_HORSE_DEATH"), 192 | HORSE_ZOMBIE_HIT("HORSE_ZOMBIE_HIT", "ENTITY_ZOMBIE_HORSE_HURT"), 193 | HORSE_ZOMBIE_IDLE("HORSE_ZOMBIE_IDLE", "ENTITY_ZOMBIE_HORSE_AMBIENT"), 194 | VILLAGER_DEATH("VILLAGER_DEATH", "ENTITY_VILLAGER_DEATH"), 195 | VILLAGER_HAGGLE("VILLAGER_HAGGLE", "ENTITY_VILLAGER_TRADING"), 196 | VILLAGER_HIT("VILLAGER_HIT", "ENTITY_VILLAGER_HURT"), 197 | VILLAGER_IDLE("VILLAGER_IDLE", "ENTITY_VILLAGER_AMBIENT"), 198 | VILLAGER_NO("VILLAGER_NO", "ENTITY_VILLAGER_NO"), 199 | VILLAGER_YES("VILLAGER_YES", "ENTITY_VILLAGER_YES"); 200 | 201 | private String pre19sound; 202 | private String post19sound; 203 | private Sound resolvedSound = null; 204 | 205 | Sounds(String pre19sound, String post19sound) { 206 | this.pre19sound = pre19sound; 207 | this.post19sound = post19sound; 208 | } 209 | 210 | public Sound bukkitSound() { 211 | if (resolvedSound != null) return resolvedSound; 212 | 213 | try { 214 | return resolvedSound = Sound.valueOf(post19sound); 215 | } catch (IllegalArgumentException e) { 216 | //Try 1.8 sound 217 | return resolvedSound = Sound.valueOf(pre19sound); 218 | } 219 | } 220 | } -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/TabUtils.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.Field; 5 | 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.ChatColor; 8 | import org.bukkit.entity.Player; 9 | 10 | /** 11 | * Modified from 12 | * https://www.spigotmc.org/threads/ichatbasecomponent-get-current-header-and-footer.352879/ 13 | * Note: speeds don't matter to much as this is only used for a few players during a video 14 | * @author Toldi 15 | */ 16 | public class TabUtils { 17 | public static void sendTab(Player player, String header, String footer) { 18 | header = ChatColor.translateAlternateColorCodes('&', header); 19 | footer = ChatColor.translateAlternateColorCodes('&', footer); 20 | 21 | String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; 22 | 23 | try { 24 | Object tabHeader = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0] 25 | .getMethod("a", new Class[] { String.class }) 26 | .invoke(null, new Object[] { "{\"text\":\"" + header + "\"}" }); 27 | Object tabFooter = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0] 28 | .getMethod("a", new Class[] { String.class }) 29 | .invoke(null, new Object[] { "{\"text\":\"" + footer + "\"}" }); 30 | Constructor titleConstructor = getNMSClass("PacketPlayOutPlayerListHeaderFooter") 31 | .getConstructor(new Class[0]); 32 | Object packet = titleConstructor.newInstance(new Object[0]); 33 | Field aField = null; 34 | Field bField = null; 35 | if (version.equals("v1_14_R1") || version.equals("v1_13_R2")) { 36 | aField = packet.getClass().getDeclaredField("header"); 37 | aField.setAccessible(true); 38 | aField.set(packet, tabHeader); 39 | bField = packet.getClass().getDeclaredField("footer"); 40 | } else { 41 | aField = packet.getClass().getDeclaredField("a"); 42 | aField.setAccessible(true); 43 | aField.set(packet, tabHeader); 44 | bField = packet.getClass().getDeclaredField("b"); 45 | } 46 | bField.setAccessible(true); 47 | bField.set(packet, tabFooter); 48 | sendPacket(player, packet); 49 | } catch (Exception e) { 50 | e.printStackTrace(); 51 | } 52 | } 53 | 54 | public static Object getNMSPlayer(Player p) throws Exception { 55 | return p.getClass().getMethod("getHandle", new Class[0]).invoke(p, new Object[0]); 56 | } 57 | 58 | private static Class getNMSClass(String name) { 59 | String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; 60 | try { 61 | return Class.forName("net.minecraft.server." + version + "." + name); 62 | } catch (ClassNotFoundException e) { 63 | e.printStackTrace(); 64 | return null; 65 | } 66 | } 67 | 68 | private static void sendPacket(Player player, Object packet) { 69 | try { 70 | Object handle = getNMSPlayer(player); 71 | Object playerConnection = handle.getClass().getField("playerConnection").get(handle); 72 | playerConnection.getClass().getMethod("sendPacket", new Class[] { getNMSClass("Packet") }) 73 | .invoke(playerConnection, new Object[] { packet }); 74 | } catch (Exception e) { 75 | e.printStackTrace(); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/XMaterial.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons; 2 | 3 | import java.util.HashMap; 4 | 5 | import org.bukkit.Material; 6 | import org.bukkit.inventory.ItemStack; 7 | 8 | public enum XMaterial { 9 | ACACIA_BOAT(0, "BOAT_ACACIA"), 10 | ACACIA_BUTTON(0, "WOOD_BUTTON"), 11 | ACACIA_DOOR(0, "ACACIA_DOOR","ACACIA_DOOR_ITEM"), 12 | ACACIA_FENCE(0, "ACACIA_FENCE"), 13 | ACACIA_FENCE_GATE(0, "ACACIA_FENCE_GATE"), 14 | ACACIA_LEAVES(0, "LEAVES_2"), 15 | ACACIA_LOG(0, "LOG_2"), 16 | ACACIA_PLANKS(4, "WOOD"), 17 | ACACIA_PRESSURE_PLATE(0, "WOOD_PLATE"), 18 | ACACIA_SAPLING(4, "SAPLING"), 19 | ACACIA_SLAB(4,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 20 | ACACIA_STAIRS(4, "ACACIA_STAIRS"), 21 | ACACIA_TRAPDOOR(0, "TRAP_DOOR"), 22 | ACACIA_WOOD(0, "LOG_2"), 23 | ACTIVATOR_RAIL(0, "ACTIVATOR_RAIL"), 24 | AIR(0, "AIR"), 25 | ALLIUM(2, "RED_ROSE"), 26 | ANDESITE(5, "STONE"), 27 | ANVIL(0, "ANVIL"), 28 | APPLE(0, "APPLE"), 29 | ARMOR_STAND(0, "ARMOR_STAND"), 30 | ARROW(0, "ARROW"), 31 | ATTACHED_MELON_STEM(7, "MELON_STEM"), 32 | ATTACHED_PUMPKIN_STEM(7, "PUMPKIN_STEM"), 33 | AZURE_BLUET(3, "RED_ROSE"), 34 | BAKED_POTATO(0, "BAKED_POTATO"), 35 | BARRIER(0, "BARRIER"), 36 | BAT_SPAWN_EGG(0, "MONSTER_EGG"), 37 | BEACON(0, "BEACON"), 38 | BEDROCK(0, "BEDROCK"), 39 | BEEF(0, "RAW_BEEF"), 40 | BEETROOT(0, "BEETROOT"), 41 | BEETROOTS(0, "BEETROOT", "BEETROOT_BLOCK"), 42 | BEETROOT_SEEDS(0, "BEETROOT_SEEDS"), 43 | BEETROOT_SOUP(0, "BEETROOT_SOUP"), 44 | BIRCH_BOAT(0, "BOAT_BIRCH"), 45 | BIRCH_BUTTON(0, "WOOD_BUTTON"), 46 | BIRCH_DOOR(0, "BIRCH_DOOR", "BIRCH_DOOR_ITEM"), 47 | BIRCH_FENCE(0, "BIRCH_FENCE"), 48 | BIRCH_FENCE_GATE(0, "BIRCH_FENCE_GATE"), 49 | BIRCH_LEAVES(2, "LEAVES"), 50 | BIRCH_LOG(2, "LOG"), 51 | BIRCH_PLANKS(2, "WOOD"), 52 | BIRCH_PRESSURE_PLATE(0, "WOOD_PLATE"), 53 | BIRCH_SAPLING(2, "SAPLING"), 54 | BIRCH_SLAB(2,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 55 | BIRCH_STAIRS(0, "BIRCH_WOOD_STAIRS"), 56 | BIRCH_TRAPDOOR(0, "TRAP_DOOR"), 57 | BIRCH_WOOD(2, "LOG"), 58 | BLACK_BANNER(0, "BANNER", "STANDING_BANNER"), 59 | BLACK_BED(15, "BED", "BED_BLOCK"), 60 | BLACK_CARPET(15, "CARPET"), 61 | BLACK_CONCRETE(15, "CONCRETE"), 62 | BLACK_CONCRETE_POWDER(15, "CONCRETE_POWDER"), 63 | BLACK_GLAZED_TERRACOTTA(0, "BLACK_GLAZED_TERRACOTTA"), 64 | BLACK_SHULKER_BOX(0, "BLACK_SHULKER_BOX"), 65 | BLACK_STAINED_GLASS(15, "STAINED_GLASS"), 66 | BLACK_STAINED_GLASS_PANE(15, "STAINED_GLASS_PANE"), 67 | BLACK_TERRACOTTA(15, "STAINED_CLAY"), 68 | BLACK_WALL_BANNER(0, "WALL_BANNER"), 69 | BLACK_WOOL(15, "WOOL"), 70 | BLAZE_POWDER(0, "BLAZE_POWDER"), 71 | BLAZE_ROD(0, "BLAZE_ROD"), 72 | BLAZE_SPAWN_EGG(0, "MONSTER_EGG"), 73 | BLUE_BANNER(11, "BANNER", "STANDING_BANNER"), 74 | BLUE_BED(4, "BED", "BED_BLOCK"), 75 | BLUE_CARPET(11, "CARPET"), 76 | BLUE_CONCRETE(11, "CONCRETE"), 77 | BLUE_CONCRETE_POWDER(11, "CONCRETE_POWDER"), 78 | BLUE_GLAZED_TERRACOTTA(0, "BLUE_GLAZED_TERRACOTTA"), 79 | BLUE_ICE(0, "PACKED_ICE"), 80 | BLUE_ORCHID(1, "RED_ROSE"), 81 | BLUE_SHULKER_BOX(0, "BLUE_SHULKER_BOX"), 82 | BLUE_STAINED_GLASS(11, "STAINED_GLASS"), 83 | BLUE_STAINED_GLASS_PANE(11, "STAINED_GLASS_PANE"), 84 | BLUE_TERRACOTTA(11, "STAINED_CLAY"), 85 | BLUE_WALL_BANNER(11, "WALL_BANNER"), 86 | BLUE_WOOL(11, "WOOL"), 87 | BONE(0, "BONE"), 88 | BONE_BLOCK(0, "BONE_BLOCK"), 89 | BONE_MEAL(15, "INK_SACK"), 90 | BOOK(0, "BOOK"), 91 | BOOKSHELF(0, "BOOKSHELF"), 92 | BOW(0, "BOW"), 93 | BOWL(0, "BOWL"), 94 | BRAIN_CORAL(0, "STONE"), 95 | BRAIN_CORAL_BLOCK(0, "STONE"), 96 | BRAIN_CORAL_FAN(0, "STONE"), 97 | BREAD(0, "BREAD"), 98 | BREWING_STAND(0, "BREWING_STAND", "BREWING_STAND_ITEM"), 99 | BRICK(0, "CLAY_BRICK"), 100 | BRICKS(0, "BRICK"), 101 | BRICK_SLAB(4, "STEP"), 102 | BRICK_STAIRS(0, "BRICK_STAIRS"), 103 | BROWN_BANNER(3, "BANNER", "STANDING_BANNER"), 104 | BROWN_BED(12, "BED", "BED_BLOCK"), 105 | BROWN_CARPET(12, "CARPET"), 106 | BROWN_CONCRETE(12, "CONCRETE"), 107 | BROWN_CONCRETE_POWDER(12, "CONCRETE_POWDER"), 108 | BROWN_GLAZED_TERRACOTTA(0, "BROWN_GLAZED_TERRACOTTA"), 109 | BROWN_MUSHROOM(0, "BROWN_MUSHROOM"), 110 | BROWN_MUSHROOM_BLOCK(0, "BROWN_MUSHROOM", "HUGE_MUSHROOM_1"), 111 | BROWN_SHULKER_BOX(0, "BROWN_SHULKER_BOX"), 112 | BROWN_STAINED_GLASS(12, "STAINED_GLASS"), 113 | BROWN_STAINED_GLASS_PANE(12, "STAINED_GLASS_PANE"), 114 | BROWN_TERRACOTTA(12, "STAINED_CLAY"), 115 | BROWN_WALL_BANNER(3, "WALL_BANNER"), 116 | BROWN_WOOL(12, "WOOL"), 117 | BUBBLE_COLUMN(0, "STONE"), 118 | BUBBLE_CORAL(0, "STONE"), 119 | BUBBLE_CORAL_BLOCK(0, "STONE"), 120 | BUBBLE_CORAL_FAN(0, "STONE"), 121 | BUCKET(0, "BUCKET"), 122 | CACTUS(0, "CACTUS"), 123 | CACTUS_GREEN(2, "INK_SACK"), 124 | CAKE(0, "CAKE", "CAKE_BLOCK"), 125 | CARROT(0, "CARROT_ITEM"), 126 | CARROTS(0, "CARROT"), 127 | CARROT_ON_A_STICK(0, "CARROT_STICK"), 128 | CARVED_PUMPKIN(0, "PUMPKIN"), 129 | CAULDRON(0, "CAULDRON", "CAULDRON_ITEM"), 130 | CAVE_AIR(0, "AIR"), 131 | CAVE_SPIDER_SPAWN_EGG(0, "MONSTER_EGG"), 132 | CHAINMAIL_BOOTS(0, "CHAINMAIL_BOOTS"), 133 | CHAINMAIL_CHESTPLATE(0, "CHAINMAIL_CHESTPLATE"), 134 | CHAINMAIL_HELMET(0, "CHAINMAIL_HELMET"), 135 | CHAINMAIL_LEGGINGS(0, "CHAINMAIL_LEGGINGS"), 136 | CHAIN_COMMAND_BLOCK(0, "COMMAND_CHAIN"), 137 | CHARCOAL(1, "COAL"), 138 | CHEST(0, "CHEST", "LOCKED_CHEST"), 139 | CHEST_MINECART(0, "STORAGE_MINECART"), 140 | CHICKEN(0, "RAW_CHICKEN"), 141 | CHICKEN_SPAWN_EGG(0, "MONSTER_EGG"), 142 | CHIPPED_ANVIL(1, "ANVIL"), 143 | CHISELED_QUARTZ_BLOCK(1, "QUARTZ_BLOCK"), 144 | CHISELED_RED_SANDSTONE(1, "RED_SANDSTONE"), 145 | CHISELED_SANDSTONE(1, "SANDSTONE"), 146 | CHISELED_STONE_BRICKS(3, "SMOOTH_BRICK"), 147 | CHORUS_FLOWER(0, "CHORUS_FLOWER"), 148 | CHORUS_FRUIT(0, "CHORUS_FRUIT"), 149 | CHORUS_PLANT(0, "CHORUS_PLANT"), 150 | CLAY(0, "CLAY"), 151 | CLAY_BALL(0, "CLAY_BALL"), 152 | CLOCK(0, "WATCH"), 153 | COAL(0, "COAL"), 154 | COAL_BLOCK(0, "COAL_BLOCK"), 155 | COAL_ORE(0, "COAL_ORE"), 156 | COARSE_DIRT(1, "DIRT"), 157 | COBBLESTONE(0, "COBBLESTONE"), 158 | COBBLESTONE_SLAB(3, "STEP"), 159 | COBBLESTONE_STAIRS(0, "COBBLESTONE_STAIRS"), 160 | COBBLESTONE_WALL(0, "COBBLE_WALL"), 161 | COBWEB(0, "WEB"), 162 | COCOA(0, "COCOA"), 163 | COCOA_BEANS(3, "INK_SACK"), 164 | COD(0, "RAW_FISH"), 165 | COD_BUCKET(0, "BUCKET"), 166 | COD_SPAWN_EGG(0, "MONSTER_EGG"), 167 | COMMAND_BLOCK(0, "COMMAND"), 168 | COMMAND_BLOCK_MINECART(0, "COMMAND_MINECART"), 169 | COMPARATOR(0, "REDSTONE_COMPARATOR", "REDSTONE_COMPARATOR_ON", "REDSTONE_COMPARATOR_OFF"), 170 | COMPASS(0, "COMPASS"), 171 | CONDUIT(0, "STONE"), 172 | COOKED_BEEF(0, "COOKED_BEEF"), 173 | COOKED_CHICKEN(0, "COOKED_CHICKEN"), 174 | COOKED_COD(0, "COOKED_FISH"), 175 | COOKED_MUTTON(0, "COOKED_MUTTON"), 176 | COOKED_PORKCHOP(0, "GRILLED_PORK"), 177 | COOKED_RABBIT(0, "COOKED_RABBIT"), 178 | COOKED_SALMON(1, "COOKED_FISH"), 179 | COOKIE(0, "COOKIE"), 180 | COW_SPAWN_EGG(0, "MONSTER_EGG"), 181 | CRACKED_STONE_BRICKS(2, "SMOOTH_BRICK"), 182 | CRAFTING_TABLE(0, "WORKBENCH"), 183 | CREEPER_HEAD(0, "SKULL","SKULL_ITEM"), 184 | CREEPER_SPAWN_EGG(0, "MONSTER_EGG"), 185 | CREEPER_WALL_HEAD(0, "SKULL","SKULL_ITEM"), 186 | CUT_RED_SANDSTONE(0, "STONE"), 187 | CUT_SANDSTONE(0, "STONE"), 188 | CYAN_BANNER(6, "BANNER", "STANDING_BANNER"), 189 | CYAN_BED(9, "BED", "BED_BLOCK"), 190 | CYAN_CARPET(9, "CARPET"), 191 | CYAN_CONCRETE(9, "CONCRETE"), 192 | CYAN_CONCRETE_POWDER(9, "CONCRETE_POWDER"), 193 | CYAN_DYE(6, "INK_SACK"), 194 | CYAN_GLAZED_TERRACOTTA(0, "CYAN_GLAZED_TERRACOTTA"), 195 | CYAN_SHULKER_BOX(0, "CYAN_SHULKER_BOX"), 196 | CYAN_STAINED_GLASS(9, "STAINED_GLASS"), 197 | CYAN_STAINED_GLASS_PANE(9, "STAINED_GLASS_PANE"), 198 | CYAN_TERRACOTTA(9, "STAINED_CLAY"), 199 | CYAN_WALL_BANNER(0, "WALL_BANNER"), 200 | CYAN_WOOL(9, "WOOL"), 201 | DAMAGED_ANVIL(2, "ANVIL"), 202 | DANDELION(0, "YELLOW_FLOWER"), 203 | DANDELION_YELLOW(11, "INK_SACK"), 204 | DARK_OAK_BOAT(0, "BOAT_DARK_OAK"), 205 | DARK_OAK_BUTTON(0, "WOOD_BUTTON"), 206 | DARK_OAK_DOOR(0, "DARK_OAK_DOOR", "DARK_OAK_DOOR_ITEM"), 207 | DARK_OAK_FENCE(0, "DARK_OAK_FENCE"), 208 | DARK_OAK_FENCE_GATE(0, "DARK_OAK_FENCE_GATE"), 209 | DARK_OAK_LEAVES(1, "LEAVES_2"), 210 | DARK_OAK_LOG(1, "LOG_2"), 211 | DARK_OAK_PLANKS(5, "WOOD"), 212 | DARK_OAK_PRESSURE_PLATE(0, "WOOD_PLATE"), 213 | DARK_OAK_SAPLING(5, "SAPLING"), 214 | DARK_OAK_SLAB(0,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 215 | DARK_OAK_STAIRS(0, "DARK_OAK_STAIRS"), 216 | DARK_OAK_TRAPDOOR(0, "TRAP_DOOR"), 217 | DARK_OAK_WOOD(1, "LOG_2"), 218 | DARK_PRISMARINE(2, "PRISMARINE"), 219 | DARK_PRISMARINE_SLAB(0, "STONE"), 220 | DARK_PRISMARINE_STAIRS(0, "STONE"), 221 | DAYLIGHT_DETECTOR(0, "DAYLIGHT_DETECTOR", "DAYLIGHT_DETECTOR_INVERTED"), 222 | DEAD_BRAIN_CORAL_BLOCK(0, "STONE"), 223 | DEAD_BUBBLE_CORAL_BLOCK(0, "STONE"), 224 | DEAD_BUSH(0, "DEAD_BUSH"), 225 | DEAD_FIRE_CORAL_BLOCK(0, "STONE"), 226 | DEAD_HORN_CORAL_BLOCK(0, "STONE"), 227 | DEAD_TUBE_CORAL_BLOCK(0, "STONE"), 228 | DEBUG_STICK(0, "STICK"), 229 | DETECTOR_RAIL(0, "DETECTOR_RAIL"), 230 | DIAMOND(0, "DIAMOND"), 231 | DIAMOND_AXE(0, "DIAMOND_AXE"), 232 | DIAMOND_BLOCK(0, "DIAMOND_BLOCK"), 233 | DIAMOND_BOOTS(0, "DIAMOND_BOOTS"), 234 | DIAMOND_CHESTPLATE(0, "DIAMOND_CHESTPLATE"), 235 | DIAMOND_HELMET(0, "DIAMOND_HELMET"), 236 | DIAMOND_HOE(0, "DIAMOND_HOE"), 237 | DIAMOND_HORSE_ARMOR(0, "DIAMOND_BARDING"), 238 | DIAMOND_LEGGINGS(0, "DIAMOND_LEGGINGS"), 239 | DIAMOND_ORE(0, "DIAMOND_ORE"), 240 | DIAMOND_PICKAXE(0, "DIAMOND_PICKAXE"), 241 | DIAMOND_SHOVEL(0, "DIAMOND_SPADE"), 242 | DIAMOND_SWORD(0, "DIAMOND_SWORD"), 243 | DIORITE(3, "STONE"), 244 | DIRT(0, "DIRT"), 245 | DISPENSER(0, "DISPENSER"), 246 | DOLPHIN_SPAWN_EGG(0, "MONSTER_EGG"), 247 | DONKEY_SPAWN_EGG(0, "MONSTER_EGG"), 248 | DRAGON_BREATH(0, "DRAGONS_BREATH"), 249 | DRAGON_EGG(0, "DRAGON_EGG"), 250 | DRAGON_HEAD(5, "SKULL","SKULL_ITEM"), 251 | DRAGON_WALL_HEAD(0, "SKULL","SKULL_ITEM"), 252 | DRIED_KELP(0, "STONE"), 253 | DRIED_KELP_BLOCK(0, "STONE"), 254 | DROPPER(0, "DROPPER"), 255 | DROWNED_SPAWN_EGG(0, "MONSTER_EGG"), 256 | EGG(0, "EGG"), 257 | ELDER_GUARDIAN_SPAWN_EGG(0, "MONSTER_EGG"), 258 | ELYTRA(0, "ELYTRA"), 259 | EMERALD(0, "EMERALD"), 260 | EMERALD_BLOCK(0, "EMERALD_BLOCK"), 261 | EMERALD_ORE(0, "EMERALD_ORE"), 262 | ENCHANTED_BOOK(0, "ENCHANTED_BOOK"), 263 | ENCHANTED_GOLDEN_APPLE(1, "GOLDEN_APPLE"), 264 | ENCHANTING_TABLE(0, "ENCHANTMENT_TABLE"), 265 | ENDERMAN_SPAWN_EGG(0, "MONSTER_EGG"), 266 | ENDERMITE_SPAWN_EGG(0, "MONSTER_EGG"), 267 | ENDER_CHEST(0, "ENDER_CHEST"), 268 | ENDER_EYE(0, "EYE_OF_ENDER"), 269 | ENDER_PEARL(0, "ENDER_PEARL"), 270 | END_CRYSTAL(0, "END_CRYSTAL"), 271 | END_GATEWAY(0, "END_GATEWAY"), 272 | END_PORTAL(0, "ENDER_PORTAL"), 273 | END_PORTAL_FRAME(0, "ENDER_PORTAL_FRAME"), 274 | END_ROD(0, "END_ROD"), 275 | END_STONE(0, "ENDER_STONE"), 276 | END_STONE_BRICKS(0, "END_BRICKS"), 277 | EVOKER_SPAWN_EGG(0, "MONSTER_EGG"), 278 | EXPERIENCE_BOTTLE(0, "EXP_BOTTLE"), 279 | FARMLAND(0, "SOIL"), 280 | FEATHER(0, "FEATHER"), 281 | FERMENTED_SPIDER_EYE(0, "FERMENTED_SPIDER_EYE"), 282 | FERN(2, "LONG_GRASS"), 283 | FILLED_MAP(0, "MAP"), 284 | FIRE(0, "FIRE"), 285 | FIREWORK_ROCKET(0, "FIREWORK"), 286 | FIREWORK_STAR(0, "FIREWORK_CHARGE"), 287 | FIRE_CHARGE(0, "FIREBALL"), 288 | FIRE_CORAL(0, "STONE"), 289 | FIRE_CORAL_BLOCK(0, "STONE"), 290 | FIRE_CORAL_FAN(0, "STONE"), 291 | FISHING_ROD(0, "FISHING_ROD"), 292 | FLINT(0, "FLINT"), 293 | FLINT_AND_STEEL(0, "FLINT_AND_STEEL"), 294 | FLOWER_POT(0, "FLOWER_POT","FLOWER_POT_ITEM"), 295 | FROSTED_ICE(0, "FROSTED_ICE"), 296 | FURNACE(0, "FURNACE", "BURNING_FURNACE"), 297 | FURNACE_MINECART(0, "POWERED_MINECART"), 298 | GHAST_SPAWN_EGG(0, "MONSTER_EGG"), 299 | GHAST_TEAR(0, "GHAST_TEAR"), 300 | GLASS(0, "GLASS"), 301 | GLASS_BOTTLE(0, "GLASS_BOTTLE"), 302 | GLASS_PANE(0, "THIN_GLASS"), 303 | GLISTERING_MELON_SLICE(0, "SPECKLED_MELON"), 304 | GLOWSTONE(0, "GLOWSTONE"), 305 | GLOWSTONE_DUST(0, "GLOWSTONE_DUST"), 306 | GOLDEN_APPLE(0, "GOLDEN_APPLE"), 307 | GOLDEN_AXE(0, "GOLD_AXE"), 308 | GOLDEN_BOOTS(0, "GOLD_BOOTS"), 309 | GOLDEN_CARROT(0, "GOLDEN_CARROT"), 310 | GOLDEN_CHESTPLATE(0, "GOLD_CHESTPLATE"), 311 | GOLDEN_HELMET(0, "GOLD_HELMET"), 312 | GOLDEN_HOE(0, "GOLD_HOE"), 313 | GOLDEN_HORSE_ARMOR(0, "GOLD_BARDING"), 314 | GOLDEN_LEGGINGS(0, "GOLD_LEGGINGS"), 315 | GOLDEN_PICKAXE(0, "GOLD_PICKAXE"), 316 | GOLDEN_SHOVEL(0, "GOLD_SPADE"), 317 | GOLDEN_SWORD(0, "GOLD_SWORD"), 318 | GOLD_BLOCK(0, "GOLD_BLOCK"), 319 | GOLD_INGOT(0, "GOLD_INGOT"), 320 | GOLD_NUGGET(0, "GOLD_NUGGET"), 321 | GOLD_ORE(0, "GOLD_ORE"), 322 | GRANITE(1, "STONE"), 323 | GRASS(0, "GRASS"), 324 | GRASS_BLOCK(0, "GRASS"), 325 | GRASS_PATH(0, "GRASS_PATH"), 326 | GRAVEL(0, "GRAVEL"), 327 | GRAY_BANNER(8, "BANNER", "STANDING_BANNER"), 328 | GRAY_BED(7, "BED", "BED_BLOCK"), 329 | GRAY_CARPET(7, "CARPET"), 330 | GRAY_CONCRETE(7, "CONCRETE"), 331 | GRAY_CONCRETE_POWDER(7, "CONCRETE_POWDER"), 332 | GRAY_DYE(8, "INK_SACK"), 333 | GRAY_GLAZED_TERRACOTTA(0, "GRAY_GLAZED_TERRACOTTA"), 334 | GRAY_SHULKER_BOX(0, "GRAY_SHULKER_BOX"), 335 | GRAY_STAINED_GLASS(7, "STAINED_GLASS"), 336 | GRAY_STAINED_GLASS_PANE(7, "STAINED_GLASS_PANE"), 337 | GRAY_TERRACOTTA(7, "STAINED_CLAY"), 338 | GRAY_WALL_BANNER(0, "WALL_BANNER"), 339 | GRAY_WOOL(7, "WOOL"), 340 | GREEN_BANNER(2, "BANNER", "STANDING_BANNER"), 341 | GREEN_BED(13, "BED", "BED_BLOCK"), 342 | GREEN_CARPET(13, "CARPET"), 343 | GREEN_CONCRETE(13, "CONCRETE"), 344 | GREEN_CONCRETE_POWDER(13, "CONCRETE_POWDER"), 345 | GREEN_GLAZED_TERRACOTTA(0, "GREEN_GLAZED_TERRACOTTA"), 346 | GREEN_SHULKER_BOX(0, "GREEN_SHULKER_BOX"), 347 | GREEN_STAINED_GLASS(13, "STAINED_GLASS"), 348 | GREEN_STAINED_GLASS_PANE(13, "STAINED_GLASS_PANE"), 349 | GREEN_TERRACOTTA(13, "STAINED_CLAY"), 350 | GREEN_WALL_BANNER(0, "WALL_BANNER"), 351 | GREEN_WOOL(13, "WOOL"), 352 | GUARDIAN_SPAWN_EGG(0, "MONSTER_EGG"), 353 | GUNPOWDER(0, "SULPHUR"), 354 | HAY_BLOCK(0, "HAY_BLOCK"), 355 | HEART_OF_THE_SEA(0, "STONE"), 356 | HEAVY_WEIGHTED_PRESSURE_PLATE(0, "IRON_PLATE"), 357 | HOPPER(0, "HOPPER"), 358 | HOPPER_MINECART(0, "HOPPER_MINECART"), 359 | HORN_CORAL(0, "STONE"), 360 | HORN_CORAL_BLOCK(0, "STONE"), 361 | HORN_CORAL_FAN(0, "STONE"), 362 | HORSE_SPAWN_EGG(0, "MONSTER_EGG"), 363 | HUSK_SPAWN_EGG(0, "MONSTER_EGG"), 364 | ICE(0, "ICE"), 365 | INFESTED_CHISELED_STONE_BRICKS(5, "MONSTER_EGGS"), 366 | INFESTED_COBBLESTONE(1, "MONSTER_EGGS"), 367 | INFESTED_CRACKED_STONE_BRICKS(4, "MONSTER_EGGS"), 368 | INFESTED_MOSSY_STONE_BRICKS(3, "MONSTER_EGGS"), 369 | INFESTED_STONE(0, "MONSTER_EGGS"), 370 | INFESTED_STONE_BRICKS(2, "MONSTER_EGGS"), 371 | INK_SAC(0, "INK_SACK"), 372 | IRON_AXE(0, "IRON_AXE"), 373 | IRON_BARS(0, "IRON_FENCE"), 374 | IRON_BLOCK(0, "IRON_BLOCK"), 375 | IRON_BOOTS(0, "IRON_BOOTS"), 376 | IRON_CHESTPLATE(0, "IRON_CHESTPLATE"), 377 | IRON_DOOR(0, "IRON_DOOR", "IRON_DOOR_BLOCK"), 378 | IRON_HELMET(0, "IRON_HELMET"), 379 | IRON_HOE(0, "IRON_HOE"), 380 | IRON_HORSE_ARMOR(0, "IRON_BARDING"), 381 | IRON_INGOT(0, "IRON_INGOT"), 382 | IRON_LEGGINGS(0, "IRON_LEGGINGS"), 383 | IRON_NUGGET(0, "IRON_NUGGET"), 384 | IRON_ORE(0, "IRON_ORE"), 385 | IRON_PICKAXE(0, "IRON_PICKAXE"), 386 | IRON_SHOVEL(0, "IRON_SPADE"), 387 | IRON_SWORD(0, "IRON_SWORD"), 388 | IRON_TRAPDOOR(0, "IRON_TRAPDOOR"), 389 | ITEM_FRAME(0, "ITEM_FRAME"), 390 | JACK_O_LANTERN(0, "JACK_O_LANTERN"), 391 | JUKEBOX(0, "JUKEBOX"), 392 | JUNGLE_BOAT(0, "BOAT_JUNGLE"), 393 | JUNGLE_BUTTON(0, "WOOD_BUTTON"), 394 | JUNGLE_DOOR(0, "JUNGLE_DOOR", "JUNGLE_DOOR_ITEM"), 395 | JUNGLE_FENCE(0, "JUNGLE_FENCE"), 396 | JUNGLE_FENCE_GATE(0, "JUNGLE_FENCE_GATE"), 397 | JUNGLE_LEAVES(3, "LEAVES"), 398 | JUNGLE_LOG(3, "LOG"), 399 | JUNGLE_PLANKS(3, "WOOD"), 400 | JUNGLE_PRESSURE_PLATE(0, "WOOD_PLATE"), 401 | JUNGLE_SAPLING(3, "SAPLING"), 402 | JUNGLE_SLAB(3,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 403 | JUNGLE_STAIRS(0, "JUNGLE_WOOD_STAIRS"), 404 | JUNGLE_TRAPDOOR(0, "TRAP_DOOR"), 405 | JUNGLE_WOOD(3, "LOG"), 406 | KELP(0, "STONE"), 407 | KELP_PLANT(0, "STONE"), 408 | KNOWLEDGE_BOOK(0, "KNOWLEDGE_BOOK"), 409 | LADDER(0, "LADDER"), 410 | LAPIS_BLOCK(0, "LAPIS_BLOCK"), 411 | LAPIS_LAZULI(4, "INK_SACK"), 412 | LAPIS_ORE(0, "LAPIS_ORE"), 413 | LARGE_FERN(3, "DOUBLE_PLANT"), 414 | LAVA(0, "LAVA", "STATIONARY_LAVA"), 415 | LAVA_BUCKET(0, "LAVA_BUCKET"), 416 | LEAD(0, "LEASH"), 417 | LEATHER(0, "LEATHER"), 418 | LEATHER_BOOTS(0, "LEATHER_BOOTS"), 419 | LEATHER_CHESTPLATE(0, "LEATHER_CHESTPLATE"), 420 | LEATHER_HELMET(0, "LEATHER_HELMET"), 421 | LEATHER_LEGGINGS(0, "LEATHER_LEGGINGS"), 422 | LEVER(0, "LEVER"), 423 | LIGHT_BLUE_BANNER(12, "BANNER", "STANDING_BANNER"), 424 | LIGHT_BLUE_BED(3, "BED", "BED_BLOCK"), 425 | LIGHT_BLUE_CARPET(3, "CARPET"), 426 | LIGHT_BLUE_CONCRETE(3, "CONCRETE"), 427 | LIGHT_BLUE_CONCRETE_POWDER(3, "CONCRETE_POWDER"), 428 | LIGHT_BLUE_DYE(12, "INK_SACK"), 429 | LIGHT_BLUE_GLAZED_TERRACOTTA(0, "LIGHT_BLUE_GLAZED_TERRACOTTA"), 430 | LIGHT_BLUE_SHULKER_BOX(0, "LIGHT_BLUE_SHULKER_BOX"), 431 | LIGHT_BLUE_STAINED_GLASS(3, "STAINED_GLASS"), 432 | LIGHT_BLUE_STAINED_GLASS_PANE(3, "STAINED_GLASS_PANE"), 433 | LIGHT_BLUE_TERRACOTTA(3, "STAINED_CLAY"), 434 | LIGHT_BLUE_WALL_BANNER(0, "BANNER", "STANDING_BANNER"), 435 | LIGHT_BLUE_WOOL(3, "WOOL"), 436 | LIGHT_GRAY_BANNER(7, "BANNER", "STANDING_BANNER"), 437 | LIGHT_GRAY_BED(8, "BED", "BED_BLOCK"), 438 | LIGHT_GRAY_CARPET(8, "CARPET"), 439 | LIGHT_GRAY_CONCRETE(8, "CONCRETE"), 440 | LIGHT_GRAY_CONCRETE_POWDER(8, "CONCRETE_POWDER"), 441 | LIGHT_GRAY_DYE(7, "INK_SACK"), 442 | LIGHT_GRAY_GLAZED_TERRACOTTA(0, "SILVER_GLAZED_TERRACOTTA"), 443 | LIGHT_GRAY_SHULKER_BOX(0, "SILVER_SHULKER_BOX"), 444 | LIGHT_GRAY_STAINED_GLASS(8, "STAINED_GLASS"), 445 | LIGHT_GRAY_STAINED_GLASS_PANE(8, "STAINED_GLASS_PANE"), 446 | LIGHT_GRAY_TERRACOTTA(8, "STAINED_CLAY"), 447 | LIGHT_GRAY_WALL_BANNER(0, "WALL_BANNER"), 448 | LIGHT_GRAY_WOOL(8, "WOOL"), 449 | LIGHT_WEIGHTED_PRESSURE_PLATE(0, "GOLD_PLATE"), 450 | LILAC(1, "DOUBLE_PLANT"), 451 | LILY_PAD(0, "WATER_LILY"), 452 | LIME_BANNER(10, "BANNER", "STANDING_BANNER"), 453 | LIME_BED(5, "BED", "BED_BLOCK"), 454 | LIME_CARPET(5, "CARPET"), 455 | LIME_CONCRETE(5, "CONCRETE"), 456 | LIME_CONCRETE_POWDER(5, "CONCRETE_POWDER"), 457 | LIME_DYE(10, "INK_SACK"), 458 | LIME_GLAZED_TERRACOTTA(0, "LIME_GLAZED_TERRACOTTA"), 459 | LIME_SHULKER_BOX(0, "LIME_SHULKER_BOX"), 460 | LIME_STAINED_GLASS(5, "STAINED_GLASS"), 461 | LIME_STAINED_GLASS_PANE(5, "STAINED_GLASS_PANE"), 462 | LIME_TERRACOTTA(5, "STAINED_CLAY"), 463 | LIME_WALL_BANNER(0, "WALL_BANNER"), 464 | LIME_WOOL(5, "WOOL"), 465 | LINGERING_POTION(0, "LINGERING_POTION"), 466 | LLAMA_SPAWN_EGG(0, "MONSTER_EGG"), 467 | MAGENTA_BANNER(13, "BANNER", "STANDING_BANNER"), 468 | MAGENTA_BED(2, "BED", "BED_BLOCK"), 469 | MAGENTA_CARPET(2, "CARPET"), 470 | MAGENTA_CONCRETE(2, "CONCRETE"), 471 | MAGENTA_CONCRETE_POWDER(2, "CONCRETE_POWDER"), 472 | MAGENTA_DYE(13, "INK_SACK"), 473 | MAGENTA_GLAZED_TERRACOTTA(0, "MAGENTA_GLAZED_TERRACOTTA"), 474 | MAGENTA_SHULKER_BOX(0, "MAGENTA_SHULKER_BOX"), 475 | MAGENTA_STAINED_GLASS(2, "STAINED_GLASS"), 476 | MAGENTA_STAINED_GLASS_PANE(2, "STAINED_GLASS_PANE"), 477 | MAGENTA_TERRACOTTA(2, "STAINED_CLAY"), 478 | MAGENTA_WALL_BANNER(0, "WALL_BANNER"), 479 | MAGENTA_WOOL(2, "WOOL"), 480 | MAGMA_BLOCK(0, "MAGMA"), 481 | MAGMA_CREAM(0, "MAGMA_CREAM"), 482 | MAGMA_CUBE_SPAWN_EGG(0, "MONSTER_EGG"), 483 | MAP(0, "MAP", "EMPTY_MAP"), 484 | MELON(0, "MELON_BLOCK"), 485 | MELON_SEEDS(0, "MELON_SEEDS"), 486 | MELON_SLICE(0, "MELON"), 487 | MELON_STEM(0, "MELON_STEM"), 488 | MILK_BUCKET(0, "MILK_BUCKET"), 489 | MINECART(0, "MINECART"), 490 | MOOSHROOM_SPAWN_EGG(0, "MONSTER_EGG"), 491 | MOSSY_COBBLESTONE(0, "MOSSY_COBBLESTONE"), 492 | MOSSY_COBBLESTONE_WALL(1, "COBBLE_WALL"), 493 | MOSSY_STONE_BRICKS(1, "SMOOTH_BRICK"), 494 | MOVING_PISTON(0, "PISTON_MOVING_PIECE"), 495 | MULE_SPAWN_EGG(0, "MONSTER_EGG"), 496 | MUSHROOM_STEM(0, "BROWN_MUSHROOM"), 497 | MUSHROOM_STEW(0, "MUSHROOM_SOUP"), 498 | MUSIC_DISC_11(0, "GOLD_RECORD"), 499 | MUSIC_DISC_13(0, "GREEN_RECORD"), 500 | MUSIC_DISC_BLOCKS(0, "RECORD_3"), 501 | MUSIC_DISC_CAT(0, "RECORD_4"), 502 | MUSIC_DISC_CHIRP(0, "RECORD_5"), 503 | MUSIC_DISC_FAR(0, "RECORD_6"), 504 | MUSIC_DISC_MALL(0, "RECORD_7"), 505 | MUSIC_DISC_MELLOHI(0, "RECORD_8"), 506 | MUSIC_DISC_STAL(0, "RECORD_9"), 507 | MUSIC_DISC_STRAD(0, "RECORD_10"), 508 | MUSIC_DISC_WAIT(0, "RECORD_11"), 509 | MUSIC_DISC_WARD(0, "RECORD_12"), 510 | MUTTON(0, "MUTTON"), 511 | MYCELIUM(0, "MYCEL"), 512 | NAME_TAG(0, "NAME_TAG"), 513 | NAUTILUS_SHELL(0, "STONE"), 514 | NETHERRACK(0, "NETHERRACK"), 515 | NETHER_BRICK(0, "NETHER_BRICK"), 516 | NETHER_BRICKS(0, "NETHER_BRICK"), 517 | NETHER_BRICK_FENCE(0, "NETHER_FENCE"), 518 | NETHER_BRICK_SLAB(6, "STEP"), 519 | NETHER_BRICK_STAIRS(0, "NETHER_BRICK_STAIRS"), 520 | NETHER_PORTAL(0, "PORTAL"), 521 | NETHER_QUARTZ_ORE(0, "QUARTZ_ORE"), 522 | NETHER_STAR(0, "NETHER_STAR"), 523 | NETHER_WART(0, "NETHER_STALK"), 524 | NETHER_WART_BLOCK(0, "NETHER_WART_BLOCK", "NETHER_WARTS"), 525 | NOTE_BLOCK(0, "NOTE_BLOCK"), 526 | OAK_BOAT(0, "BOAT"), 527 | OAK_BUTTON(0, "WOOD_BUTTON"), 528 | OAK_DOOR(0, "WOODEN_DOOR", "WOOD_DOOR"), 529 | OAK_FENCE(0, "FENCE"), 530 | OAK_FENCE_GATE(0, "FENCE_GATE"), 531 | OAK_LEAVES(0, "LEAVES"), 532 | OAK_LOG(0, "LOG"), 533 | OAK_PLANKS(0, "WOOD"), 534 | OAK_PRESSURE_PLATE(0, "WOOD_PLATE"), 535 | OAK_SAPLING(0, "SAPLING"), 536 | OAK_SLAB(0,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 537 | OAK_STAIRS(0, "WOOD_STAIRS"), 538 | OAK_TRAPDOOR(0, "TRAP_DOOR"), 539 | OAK_WOOD(0, "LOG"), 540 | OBSERVER(0, "OBSERVER"), 541 | OBSIDIAN(0, "OBSIDIAN"), 542 | OCELOT_SPAWN_EGG(0, "RECORD_12"), 543 | ORANGE_BANNER(14, "BANNER", "STANDING_BANNER"), 544 | ORANGE_BED(1, "BED", "BED_BLOCK"), 545 | ORANGE_CARPET(1, "CARPET"), 546 | ORANGE_CONCRETE(1, "CONCRETE"), 547 | ORANGE_CONCRETE_POWDER(1, "CONCRETE_POWDER"), 548 | ORANGE_DYE(14, "INK_SACK"), 549 | ORANGE_GLAZED_TERRACOTTA(0, "ORANGE_GLAZED_TERRACOTTA"), 550 | ORANGE_SHULKER_BOX(0, "ORANGE_SHULKER_BOX"), 551 | ORANGE_STAINED_GLASS(1, "STAINED_GLASS"), 552 | ORANGE_STAINED_GLASS_PANE(1, "STAINED_GLASS_PANE"), 553 | ORANGE_TERRACOTTA(1, "STAINED_CLAY"), 554 | ORANGE_TULIP(5, "RED_ROSE"), 555 | ORANGE_WALL_BANNER(0, "WALL_BANNER"), 556 | ORANGE_WOOL(1, "WOOL"), 557 | OXEYE_DAISY(8, "RED_ROSE"), 558 | PACKED_ICE(0, "PACKED_ICE"), 559 | PAINTING(0, "PAINTING"), 560 | PAPER(0, "PAPER"), 561 | PARROT_SPAWN_EGG(0, "MONSTER_EGG"), 562 | PEONY(5, "DOUBLE_PLANT"), 563 | PETRIFIED_OAK_SLAB(0, "STONE"), 564 | PHANTOM_MEMBRANE(0, "STONE"), 565 | PHANTOM_SPAWN_EGG(0, "MONSTER_EGG"), 566 | PIG_SPAWN_EGG(0, "MONSTER_EGG"), 567 | PINK_BANNER(9, "BANNER", "STANDING_BANNER"), 568 | PINK_BED(6, "BED", "BED_BLOCK"), 569 | PINK_CARPET(6, "CARPET"), 570 | PINK_CONCRETE(6, "CONCRETE"), 571 | PINK_CONCRETE_POWDER(6, "CONCRETE_POWDER"), 572 | PINK_DYE(9, "INK_SACK"), 573 | PINK_GLAZED_TERRACOTTA(0, "PINK_GLAZED_TERRACOTTA"), 574 | PINK_SHULKER_BOX(0, "PINK_SHULKER_BOX"), 575 | PINK_STAINED_GLASS(6, "STAINED_GLASS"), 576 | PINK_STAINED_GLASS_PANE(6, "STAINED_GLASS_PANE"), 577 | PINK_TERRACOTTA(6, "STAINED_CLAY"), 578 | PINK_TULIP(7, "RED_ROSE"), 579 | PINK_WALL_BANNER(0, "WALL_BANNER"), 580 | PINK_WOOL(6, "WOOL"), 581 | PISTON(0, "PISTON_BASE"), 582 | PISTON_HEAD(0, "PISTON_EXTENSION"), 583 | PLAYER_HEAD(0, "SKULL","SKULL_ITEM"), 584 | PLAYER_WALL_HEAD(0, "SKULL","SKULL_ITEM"), 585 | PODZOL(2, "DIRT"), 586 | POISONOUS_POTATO(0, "POISONOUS_POTATO"), 587 | POLAR_BEAR_SPAWN_EGG(0, "MONSTER_EGG"), 588 | POLISHED_ANDESITE(6, "STONE"), 589 | POLISHED_DIORITE(4, "STONE"), 590 | POLISHED_GRANITE(2, "STONE"), 591 | POPPED_CHORUS_FRUIT(0, "CHORUS_FRUIT_POPPED"), 592 | POPPY(0, "RED_ROSE"), 593 | PORKCHOP(0, "PORK"), 594 | POTATO(0, "POTATO_ITEM"), 595 | POTATOES(0, "POTATO"), 596 | POTION(0, "POTION"), 597 | POTTED_ACACIA_SAPLING(0, "FLOWER_POT"), 598 | POTTED_ALLIUM(0, "FLOWER_POT"), 599 | POTTED_AZURE_BLUET(0, "FLOWER_POT"), 600 | POTTED_BIRCH_SAPLING(0, "FLOWER_POT"), 601 | POTTED_BLUE_ORCHID(0, "FLOWER_POT"), 602 | POTTED_BROWN_MUSHROOM(0, "FLOWER_POT"), 603 | POTTED_CACTUS(0, "FLOWER_POT"), 604 | POTTED_DANDELION(0, "FLOWER_POT"), 605 | POTTED_DARK_OAK_SAPLING(0, "FLOWER_POT"), 606 | POTTED_DEAD_BUSH(0, "FLOWER_POT"), 607 | POTTED_FERN(0, "FLOWER_POT"), 608 | POTTED_JUNGLE_SAPLING(0, "FLOWER_POT"), 609 | POTTED_OAK_SAPLING(0, "FLOWER_POT"), 610 | POTTED_ORANGE_TULIP(0, "FLOWER_POT"), 611 | POTTED_OXEYE_DAISY(0, "FLOWER_POT"), 612 | POTTED_PINK_TULIP(0, "FLOWER_POT"), 613 | POTTED_POPPY(0, "FLOWER_POT"), 614 | POTTED_RED_MUSHROOM(0, "FLOWER_POT"), 615 | POTTED_RED_TULIP(0, "FLOWER_POT"), 616 | POTTED_SPRUCE_SAPLING(0, "FLOWER_POT"), 617 | POTTED_WHITE_TULIP(0, "FLOWER_POT"), 618 | POWERED_RAIL(0, "POWERED_RAIL"), 619 | PRISMARINE(0, "PRISMARINE"), 620 | PRISMARINE_BRICKS(1, "PRISMARINE"), 621 | PRISMARINE_BRICK_SLAB(0, "STONE"), 622 | PRISMARINE_BRICK_STAIRS(0, "STONE"), 623 | PRISMARINE_CRYSTALS(0, "PRISMARINE_CRYSTALS"), 624 | PRISMARINE_SHARD(0, "PRISMARINE_SHARD"), 625 | PRISMARINE_SLAB(0, "STONE"), 626 | PRISMARINE_STAIRS(0, "STONE"), 627 | PUFFERFISH(3, "RAW_FISH"), 628 | PUFFERFISH_BUCKET(0, "STONE"), 629 | PUFFERFISH_SPAWN_EGG(0, "MONSTER_EGG"), 630 | PUMPKIN(0, "PUMPKIN"), 631 | PUMPKIN_PIE(0, "PUMPKIN_PIE"), 632 | PUMPKIN_SEEDS(0, "PUMPKIN_SEEDS"), 633 | PUMPKIN_STEM(0, "PUMPKIN_STEM"), 634 | PURPLE_BANNER(5, "BANNER", "STANDING_BANNER"), 635 | PURPLE_BED(10, "BED", "BED_BLOCK"), 636 | PURPLE_CARPET(10, "CARPET"), 637 | PURPLE_CONCRETE(10, "CONCRETE"), 638 | PURPLE_CONCRETE_POWDER(10, "CONCRETE_POWDER"), 639 | PURPLE_DYE(5, "INK_SACK"), 640 | PURPLE_GLAZED_TERRACOTTA(0, "PURPLE_GLAZED_TERRACOTTA"), 641 | PURPLE_SHULKER_BOX(0, "PURPLE_SHULKER_BOX"), 642 | PURPLE_STAINED_GLASS(10, "STAINED_GLASS"), 643 | PURPLE_STAINED_GLASS_PANE(10, "STAINED_GLASS_PANE"), 644 | PURPLE_TERRACOTTA(10, "STAINED_CLAY"), 645 | PURPLE_WALL_BANNER(0, "WALL_BANNER"), 646 | PURPLE_WOOL(10, "WOOL"), 647 | PURPUR_BLOCK(0, "PURPUR_BLOCK"), 648 | PURPUR_PILLAR(0, "PURPUR_PILLAR"), 649 | PURPUR_SLAB(0, "PURPUR_SLAB", "PURPUR_DOUBLE_SLAB"), 650 | PURPUR_STAIRS(0, "PURPUR_STAIRS"), 651 | QUARTZ(0, "QUARTZ"), 652 | QUARTZ_BLOCK(0, "QUARTZ_BLOCK"), 653 | QUARTZ_PILLAR(2, "QUARTZ_BLOCK"), 654 | QUARTZ_SLAB(7, "STEP"), 655 | QUARTZ_STAIRS(0, "QUARTZ_STAIRS"), 656 | RABBIT(0, "RABBIT"), 657 | RABBIT_FOOT(0, "RABBIT_FOOT"), 658 | RABBIT_HIDE(0, "RABBIT_HIDE"), 659 | RABBIT_SPAWN_EGG(0, "MONSTER_EGG"), 660 | RABBIT_STEW(0, "RABBIT_STEW"), 661 | RAIL(0, "RAILS"), 662 | REDSTONE(0, "REDSTONE"), 663 | REDSTONE_BLOCK(0, "REDSTONE_BLOCK"), 664 | REDSTONE_LAMP(0, "REDSTONE_LAMP_ON", "REDSTONE_LAMP_OFF"), 665 | REDSTONE_ORE(0, "REDSTONE_ORE", "GLOWING_REDSTONE_ORE"), 666 | REDSTONE_TORCH(0, "REDSTONE_TORCH_ON", "REDSTONE_TORCH_OFF"), 667 | REDSTONE_WALL_TORCH(1, "REDSTONE_TORCH_ON", "REDSTONE_TORCH_OFF"), 668 | REDSTONE_WIRE(0, "REDSTONE_WIRE"), 669 | RED_BANNER(1, "BANNER", "STANDING_BANNER"), 670 | RED_BED(14, "BED", "BED_BLOCK"), 671 | RED_CARPET(14, "CARPET"), 672 | RED_CONCRETE(14, "CONCRETE"), 673 | RED_CONCRETE_POWDER(14, "CONCRETE_POWDER"), 674 | RED_GLAZED_TERRACOTTA(0, "RED_GLAZED_TERRACOTTA"), 675 | RED_MUSHROOM(0, "RED_MUSHROOM"), 676 | RED_MUSHROOM_BLOCK(0, "RED_MUSHROOM", "HUGE_MUSHROOM_2"), 677 | RED_NETHER_BRICKS(0, "RED_NETHER_BRICK"), 678 | RED_SAND(1, "SAND"), 679 | RED_SANDSTONE(0, "RED_SANDSTONE"), 680 | RED_SANDSTONE_SLAB(0, "STONE_SLAB2", "DOUBLE_STONE_SLAB2"), 681 | RED_SANDSTONE_STAIRS(0, "RED_SANDSTONE_STAIRS"), 682 | RED_SHULKER_BOX(0, "RED_SHULKER_BOX"), 683 | RED_STAINED_GLASS(14, "STAINED_GLASS"), 684 | RED_STAINED_GLASS_PANE(14, "STAINED_GLASS_PANE"), 685 | RED_TERRACOTTA(14, "STAINED_CLAY"), 686 | RED_TULIP(4, "RED_ROSE"), 687 | RED_WALL_BANNER(0, "WALL_BANNER"), 688 | RED_WOOL(14, "WOOL"), 689 | REPEATER(0, "DIODE", "DIODE_BLOCK_ON", "DIODE_BLOCK_OFF"), 690 | REPEATING_COMMAND_BLOCK(0, "COMMAND_REPEATING"), 691 | ROSE_BUSH(4, "DOUBLE_PLANT"), 692 | ROSE_RED(1, "INK_SACK"), 693 | ROTTEN_FLESH(0, "ROTTEN_FLESH"), 694 | SADDLE(0, "SADDLE"), 695 | SALMON(1, "RAW_FISH"), 696 | SALMON_BUCKET(0, "BUCKET"), 697 | SALMON_SPAWN_EGG(0, "MONSTER_EGG"), 698 | SAND(0, "SAND"), 699 | SANDSTONE(0, "SANDSTONE"), 700 | SANDSTONE_SLAB(1, "STONE_SLAB", "STEP", "DOUBLE_STEP"), 701 | SANDSTONE_STAIRS(0, "SANDSTONE_STAIRS"), 702 | SCUTE(0, "STONE"), 703 | SEAGRASS(0, "STONE"), 704 | SEA_LANTERN(0, "SEA_LANTERN"), 705 | SEA_PICKLE(0, "STONE"), 706 | SHEARS(0, "SHEARS"), 707 | SHEEP_SPAWN_EGG(0, "MONSTER_EGG"), 708 | SHIELD(0, "SHIELD"), 709 | SHULKER_BOX(0, "PURPLE_SHULKER_BOX"), 710 | SHULKER_SHELL(0, "SHULKER_SHELL"), 711 | SHULKER_SPAWN_EGG(0, "MONSTER_EGG"), 712 | SIGN(0, "SIGN"), 713 | SILVERFISH_SPAWN_EGG(0, "MONSTER_EGG"), 714 | SKELETON_HORSE_SPAWN_EGG(0, "MONSTER_EGG"), 715 | SKELETON_SKULL(0, "SKULL","SKULL_ITEM"), 716 | SKELETON_SPAWN_EGG(0, "MONSTER_EGG"), 717 | SKELETON_WALL_SKULL(0, "SKULL","SKULL_ITEM"), 718 | SLIME_BALL(0, "SLIME_BALL"), 719 | SLIME_BLOCK(0, "SLIME_BLOCK"), 720 | SLIME_SPAWN_EGG(0, "MONSTER_EGG"), 721 | SMOOTH_QUARTZ(0, "STONE"), 722 | SMOOTH_RED_SANDSTONE(2, "RED_SANDSTONE"), 723 | SMOOTH_SANDSTONE(2, "SANDSTONE"), 724 | SMOOTH_STONE(0, "STEP"), 725 | SNOW(0, "SNOW"), 726 | SNOWBALL(0, "SNOW_BALL"), 727 | SNOW_BLOCK(0, "SNOW_BLOCK"), 728 | SOUL_SAND(0, "SOUL_SAND"), 729 | SPAWNER(0, "MOB_SPAWNER"), 730 | SPECTRAL_ARROW(0, "SPECTRAL_ARROW"), 731 | SPIDER_EYE(0, "SPIDER_EYE"), 732 | SPIDER_SPAWN_EGG(0, "MONSTER_EGG"), 733 | SPLASH_POTION(0, "SPLASH_POTION"), 734 | SPONGE(0, "SPONGE"), 735 | SPRUCE_BOAT(0, "BOAT_SPRUCE"), 736 | SPRUCE_BUTTON(0, "WOOD_BUTTON"), 737 | SPRUCE_DOOR(0, "SPRUCE_DOOR", "SPRUCE_DOOR_ITEM"), 738 | SPRUCE_FENCE(0, "SPRUCE_FENCE"), 739 | SPRUCE_FENCE_GATE(0, "SPRUCE_FENCE_GATE"), 740 | SPRUCE_LEAVES(1, "LEAVES"), 741 | SPRUCE_LOG(1, "LOG"), 742 | SPRUCE_PLANKS(1, "WOOD"), 743 | SPRUCE_PRESSURE_PLATE(0, "WOOD_PLATE"), 744 | SPRUCE_SAPLING(1, "SAPLING"), 745 | SPRUCE_SLAB(1,"WOODEN_SLAB", "WOOD_STEP", "WOOD_DOUBLE_STEP"), 746 | SPRUCE_STAIRS(0, "SPRUCE_WOOD_STAIRS"), 747 | SPRUCE_TRAPDOOR(0, "TRAP_DOOR"), 748 | SPRUCE_WOOD(1, "LOG"), 749 | SQUID_SPAWN_EGG(0, "MONSTER_EGG"), 750 | STICK(0, "STICK"), 751 | STICKY_PISTON(0, "PISTON_STICKY_BASE"), 752 | STONE(0, "STONE"), 753 | STONE_AXE(0, "STONE_AXE"), 754 | STONE_BRICKS(0, "SMOOTH_BRICK"), 755 | STONE_BRICK_SLAB(5, "STONE_SLAB", "STEP", "DOUBLE_STEP"), 756 | STONE_BRICK_STAIRS(0, "SMOOTH_STAIRS"), 757 | STONE_BUTTON(0, "STONE_BUTTON"), 758 | STONE_HOE(0, "STONE_HOE"), 759 | STONE_PICKAXE(0, "STONE_PICKAXE"), 760 | STONE_PRESSURE_PLATE(0, "STONE_PLATE"), 761 | STONE_SHOVEL(0, "STONE_SPADE"), 762 | STONE_SLAB(0, "STONE_SLAB", "STEP", "DOUBLE_STEP"), 763 | STONE_SWORD(0, "STONE_SWORD"), 764 | STRAY_SPAWN_EGG(0, "MONSTER_EGG"), 765 | STRING(0, "STRING"), 766 | STRIPPED_ACACIA_LOG(0, "STONE"), 767 | STRIPPED_ACACIA_WOOD(0, "STONE"), 768 | STRIPPED_BIRCH_LOG(0, "STONE"), 769 | STRIPPED_BIRCH_WOOD(0, "STONE"), 770 | STRIPPED_DARK_OAK_LOG(0, "STONE"), 771 | STRIPPED_DARK_OAK_WOOD(0, "STONE"), 772 | STRIPPED_JUNGLE_LOG(0, "STONE"), 773 | STRIPPED_JUNGLE_WOOD(0, "STONE"), 774 | STRIPPED_OAK_LOG(0, "STONE"), 775 | STRIPPED_OAK_WOOD(0, "STONE"), 776 | STRIPPED_SPRUCE_LOG(0, "STONE"), 777 | STRIPPED_SPRUCE_WOOD(0, "STONE"), 778 | STRUCTURE_BLOCK(0, "STRUCTURE_BLOCK"), 779 | STRUCTURE_VOID(0, "STRUCTURE_VOID"), 780 | SUGAR(0, "SUGAR"), 781 | SUGAR_CANE(0, "SUGAR_CANE", "SUGAR_CANE_BLOCK"), 782 | SUNFLOWER(0, "DOUBLE_PLANT"), 783 | TALL_GRASS(2, "DOUBLE_PLANT"), 784 | TALL_SEAGRASS(0, "STONE"), 785 | TERRACOTTA(0, "HARD_CLAY"), 786 | TIPPED_ARROW(0, "TIPPED_ARROW"), 787 | TNT(0, "TNT"), 788 | TNT_MINECART(0, "EXPLOSIVE_MINECART"), 789 | TORCH(0, "TORCH"), 790 | TOTEM_OF_UNDYING(0, "TOTEM"), 791 | TRAPPED_CHEST(0, "TRAPPED_CHEST"), 792 | TRIDENT(0, "STONE"), 793 | TRIPWIRE(0, "TRIPWIRE"), 794 | TRIPWIRE_HOOK(0, "TRIPWIRE_HOOK"), 795 | TROPICAL_FISH(0, "RAW_FISH"), 796 | TROPICAL_FISH_BUCKET(0, "BUCKET"), 797 | TROPICAL_FISH_SPAWN_EGG(0, "MONSTER_EGG"), 798 | TUBE_CORAL(0, "STONE"), 799 | TUBE_CORAL_BLOCK(0, "STONE"), 800 | TUBE_CORAL_FAN(0, "STONE"), 801 | TURTLE_EGG(0, "MONSTER_EGG"), 802 | TURTLE_HELMET(0, "STONE"), 803 | TURTLE_SPAWN_EGG(0, "MONSTER_EGG"), 804 | VEX_SPAWN_EGG(0, "MONSTER_EGG"), 805 | VILLAGER_SPAWN_EGG(0, "MONSTER_EGG"), 806 | VINDICATOR_SPAWN_EGG(0, "MONSTER_EGG"), 807 | VINE(0, "VINE"), 808 | VOID_AIR(0, "AIR"), 809 | WALL_SIGN(0, "WALL_SIGN", "SIGN_POST"), 810 | WALL_TORCH(1, "TORCH"), 811 | WATER(0, "WATER", "STATIONARY_WATER"), 812 | WATER_BUCKET(0, "WATER_BUCKET"), 813 | WET_SPONGE(1, "SPONGE"), 814 | WHEAT(0, "WHEAT", "CROPS"), 815 | WHEAT_SEEDS(0, "WHEAT_SEEDS", "SEEDS"), 816 | WHITE_BANNER(15, "BANNER", "STANDING_BANNER"), 817 | WHITE_BED(0, "BED", "BED_BLOCK"), 818 | WHITE_CARPET(0, "CARPET"), 819 | WHITE_CONCRETE(0, "CONCRETE"), 820 | WHITE_CONCRETE_POWDER(0, "CONCRETE_POWDER"), 821 | WHITE_GLAZED_TERRACOTTA(0, "WHITE_GLAZED_TERRACOTTA"), 822 | WHITE_SHULKER_BOX(0, "WHITE_SHULKER_BOX"), 823 | WHITE_STAINED_GLASS(0, "STAINED_GLASS"), 824 | WHITE_STAINED_GLASS_PANE(0, "STAINED_GLASS_PANE"), 825 | WHITE_TERRACOTTA(0, "TERRACOTTA"), 826 | WHITE_TULIP(6, "RED_ROSE"), 827 | WHITE_WALL_BANNER(0, "WALL_BANNER"), 828 | WHITE_WOOL(0, "WOOL"), 829 | WITCH_SPAWN_EGG(0, "MONSTER_EGG"), 830 | WITHER_SKELETON_SKULL(0, "SKULL","SKULL_ITEM"), 831 | WITHER_SKELETON_SPAWN_EGG(0, "MONSTER_EGG"), 832 | WITHER_SKELETON_WALL_SKULL(0, "SKULL","SKULL_ITEM"), 833 | WOLF_SPAWN_EGG(0, "MONSTER_EGG"), 834 | WOODEN_AXE(0, "WOOD_AXE"), 835 | WOODEN_HOE(0, "WOOD_HOE"), 836 | WOODEN_PICKAXE(0, "WOOD_PICKAXE"), 837 | WOODEN_SHOVEL(0, "WOOD_SPADE"), 838 | WOODEN_SWORD(0, "WOOD_SWORD"), 839 | WRITABLE_BOOK(0, "BOOK_AND_QUILL"), 840 | WRITTEN_BOOK(0, "WRITTEN_BOOK"), 841 | YELLOW_BANNER(11, "BANNER", "STANDING_BANNER"), 842 | YELLOW_BED(4, "BED", "BED_BLOCK"), 843 | YELLOW_CARPET(4, "CARPET"), 844 | YELLOW_CONCRETE(4, "CONCRETE"), 845 | YELLOW_CONCRETE_POWDER(4, "CONCRETE_POWDER"), 846 | YELLOW_GLAZED_TERRACOTTA(0, "YELLOW_GLAZED_TERRACOTTA"), 847 | YELLOW_SHULKER_BOX(0, "YELLOW_SHULKER_BOX"), 848 | YELLOW_STAINED_GLASS(4, "STAINED_GLASS"), 849 | YELLOW_STAINED_GLASS_PANE(4, "STAINED_GLASS_PANE"), 850 | YELLOW_TERRACOTTA(4, "STAINED_CLAY"), 851 | YELLOW_WALL_BANNER(0, "WALL_BANNER"), 852 | YELLOW_WOOL(4, "WOOL"), 853 | ZOMBIE_HEAD(0, "SKULL","SKULL_ITEM"), 854 | ZOMBIE_HORSE_SPAWN_EGG(0, "MONSTER_EGG"), 855 | ZOMBIE_PIGMAN_SPAWN_EGG(0, "MONSTER_EGG"), 856 | ZOMBIE_SPAWN_EGG(0, "MONSTER_EGG"), 857 | ZOMBIE_VILLAGER_SPAWN_EGG(0, "MONSTER_EGG"), 858 | ZOMBIE_WALL_HEAD(0, "SKULL","SKULL_ITEM"), 859 | ; 860 | String[] m; 861 | int data; 862 | 863 | XMaterial(int data, String... m){ 864 | this.m = m; 865 | this.data = data; 866 | } 867 | 868 | public ItemStack parseItem(){ 869 | Material mat = parseMaterial(); 870 | if(isNewVersion()){ 871 | return new ItemStack(mat); 872 | } 873 | return new ItemStack(mat,1,(byte) data); 874 | } 875 | public static boolean isNewVersion(){ 876 | Material mat = Material.getMaterial("RED_WOOL"); 877 | if(mat != null){ 878 | return true; 879 | } 880 | return false; 881 | } 882 | 883 | private static HashMap cachedSearch = new HashMap<>(); 884 | public static XMaterial requestXMaterial(String name, byte data){ 885 | if(cachedSearch.containsKey(name.toUpperCase()+","+data)){ 886 | return cachedSearch.get(name.toUpperCase()+","+data); 887 | } 888 | for(XMaterial mat:XMaterial.values()){ 889 | for(String test:mat.m){ 890 | if(name.toUpperCase().equals(test) && ((byte)mat.data) == data){ 891 | cachedSearch.put(test+","+data,mat); 892 | return mat; 893 | } 894 | } 895 | } 896 | return null; 897 | } 898 | 899 | public boolean isSameMaterial(ItemStack comp){ 900 | if(isNewVersion()){ 901 | return comp.getType() == this.parseMaterial(); 902 | } 903 | if(comp.getType() == this.parseMaterial() && 904 | (int) comp.getData().getData() == (int) this.data){ 905 | return true; 906 | } 907 | XMaterial xmat = fromMaterial(comp.getType()); 908 | if(isDamageable(xmat)){ 909 | if(this.parseMaterial() == comp.getType()){ 910 | return true; 911 | } 912 | } 913 | return false; 914 | } 915 | 916 | public XMaterial fromMaterial(Material mat){ 917 | try{ 918 | return XMaterial.valueOf(mat.toString()); 919 | }catch(IllegalArgumentException e){ 920 | for(XMaterial xmat:XMaterial.values()){ 921 | for(String test:xmat.m){ 922 | if(test.equalsIgnoreCase(mat.toString())){ 923 | return xmat; 924 | } 925 | } 926 | } 927 | } 928 | return null; 929 | } 930 | 931 | public static XMaterial fromString(String key){ 932 | XMaterial xmat = null; 933 | try{ 934 | xmat = XMaterial.valueOf(key); 935 | return xmat; 936 | }catch(IllegalArgumentException e){ 937 | String[] split = key.split(":"); 938 | if(split.length == 1){ 939 | xmat = requestXMaterial(key,(byte) 0); 940 | }else{ 941 | xmat = requestXMaterial(split[0],(byte) Integer.parseInt(split[1])); 942 | } 943 | return xmat; 944 | } 945 | 946 | } 947 | 948 | public boolean isDamageable(XMaterial type){ 949 | if(type == null) return false; 950 | String[] split = type.toString().split("_"); 951 | int length = split.length; 952 | switch(split[length-1]){ 953 | case "HELMET": 954 | return true; 955 | case "CHESTPLATE": 956 | return true; 957 | case "LEGGINGS": 958 | return true; 959 | case "BOOTS": 960 | return true; 961 | case "SWORD": 962 | return true; 963 | case "AXE": 964 | return true; 965 | case "PICKAXE": 966 | return true; 967 | case "SHOVEL": 968 | return true; 969 | case "HOE": 970 | return true; 971 | case "ELYTRA": 972 | return true; 973 | case "TURTLE_HELMET": 974 | return true; 975 | case "TRIDENT": 976 | return true; 977 | case "HORSE_ARMOR": 978 | return true; 979 | case "SHEARS": 980 | return true; 981 | default: 982 | return false; 983 | } 984 | } 985 | 986 | public Material parseMaterial(){ 987 | Material mat = Material.matchMaterial(this.toString()); 988 | if(mat != null){ 989 | return mat; 990 | } 991 | return Material.matchMaterial(m[0]); 992 | } 993 | 994 | } -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/gui/Menu.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.gui; 2 | 3 | import java.util.HashMap; 4 | 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.inventory.InventoryClickEvent; 10 | import org.bukkit.event.inventory.InventoryCloseEvent; 11 | import org.bukkit.inventory.Inventory; 12 | 13 | import games.bevs.minecraftbut.commons.Sounds; 14 | import games.bevs.minecraftbut.commons.utils.Callback; 15 | import games.bevs.minecraftbut.commons.utils.InventoryUtils; 16 | import games.bevs.minecraftbut.commons.utils.ItemStackBuilder; 17 | import lombok.Getter; 18 | 19 | @Getter 20 | public class Menu implements Listener 21 | { 22 | private static final Sounds SUCCESSFUL_CLICK_SOUND = Sounds.CLICK; 23 | 24 | private HashMap icons = new HashMap<>(); 25 | private String title; 26 | private int size; 27 | private Inventory inv; 28 | 29 | public Menu(String title, int size) 30 | { 31 | this.title = title; 32 | this.size = size; 33 | this.inv = Bukkit.createInventory(null, size, title); 34 | } 35 | 36 | public void setIcon(MenuIcon icon) 37 | { 38 | this.icons.put(icon.getSlot(), icon); 39 | } 40 | 41 | /** 42 | * 43 | * @param slot 44 | * @param itemStackbuilder 45 | * @param runnable, 46 | * ran when item is clicked 47 | */ 48 | public void setIcon(Integer slot, ItemStackBuilder itemStackbuilder, Callback run) 49 | { 50 | MenuIcon icon = new MenuIcon(itemStackbuilder, slot, run); 51 | this.setIcon(icon); 52 | this.inv.setItem(slot, itemStackbuilder.build()); 53 | } 54 | 55 | /** 56 | * No action happens when Item is clicked 57 | * @param slot 58 | * @param itemStackbuilder 59 | */ 60 | public void setIcon(Integer slot, ItemStackBuilder itemStackbuilder) 61 | { 62 | this.setIcon(slot, itemStackbuilder, (player) -> {}); 63 | } 64 | 65 | @EventHandler 66 | public void onInventoryClick(InventoryClickEvent e) 67 | { 68 | Player player = (Player) e.getWhoClicked(); 69 | Inventory inv = e.getInventory(); 70 | int slot = e.getSlot(); 71 | 72 | if(inv == null) 73 | return; 74 | if(!e.getView().getTitle().equalsIgnoreCase(title)) 75 | return; 76 | MenuIcon icon = this.getIcons().get(slot); 77 | 78 | if(icon != null) 79 | { 80 | icon.getRunnable().run(player); 81 | player.playSound(player.getLocation(), SUCCESSFUL_CLICK_SOUND.bukkitSound(), 1f, 1f); 82 | } 83 | 84 | e.setCancelled(true); 85 | } 86 | 87 | public void open(Player player) 88 | { 89 | player.openInventory(this.getInv()); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/gui/MenuIcon.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.gui; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | import games.bevs.minecraftbut.commons.utils.Callback; 6 | import games.bevs.minecraftbut.commons.utils.ItemStackBuilder; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Data; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | public class MenuIcon 13 | { 14 | private ItemStackBuilder icon; 15 | private int slot; 16 | private Callback runnable; 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/utils/CC.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.utils; 2 | 3 | import org.bukkit.ChatColor; 4 | 5 | /** 6 | * Chat colours as strings 7 | * 8 | * @author Sprock 9 | */ 10 | public class CC 11 | { 12 | 13 | public static String 14 | blue = ChatColor.BLUE.toString(), 15 | aqua = ChatColor.AQUA.toString(), 16 | yellow = ChatColor.YELLOW.toString(), 17 | red = ChatColor.RED.toString(), 18 | gray = ChatColor.GRAY.toString(), 19 | gold = ChatColor.GOLD.toString(), 20 | green = ChatColor.GREEN.toString(), 21 | white = ChatColor.WHITE.toString(), 22 | black = ChatColor.BLACK.toString(), 23 | 24 | darkBlue = ChatColor.DARK_BLUE.toString(), 25 | darkAqua = ChatColor.DARK_AQUA.toString(), 26 | darkGray = ChatColor.DARK_GRAY.toString(), 27 | darkGreen = ChatColor.DARK_GREEN.toString(), 28 | darkPurple = ChatColor.DARK_PURPLE.toString(), 29 | darkRed = ChatColor.DARK_RED.toString(), 30 | 31 | dBlue = darkBlue, 32 | dAqua = darkAqua, 33 | dGray = darkGray, 34 | dGreen = darkGreen, 35 | dPurple = darkPurple, 36 | dRed = darkRed, 37 | 38 | lightPurple = ChatColor.LIGHT_PURPLE.toString(), 39 | 40 | lPurple = lightPurple, 41 | 42 | bold = ChatColor.BOLD.toString(), 43 | magic = ChatColor.MAGIC.toString(), 44 | italic = ChatColor.ITALIC.toString(), 45 | strikeThrough = ChatColor.STRIKETHROUGH.toString(), 46 | reset = ChatColor.RESET.toString(), 47 | 48 | b = bold, 49 | m = magic, 50 | i = italic, 51 | s = strikeThrough, 52 | r = reset, 53 | 54 | bBlue = blue + b, 55 | bAqua = aqua + b, 56 | bYellow = yellow + b, 57 | bRed = red + b, 58 | bGray = gray + b, 59 | bGold = gold + b, 60 | bGreen = green + b, 61 | bWhite = white + b, 62 | bBlack = black + b, 63 | 64 | bdBlue = dBlue + b, 65 | bdAqua = dAqua + b, 66 | bdGray = dGray + b, 67 | bdGreen = dGreen + b, 68 | bdPurple = dPurple + b, 69 | bdRed = dRed + b, 70 | 71 | blPurple = lPurple + b, 72 | 73 | iBlue = blue + i, 74 | iAqua = aqua + i, 75 | iYellow = yellow + i, 76 | iRed = red + i, 77 | iGray = gray + i, 78 | iGold = gold + i, 79 | iGreen = green + i, 80 | iWhite = white + i, 81 | iBlack = black + i, 82 | 83 | idBlue = dBlue + i, 84 | idAqua = dAqua + i, 85 | idGray = dGray + i, 86 | idGreen = dGreen + i, 87 | idPurple = dPurple + i, 88 | idRed = dRed + i, 89 | 90 | ilPurple = lPurple + i; 91 | 92 | //unicode 93 | public static String 94 | 95 | thinX = "╳", 96 | thickX = "✖", 97 | thickCheck = "✔", 98 | 99 | cresentMoon = "☽", 100 | skull = "☠", 101 | waves = "♒", 102 | pencil = "✐", 103 | cloud = "☁", 104 | miniStar = "☼", 105 | largeEmptyStar = "✰", 106 | largeFullStar = "★", 107 | checkInBox = "☑", 108 | xInBox = "☒", 109 | arrow = "→", 110 | checkerArrow = "⇛", 111 | thickArrow="⇨", 112 | lineVertical = "│", 113 | doubleLineVertical = "║", 114 | arrowUp = "⇑", 115 | arrowUpSolid = "⬆"; 116 | } -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/utils/Callback.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.utils; 2 | 3 | public interface Callback { 4 | public void run(T t); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/utils/InventoryUtils.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.utils; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.event.inventory.InventoryClickEvent; 5 | 6 | public class InventoryUtils { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/utils/ItemStackBuilder.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | import java.util.List; 6 | 7 | import org.bukkit.ChatColor; 8 | import org.bukkit.Color; 9 | import org.bukkit.Material; 10 | import org.bukkit.enchantments.Enchantment; 11 | import org.bukkit.inventory.ItemStack; 12 | import org.bukkit.inventory.meta.ItemMeta; 13 | import org.bukkit.inventory.meta.LeatherArmorMeta; 14 | 15 | import lombok.AllArgsConstructor; 16 | 17 | @AllArgsConstructor 18 | public class ItemStackBuilder { 19 | private ItemStack itemStack; 20 | 21 | public ItemStackBuilder(Material material, short data) { 22 | this.itemStack = new ItemStack(material, data); 23 | } 24 | 25 | public ItemStackBuilder(Material material, int amount) { 26 | this.itemStack = new ItemStack(material, amount); 27 | } 28 | 29 | public ItemStackBuilder(Material material) { 30 | this.itemStack = new ItemStack(material); 31 | } 32 | 33 | public ItemStackBuilder amount(int amount) { 34 | this.itemStack.setAmount(amount); 35 | return this; 36 | } 37 | 38 | public ItemStackBuilder durability(int amount) 39 | { 40 | this.build().setDurability((short)amount); 41 | return this; 42 | } 43 | 44 | public ItemStackBuilder durabilityLeft(int amount) 45 | { 46 | this.build().setDurability((short)(this.build().getType().getMaxDurability() - amount)); 47 | return this; 48 | } 49 | 50 | /** 51 | * On use on LEATHER_ARMOR 52 | * @param color 53 | * @return 54 | */ 55 | public ItemStackBuilder setLeatherColour(Color color) 56 | { 57 | try 58 | { 59 | LeatherArmorMeta itemMeta = (LeatherArmorMeta)this.build().getItemMeta(); 60 | itemMeta.setColor(color); 61 | this.build().setItemMeta((ItemMeta)itemMeta); 62 | return this; 63 | } 64 | catch (ClassCastException ex) 65 | { 66 | ex.printStackTrace(); 67 | } 68 | return this; 69 | } 70 | 71 | public ItemStackBuilder lore(String... lore) { 72 | ItemMeta itemMeta = build().getItemMeta(); 73 | itemMeta.setLore(Arrays.asList(lore)); 74 | build().setItemMeta(itemMeta); 75 | return this; 76 | } 77 | 78 | public ItemStackBuilder addLore(String lore) 79 | { 80 | ItemMeta itemMeta = build().getItemMeta(); 81 | List newLore = new ArrayList(itemMeta.getLore()); 82 | newLore.add(lore); 83 | itemMeta.setLore(newLore); 84 | build().setItemMeta(itemMeta); 85 | return this; 86 | } 87 | 88 | public ItemStackBuilder displayName(String displayName) { 89 | ItemMeta itemMeta = build().getItemMeta(); 90 | itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', displayName)); 91 | build().setItemMeta(itemMeta); 92 | return this; 93 | } 94 | 95 | public ItemStackBuilder enchantment(Enchantment enchantment, int level) { 96 | this.itemStack.addUnsafeEnchantment(enchantment, level); 97 | return this; 98 | } 99 | 100 | public ItemMeta getItemMeta() 101 | { 102 | return this.itemStack.getItemMeta(); 103 | } 104 | 105 | public ItemStack build() { 106 | return this.itemStack; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/commons/utils/MathUtils.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.commons.utils; 2 | 3 | import java.util.Random; 4 | 5 | public class MathUtils { 6 | public static final float PI = (float) Math.PI; 7 | private static final float[] SIN_TABLE_FAST = new float[4096]; 8 | private static Random ran = new Random(); 9 | 10 | public static double round(double value, int dp) { 11 | double offset = Math.pow(10, dp); 12 | return Math.round(value * offset) / offset; 13 | } 14 | 15 | public static float toRadians(float angdeg) { 16 | return angdeg / 180.0F * PI; 17 | } 18 | 19 | public static float sin(float par0) { 20 | return SIN_TABLE_FAST[(int) (par0 * 651.8986F) & 4095]; 21 | } 22 | 23 | public static float cos(float par0) { 24 | return SIN_TABLE_FAST[(int) ((par0 + ((float) Math.PI / 2F)) * 651.8986F) & 4095]; 25 | } 26 | 27 | public static Random getRandom() 28 | { 29 | return ran; 30 | } 31 | static { 32 | int i; 33 | 34 | for (i = 0; i < 4096; i++) { 35 | SIN_TABLE_FAST[i] = (float) Math.sin((double) (((float) i + 0.5F) / 4096.0F * ((float) Math.PI * 2F))); 36 | } 37 | 38 | for (i = 0; i < 360; i += 90) { 39 | SIN_TABLE_FAST[(int) ((float) i * 11.377778F) & 4095] = (float) Math 40 | .sin((double) ((float) i * 0.017453292F)); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/gui/SenerarioMenu.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.gui; 2 | 3 | import java.util.Iterator; 4 | 5 | import org.bukkit.Bukkit; 6 | 7 | import games.bevs.minecraftbut.MinecraftButPlugin; 8 | import games.bevs.minecraftbut.commons.gui.Menu; 9 | import games.bevs.minecraftbut.commons.utils.CC; 10 | import games.bevs.minecraftbut.commons.utils.ItemStackBuilder; 11 | import games.bevs.minecraftbut.senerario.Senerario; 12 | 13 | public class SenerarioMenu extends Menu 14 | { 15 | 16 | 17 | public SenerarioMenu(String title) 18 | { 19 | super(title, 9 * 6); 20 | 21 | //draw all senerarios 22 | 23 | this.drawSenerarios(); 24 | } 25 | 26 | 27 | 28 | protected void drawSenerarios() 29 | { 30 | Iterator senerarios = MinecraftButPlugin.getPlugin().getScenerarioManager().getSenerarios().values().iterator(); 31 | int slot = 0; 32 | while(senerarios.hasNext()) 33 | { 34 | Senerario senerario = senerarios.next(); 35 | 36 | this.drawSenerario(slot, senerario); 37 | 38 | slot++; 39 | } 40 | } 41 | 42 | protected void drawSenerario(int slot, Senerario senerario) 43 | { 44 | this.setIcon(slot, 45 | new ItemStackBuilder(senerario.getIcon()) 46 | .displayName(CC.b + (senerario.isEnabled() ? CC.green : CC.red) + senerario.getName()) 47 | .lore(senerario.getDescription()) 48 | .addLore(CC.gray + "Id: " + senerario.getId()) 49 | .addLore(CC.gray + "Click to " + (senerario.isEnabled() ? "disable" : "enable")) 50 | .addLore("") 51 | .addLore(CC.green + "Credit: " + senerario.getCredit()), 52 | (player) -> { 53 | if(senerario.isEnabled()) 54 | { 55 | senerario.finish(); 56 | this.drawSenerario(slot, senerario); 57 | } 58 | else 59 | { 60 | senerario.start(); 61 | this.drawSenerario(slot, senerario); 62 | } 63 | 64 | }); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/listeners/WelcomeListener.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.listeners; 2 | 3 | import org.bukkit.World; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.event.EventHandler; 6 | import org.bukkit.event.Listener; 7 | import org.bukkit.event.player.PlayerJoinEvent; 8 | 9 | import games.bevs.minecraftbut.commons.TabUtils; 10 | import games.bevs.minecraftbut.commons.utils.CC; 11 | import games.bevs.minecraftbut.world.ButWorld; 12 | import lombok.AllArgsConstructor; 13 | import lombok.Getter; 14 | 15 | @AllArgsConstructor 16 | public class WelcomeListener implements Listener 17 | { 18 | private static final String CREDIT = CC.bAqua + " MinecraftBut " + CC.gray + "made by " + CC.bAqua + "Sprock" + CC.gray + "!"; 19 | 20 | @Getter 21 | private ButWorld butWorld; 22 | 23 | @EventHandler 24 | public void onJoin(PlayerJoinEvent e) 25 | { 26 | Player player = e.getPlayer(); 27 | World world = player.getWorld(); 28 | 29 | if(this.getButWorld().getWorld() != world) 30 | return; 31 | 32 | player.setPlayerListName(CC.gray + player.getName()); 33 | player.sendMessage(CREDIT); 34 | player.sendMessage(CC.gray + "Remember to give credit to the creators of the senerarios you use."); 35 | TabUtils.sendTab(player, CREDIT, ""); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/ScenerarioManager.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario; 2 | 3 | import java.util.HashMap; 4 | 5 | import lombok.Getter; 6 | 7 | public class ScenerarioManager 8 | { 9 | @Getter 10 | private HashMap senerarios; 11 | 12 | public ScenerarioManager() 13 | { 14 | this.senerarios = new HashMap<>(); 15 | } 16 | 17 | public void registerSenerario(Senerario senerario) 18 | { 19 | this.senerarios.put(senerario.getId().toLowerCase(), senerario); 20 | } 21 | 22 | public Senerario getSenerario(String name) 23 | { 24 | return this.getSenerarios().get(name.toLowerCase()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/Senerario.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario; 2 | 3 | import java.lang.reflect.Field; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.Material; 9 | import org.bukkit.command.CommandSender; 10 | import org.bukkit.entity.Player; 11 | import org.bukkit.event.HandlerList; 12 | import org.bukkit.event.Listener; 13 | 14 | import games.bevs.minecraftbut.MinecraftButPlugin; 15 | import games.bevs.minecraftbut.commons.Console; 16 | import games.bevs.minecraftbut.commons.utils.CC; 17 | import games.bevs.minecraftbut.senerario.options.Optional; 18 | import games.bevs.minecraftbut.world.ButWorld; 19 | import lombok.Getter; 20 | import lombok.NoArgsConstructor; 21 | import lombok.NonNull; 22 | import lombok.RequiredArgsConstructor; 23 | 24 | @Getter 25 | @RequiredArgsConstructor 26 | @NoArgsConstructor 27 | public class Senerario implements Listener 28 | { 29 | private @NonNull String name; 30 | private @NonNull ButWorld butWorld; 31 | private @NonNull Material icon; 32 | private @NonNull String[] description; 33 | private @NonNull String credit; 34 | private boolean enabled = false; 35 | private ArrayList runnableIds = new ArrayList<>(); 36 | 37 | public void repeat(Runnable run, long sprints) 38 | { 39 | int id = Bukkit.getScheduler().scheduleSyncRepeatingTask(MinecraftButPlugin.getPlugin(), run, sprints, sprints); 40 | this.runnableIds.add(id); 41 | } 42 | 43 | public void delay(Runnable run, long sprints) 44 | { 45 | Bukkit.getScheduler().scheduleSyncDelayedTask(MinecraftButPlugin.getPlugin(), run, sprints); 46 | } 47 | 48 | public void start() 49 | { 50 | if(this.enabled) return; 51 | 52 | Console.log("'" + this.getName() + "' has been Enabled"); 53 | Bukkit.getPluginManager().registerEvents(this, MinecraftButPlugin.getPlugin()); 54 | 55 | this.enabled = true; 56 | this.onStart(); 57 | } 58 | 59 | public void finish() 60 | { 61 | if(!this.enabled) return; 62 | 63 | Console.log("'" + this.getName() + "' has been Disabled"); 64 | this.onFinish(); 65 | 66 | this.enabled = false; 67 | 68 | this.runnableIds.forEach(id -> Bukkit.getScheduler().cancelTask(id)); 69 | this.runnableIds.clear(); 70 | 71 | HandlerList.unregisterAll(this); 72 | } 73 | 74 | public String getId() 75 | { 76 | return this.getClass().getSimpleName(); 77 | } 78 | 79 | /** 80 | * /MinecraftBut Senerario [senerario] [Option] [Args] 81 | * /MinecraftBut Senerario [senerario] help 82 | * @param sender 83 | * @param rawArgs 84 | * @return 85 | */ 86 | public boolean handleCommand(CommandSender sender, String[] rawArgs) 87 | { 88 | if(!(sender instanceof Player)) 89 | { 90 | sender.sendMessage(CC.red + "Sorry, you must be a player to do this command"); 91 | return false; 92 | } 93 | 94 | Player player = (Player) sender; 95 | 96 | if(rawArgs.length <= 2 || rawArgs[2].equalsIgnoreCase("help")) 97 | { 98 | this.onHelp(player); 99 | return true; 100 | } 101 | 102 | String option = rawArgs[2]; 103 | 104 | List argsList = new ArrayList<>(); 105 | for(int i = 3; i < rawArgs.length; i++) 106 | { 107 | argsList.add(rawArgs[i]); 108 | } 109 | 110 | this.onCommand(player, option, argsList.stream().toArray(String[]::new)); 111 | return true; 112 | } 113 | 114 | protected void onStart() 115 | { 116 | 117 | } 118 | 119 | protected void onFinish() 120 | { 121 | 122 | } 123 | 124 | /** 125 | * A command handler for the senerario 126 | * @param player 127 | * @param option, Option of the gamemodes aka the 3rd arg 128 | * @param args 129 | */ 130 | protected void onCommand(Player player, String option, String[] args) 131 | { 132 | if(option.equalsIgnoreCase("status")) 133 | { 134 | String state = args[0]; 135 | if(state.equalsIgnoreCase("true") 136 | || state.equalsIgnoreCase("enable") 137 | || state.equalsIgnoreCase("on")) 138 | { 139 | this.start(); 140 | } 141 | else 142 | { 143 | this.finish(); 144 | } 145 | return; 146 | } 147 | 148 | //handle auto optionals 149 | if(args.length > 0) 150 | { 151 | String fieldName = option; 152 | String value = args[0]; 153 | if(args.length > 1) 154 | { 155 | for(int i = 1; i < args.length; i++) 156 | { 157 | value += " " + args[i]; 158 | } 159 | } 160 | 161 | boolean success = false; 162 | 163 | Optional optional = this.getOptional(this, fieldName); 164 | if(optional == null) 165 | { 166 | player.sendMessage(CC.red + "Could not find '" + fieldName + "'!" ); 167 | this.onHelp(player); 168 | return; 169 | } 170 | 171 | try { 172 | if(editOptionalField(this, fieldName, value)) 173 | success = true; 174 | } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException e) { 175 | e.printStackTrace(); 176 | } 177 | 178 | if(success) 179 | { 180 | if(this.isEnabled()) 181 | { 182 | this.finish(); 183 | this.start(); 184 | } 185 | 186 | String message = CC.red + "Failed really bad, try hit up Sprock on Discord @ Heath#5377"; 187 | if(optional != null) 188 | { 189 | message = optional.successMessage(); 190 | if(message.length() < 3) 191 | message = Optional.SUCCESS_MESSAGE; 192 | 193 | message = message.replaceAll("%name%", fieldName); 194 | message = message.replaceAll("%value%", "'" + value + "'"); 195 | } 196 | player.sendMessage(message); 197 | } 198 | else 199 | { 200 | player.sendMessage(CC.red + "Something went wrong, incorrect type? int? true|false?"); 201 | } 202 | } 203 | else 204 | { 205 | this.onHelp(player); 206 | } 207 | } 208 | 209 | protected String withBaseCommand(String option, String args) 210 | { 211 | return CC.red + "/MinecraftBut Senerario " + this.getId() + " "+ option + " " + args; 212 | } 213 | 214 | protected String withBaseCommand(String option, Class clazz) 215 | { 216 | String args = ""; 217 | if(clazz == String.class) 218 | args = ""; 219 | else if(clazz == boolean.class) 220 | args = ""; 221 | else if(clazz == int.class) 222 | args = ""; 223 | return CC.red + "/MinecraftBut Senerario " + this.getId() + " "+ option + " " + args; 224 | } 225 | 226 | public void help(CommandSender sender) 227 | { 228 | this.onHelp(sender); 229 | } 230 | 231 | protected void onHelp(CommandSender sender) 232 | { 233 | sender.sendMessage(withBaseCommand("status", "")); 234 | for(Field optionField : this.getOptionalFields()) 235 | sender.sendMessage(withBaseCommand(optionField.getName(), optionField.getType())); 236 | } 237 | 238 | public List getOptionalFields() 239 | { 240 | List fields = new ArrayList<>(); 241 | for(Field field : this.getClass().getDeclaredFields()) 242 | { 243 | Optional optional = field.getAnnotation(Optional.class); 244 | if(optional == null) continue; 245 | fields.add(field); 246 | } 247 | return fields; 248 | } 249 | 250 | /** 251 | * Not the best method of doing this but it's good enough for this use case 252 | * @param senerario 253 | * @param variableName 254 | * @param value 255 | * @throws IllegalArgumentException 256 | * @throws IllegalAccessException 257 | * @throws NoSuchFieldException 258 | * @throws SecurityException 259 | * @return successful 260 | */ 261 | public boolean editOptionalField(Senerario senerario, String variableName, String value) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException 262 | { 263 | Field field = senerario.getClass().getDeclaredField(variableName); 264 | Optional optional = field.getAnnotation(Optional.class); 265 | if(optional == null) 266 | return false; 267 | 268 | field.setAccessible(true); 269 | 270 | if(field.getType() == String.class) 271 | { 272 | field.set(senerario, value); 273 | return true; 274 | } 275 | else if(field.getType() == int.class) 276 | { 277 | int valueAsInt = Integer.parseInt(value); 278 | field.set(senerario, valueAsInt); 279 | return true; 280 | } 281 | else if(field.getType() == boolean.class) 282 | { 283 | boolean valueAsBoolean = Boolean.parseBoolean(value.toLowerCase()); 284 | field.set(senerario, valueAsBoolean); 285 | return true; 286 | } 287 | 288 | return false; 289 | } 290 | 291 | public Optional getOptional(Senerario senerario, String fieldName) 292 | { 293 | Field field; 294 | Optional optional = null; 295 | try { 296 | field = senerario.getClass().getDeclaredField(fieldName); 297 | optional = field.getAnnotation(Optional.class); 298 | } catch (NoSuchFieldException | SecurityException e) { 299 | // e.printStackTrace();//ssssshhh i know baby 300 | } 301 | return optional; 302 | } 303 | } 304 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/options/DataType.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.options; 2 | 3 | public enum DataType 4 | { 5 | TICKS, SECONDS, Y; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/options/Optional.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.options; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | import games.bevs.minecraftbut.commons.utils.CC; 9 | 10 | /** 11 | * Used so that we can configure variables with commands 12 | */ 13 | @Target(value={ElementType.FIELD}) 14 | @Retention(value=RetentionPolicy.RUNTIME) 15 | public @interface Optional 16 | { 17 | public static final String SUCCESS_MESSAGE = CC.green + "Updated %name% to %value%"; 18 | /** 19 | * if the option requires reloading the scenerario 20 | * such as schudalers. 21 | * @return requires reload 22 | */ 23 | public boolean reload() default false; 24 | /** 25 | * %Name% is the name of the variable 26 | * %value% is the new value of the variable 27 | * @return message sent to player when command works 28 | */ 29 | public String successMessage() default ""; 30 | 31 | public String description() default "Unknown"; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/AnvilRain.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.block.Block; 5 | import org.bukkit.entity.Entity; 6 | import org.bukkit.entity.EntityType; 7 | import org.bukkit.entity.FallingBlock; 8 | import org.bukkit.entity.LivingEntity; 9 | import org.bukkit.event.EventHandler; 10 | import org.bukkit.event.entity.EntityChangeBlockEvent; 11 | import org.bukkit.event.entity.EntityDamageEvent.DamageCause; 12 | 13 | import games.bevs.minecraftbut.commons.FallingBlockUtils; 14 | import games.bevs.minecraftbut.commons.XMaterial; 15 | import games.bevs.minecraftbut.commons.utils.MathUtils; 16 | import games.bevs.minecraftbut.senerario.Senerario; 17 | import games.bevs.minecraftbut.senerario.options.Optional; 18 | import games.bevs.minecraftbut.world.ButWorld; 19 | 20 | public class AnvilRain extends Senerario { 21 | @Optional 22 | private int heightFromGround = 50; 23 | @Optional 24 | private int secondsBetweenAnvilFall = 60; 25 | 26 | public AnvilRain(ButWorld butWorld) { 27 | super("Anvil Rain", butWorld, XMaterial.ANVIL.parseMaterial(), 28 | new String[] { "Anvils will spawn from the sky every minute" }, "BadBoyHalo"); 29 | } 30 | 31 | @Override 32 | public void onStart() { 33 | this.repeat(() -> { 34 | 35 | for (int x = this.getButWorld().getMinLocation().getBlockX(); x < this.getButWorld().getMaxLocation() 36 | .getBlockX(); x += MathUtils.getRandom().nextInt(8)) { 37 | for (int z = this.getButWorld().getMinLocation().getBlockZ(); z < this.getButWorld().getMaxLocation() 38 | .getBlockZ(); z += MathUtils.getRandom().nextInt(8)) { 39 | int highest = this.getButWorld().getWorld().getHighestBlockYAt(x, z); 40 | int y = highest + this.heightFromGround; 41 | Block block = this.getButWorld().getWorld().getBlockAt(x, y, z); 42 | 43 | Material mat = Material.ANVIL; 44 | block.getWorld().spawnFallingBlock(block.getLocation(), mat, (byte) 0); 45 | } 46 | } 47 | }, 20l * secondsBetweenAnvilFall); 48 | } 49 | 50 | @Override 51 | public void onFinish() { 52 | 53 | } 54 | 55 | @EventHandler 56 | public void onBlockFall(EntityChangeBlockEvent e) { 57 | if (e.getEntityType() == EntityType.FALLING_BLOCK) 58 | { 59 | FallingBlock fallingBlock = (FallingBlock) e.getEntity(); 60 | if(FallingBlockUtils.fallingBlockMatch(fallingBlock, XMaterial.ANVIL.parseMaterial())) 61 | { 62 | for(Entity nearbyEntity : fallingBlock.getNearbyEntities(1.1, 1.2, 1.1)) 63 | { 64 | if(nearbyEntity == fallingBlock) 65 | continue; 66 | 67 | if(nearbyEntity instanceof LivingEntity) 68 | ((LivingEntity) nearbyEntity).damage(MathUtils.getRandom().nextInt(8) + 12); 69 | } 70 | fallingBlock.remove(); 71 | e.setCancelled(true); 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/BedRockTrail.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import java.util.HashMap; 4 | import java.util.UUID; 5 | 6 | import org.apache.commons.lang3.math.NumberUtils; 7 | import org.bukkit.GameMode; 8 | import org.bukkit.Location; 9 | import org.bukkit.Material; 10 | import org.bukkit.block.Block; 11 | import org.bukkit.block.BlockFace; 12 | import org.bukkit.entity.Player; 13 | import org.bukkit.event.EventHandler; 14 | import org.bukkit.event.entity.EntityDamageEvent; 15 | import org.bukkit.event.player.PlayerMoveEvent; 16 | 17 | import games.bevs.minecraftbut.commons.Console; 18 | import games.bevs.minecraftbut.commons.utils.CC; 19 | import games.bevs.minecraftbut.senerario.Senerario; 20 | import games.bevs.minecraftbut.world.ButWorld; 21 | 22 | public class BedRockTrail extends Senerario 23 | { 24 | private HashMap lastLocation = new HashMap<>(); 25 | 26 | 27 | private double bedrockCheckSpeed = 0.2; 28 | public BedRockTrail(ButWorld butWorld) 29 | { 30 | super("Bedrock Trail", butWorld, Material.BEDROCK, new String[] {"Where ever you move, you leave a bedrock trail"}, "WilburSoot"); 31 | } 32 | 33 | 34 | @Override 35 | public void onStart() 36 | { 37 | 38 | } 39 | 40 | @Override 41 | public void onFinish() 42 | { 43 | 44 | } 45 | 46 | @EventHandler 47 | public void onMove(PlayerMoveEvent e) 48 | { 49 | Player player = e.getPlayer(); 50 | 51 | if(player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) 52 | return; 53 | Location lastLoc = lastLocation.get(player.getUniqueId()); 54 | if(lastLoc == null) 55 | { 56 | this.lastLocation.put(player.getUniqueId(), player.getLocation()); 57 | return; 58 | } 59 | 60 | Location lastLoc2D = lastLoc.clone(); 61 | lastLoc2D.setY(0); 62 | 63 | Location loc2d = player.getLocation().clone(); 64 | loc2d.setY(0); 65 | 66 | if(lastLoc2D.distance(loc2d) < 1.30) 67 | return; 68 | 69 | Block block = lastLoc.getBlock(); 70 | block.setType(Material.BEDROCK); 71 | block.getRelative(BlockFace.UP).setType(Material.BEDROCK); 72 | 73 | this.lastLocation.put(player.getUniqueId(), player.getLocation()); 74 | } 75 | 76 | @EventHandler 77 | public void onDamage(EntityDamageEvent e) 78 | { 79 | 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/BlockPotions.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.event.EventHandler; 6 | import org.bukkit.event.block.BlockBreakEvent; 7 | import org.bukkit.potion.PotionEffect; 8 | import org.bukkit.potion.PotionEffectType; 9 | 10 | import games.bevs.minecraftbut.commons.XMaterial; 11 | import games.bevs.minecraftbut.commons.utils.MathUtils; 12 | import games.bevs.minecraftbut.senerario.Senerario; 13 | import games.bevs.minecraftbut.senerario.options.Optional; 14 | import games.bevs.minecraftbut.world.ButWorld; 15 | 16 | public class BlockPotions extends Senerario 17 | { 18 | private static final PotionEffectType[] EFFECTS = new PotionEffectType[] { PotionEffectType.BLINDNESS, PotionEffectType.DAMAGE_RESISTANCE, PotionEffectType.HEALTH_BOOST, PotionEffectType.JUMP, PotionEffectType.SPEED, PotionEffectType.HUNGER, PotionEffectType.HARM, PotionEffectType.CONFUSION, PotionEffectType.INVISIBILITY, PotionEffectType.POISON, PotionEffectType.SATURATION, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.WITHER, PotionEffectType.WEAKNESS}; 19 | @Optional 20 | private int maxPotionLevel = 5; 21 | @Optional 22 | private int minPotionLevel = 0; 23 | 24 | @Optional 25 | private int maxPotionSeconds = 30; 26 | @Optional 27 | private int minPotionSeconds = 10; 28 | 29 | public BlockPotions(ButWorld butWorld) 30 | { 31 | super("Block Potion", butWorld, XMaterial.POTION.parseMaterial(), new String[] {"Blocks with potion effects"}, "BajanCandian"); 32 | } 33 | 34 | @Override 35 | public void onStart() 36 | { 37 | 38 | } 39 | 40 | @Override 41 | public void onFinish() 42 | { 43 | 44 | } 45 | 46 | /** 47 | * Apply a random potion to the player using the options defend above 48 | * @param player 49 | */ 50 | public void applyPotion(Player player) 51 | { 52 | //random effect 53 | PotionEffectType effectType = EFFECTS[MathUtils.getRandom().nextInt(EFFECTS.length)]; 54 | int secondsDuration = MathUtils.getRandom().nextInt(this.maxPotionSeconds - this.minPotionSeconds) + this.minPotionSeconds; 55 | int potionLevel = MathUtils.getRandom().nextInt(this.maxPotionLevel - this.minPotionLevel) + this.minPotionLevel; 56 | player.addPotionEffect(new PotionEffect(effectType, 20 * secondsDuration, potionLevel, true, false)); 57 | } 58 | 59 | @EventHandler 60 | public void onBreak(BlockBreakEvent e) 61 | { 62 | Player player = e.getPlayer(); 63 | if(player.getGameMode() == GameMode.CREATIVE) return; 64 | this.applyPotion(player); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/EnderDragonAppears.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.Material; 5 | import org.bukkit.block.Block; 6 | import org.bukkit.entity.EnderDragon; 7 | import org.bukkit.entity.Entity; 8 | 9 | import games.bevs.minecraftbut.commons.utils.CC; 10 | import games.bevs.minecraftbut.senerario.Senerario; 11 | import games.bevs.minecraftbut.world.ButWorld; 12 | import net.md_5.bungee.api.ChatColor; 13 | 14 | public class EnderDragonAppears extends Senerario 15 | { 16 | private int heightY = 140; 17 | public EnderDragonAppears(ButWorld butWorld) 18 | { 19 | super("An Enderdragon appears", butWorld, Material.DRAGON_EGG, new String[]{ "Every 3 minutes (Or the amount of time you set) an ender dragon will spawn" }, "Sprock"); 20 | } 21 | 22 | 23 | @Override 24 | public void onStart() 25 | { 26 | Block block = this.getButWorld().getWorld().getBlockAt(0, heightY, 0); 27 | 28 | this.repeat(() -> { 29 | EnderDragon enderDragon = (EnderDragon) block.getWorld().spawn(block.getLocation(), EnderDragon.class); 30 | enderDragon.setCustomName(ChatColor.RED + "" + ChatColor.BOLD + "Subscribe!"); 31 | enderDragon.setCustomNameVisible(true); 32 | Bukkit.broadcastMessage(CC.bold + "A dragon has spawned"); 33 | }, 20l * 60 * 2); 34 | } 35 | 36 | @Override 37 | public void onFinish() 38 | { 39 | for(Entity entity : this.getButWorld().getWorld().getEntities()) 40 | { 41 | if(entity instanceof EnderDragon) 42 | entity.remove(); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/FasterAndFaster.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.player.PlayerJoinEvent; 9 | import org.bukkit.potion.PotionEffect; 10 | import org.bukkit.potion.PotionEffectType; 11 | 12 | import games.bevs.minecraftbut.senerario.Senerario; 13 | import games.bevs.minecraftbut.senerario.options.Optional; 14 | import games.bevs.minecraftbut.world.ButWorld; 15 | 16 | public class FasterAndFaster extends Senerario 17 | { 18 | @Optional(reload=true) 19 | private int secondsPerLevelUp = 40; 20 | 21 | @Optional 22 | private int currentLevel = 0; 23 | 24 | public FasterAndFaster(ButWorld butWorld) 25 | { 26 | super("Everyones Speed increases", butWorld, Material.LEATHER_BOOTS, new String[] { "Every minute your speed gets faster" }, "Dream"); 27 | } 28 | 29 | 30 | @Override 31 | public void onStart() 32 | { 33 | this.repeat(() -> { 34 | currentLevel++; 35 | for(Player player : Bukkit.getOnlinePlayers()) 36 | if(player.getGameMode() == GameMode.SURVIVAL) 37 | applySpeed(player); 38 | }, 20l * secondsPerLevelUp); 39 | } 40 | 41 | @Override 42 | public void onFinish() 43 | { 44 | Bukkit.getOnlinePlayers().forEach(player -> player.removePotionEffect(PotionEffectType.SPEED)); 45 | } 46 | 47 | @EventHandler 48 | public void onJoin(PlayerJoinEvent e) 49 | { 50 | Player player = e.getPlayer(); 51 | applySpeed(player); 52 | } 53 | 54 | public void applySpeed(Player player) 55 | { 56 | player.removePotionEffect(PotionEffectType.SPEED); 57 | player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20 * 100, this.currentLevel, true, false)); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/LinkedDeaths.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.entity.PlayerDeathEvent; 9 | import org.bukkit.potion.PotionEffectType; 10 | 11 | import games.bevs.minecraftbut.commons.utils.CC; 12 | import games.bevs.minecraftbut.senerario.Senerario; 13 | import games.bevs.minecraftbut.senerario.options.Optional; 14 | import games.bevs.minecraftbut.world.ButWorld; 15 | 16 | public class LinkedDeaths extends Senerario 17 | { 18 | @Optional 19 | private long cooldownAfterFirstDeath = 8000l; 20 | private long lastDeathTimestamp = 0l; 21 | 22 | public LinkedDeaths(ButWorld butWorld) 23 | { 24 | super("Linked Deaths", butWorld, Material.FISHING_ROD, new String[] {"One player dies, everyone dies"}, "CallMeCarson"); 25 | } 26 | 27 | 28 | 29 | 30 | @Override 31 | public void onStart() 32 | { 33 | 34 | } 35 | 36 | @Override 37 | public void onFinish() 38 | { 39 | 40 | } 41 | 42 | @EventHandler 43 | public void onDeath(PlayerDeathEvent e) 44 | { 45 | Player player = e.getEntity(); 46 | if(System.currentTimeMillis() - this.lastDeathTimestamp < cooldownAfterFirstDeath) 47 | return; 48 | this.lastDeathTimestamp = System.currentTimeMillis(); 49 | 50 | Bukkit.broadcastMessage(CC.b + player.getName() + " has messed it up for everyone!"); 51 | Bukkit.getOnlinePlayers().forEach(other -> { 52 | if(other.getGameMode() == GameMode.SURVIVAL && !other.isDead()) 53 | other.damage(10000); 54 | }); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/LinkedHealth.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import java.util.HashMap; 4 | 5 | import org.apache.commons.lang3.tuple.Pair; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.GameMode; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.entity.EntityDamageEvent; 12 | import org.bukkit.potion.PotionEffect; 13 | 14 | import games.bevs.minecraftbut.senerario.Senerario; 15 | import games.bevs.minecraftbut.senerario.options.Optional; 16 | import games.bevs.minecraftbut.world.ButWorld; 17 | 18 | public class LinkedHealth extends Senerario 19 | { 20 | @Optional 21 | private long cooldownAfterFirstDeath = 500l; 22 | private long lastDeathTimestamp = 0l; 23 | 24 | public LinkedHealth(ButWorld butWorld) 25 | { 26 | super("Linked Health", butWorld, Material.APPLE, new String[] {"All players share health"}, "BadBoyHalo"); 27 | } 28 | 29 | 30 | @Override 31 | public void onStart() 32 | { 33 | 34 | } 35 | 36 | @Override 37 | public void onFinish() 38 | { 39 | 40 | } 41 | 42 | @EventHandler 43 | public void onDamage(EntityDamageEvent e) 44 | { 45 | if(!(e.getEntity() instanceof Player)) 46 | return; 47 | 48 | if(System.currentTimeMillis() - this.lastDeathTimestamp < cooldownAfterFirstDeath) 49 | return; 50 | this.lastDeathTimestamp = System.currentTimeMillis(); 51 | 52 | double damageTaken = e.getFinalDamage(); 53 | Bukkit.getOnlinePlayers().forEach(other -> { 54 | if(other.getGameMode() == GameMode.SURVIVAL && !other.isDead()) 55 | other.damage(damageTaken); 56 | }); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/MaducerWorld.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.apache.commons.lang3.math.NumberUtils; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.Material; 6 | import org.bukkit.block.Block; 7 | import org.bukkit.block.BlockFace; 8 | import org.bukkit.command.CommandSender; 9 | import org.bukkit.entity.Player; 10 | 11 | import games.bevs.minecraftbut.commons.Console; 12 | import games.bevs.minecraftbut.commons.XMaterial; 13 | import games.bevs.minecraftbut.commons.utils.CC; 14 | import games.bevs.minecraftbut.commons.utils.MathUtils; 15 | import games.bevs.minecraftbut.senerario.Senerario; 16 | import games.bevs.minecraftbut.senerario.options.Optional; 17 | import games.bevs.minecraftbut.world.ButWorld; 18 | import net.md_5.bungee.api.ChatColor; 19 | 20 | public class MaducerWorld extends Senerario 21 | { 22 | @Optional 23 | private int decaysPerSecond = 40; 24 | 25 | public MaducerWorld(ButWorld butWorld) 26 | { 27 | super("Maducer World", butWorld, Material.BRICK, new String[] {"The world slowly turns to bedrock"}, "Dream"); 28 | } 29 | 30 | 31 | @Override 32 | public void onStart() 33 | { 34 | this.repeat(() -> { 35 | for(int i = 0; i < decaysPerSecond; i++) 36 | { 37 | int ranX = MathUtils.getRandom().nextInt(this.getButWorld().getMaxLocation().getBlockX() - this.getButWorld().getMinLocation().getBlockX()) + this.getButWorld().getMinLocation().getBlockX(); 38 | int ranY = MathUtils.getRandom().nextInt(this.getButWorld().getWorld().getMaxHeight()); 39 | int ranZ = MathUtils.getRandom().nextInt(this.getButWorld().getMaxLocation().getBlockZ() - this.getButWorld().getMinLocation().getBlockZ()) + this.getButWorld().getMinLocation().getBlockZ(); 40 | Block block = this.getButWorld().getWorld().getBlockAt(ranX, ranY, ranZ); 41 | if(block == null) continue; 42 | 43 | if(block.getType() == Material.BEDROCK) 44 | continue; 45 | 46 | block.setType(Material.BEDROCK); 47 | } 48 | }, 20l * 1); 49 | } 50 | 51 | @Override 52 | public void onFinish() 53 | { 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/MobsMultiple.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.entity.Entity; 4 | import org.bukkit.entity.LivingEntity; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.entity.EntityDamageByEntityEvent; 8 | 9 | import games.bevs.minecraftbut.commons.XMaterial; 10 | import games.bevs.minecraftbut.senerario.Senerario; 11 | import games.bevs.minecraftbut.senerario.options.Optional; 12 | import games.bevs.minecraftbut.world.ButWorld; 13 | 14 | public class MobsMultiple extends Senerario 15 | { 16 | @Optional 17 | private int multiplier = 10; 18 | 19 | public MobsMultiple(ButWorld butWorld) 20 | { 21 | super("Mobs multiply", butWorld, XMaterial.EGG.parseMaterial(), new String[] {"Mobs multiply when you hit them"}, "Badboyhalo"); 22 | } 23 | 24 | @Override 25 | public void onStart() 26 | { 27 | 28 | } 29 | 30 | @Override 31 | public void onFinish() 32 | { 33 | 34 | } 35 | 36 | @EventHandler 37 | public void onDamage(EntityDamageByEntityEvent e) 38 | { 39 | Entity damager = e.getDamager(); 40 | if(!(damager instanceof Player)) return; 41 | if(!(e.getEntity() instanceof LivingEntity)) return; 42 | if(e.getEntity() instanceof Player) return; 43 | 44 | Entity entity = e.getEntity(); 45 | for(int i = 0; i < this.multiplier; i++) 46 | entity.getWorld().spawnEntity(entity.getLocation(), entity.getType()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/NoJump.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.player.PlayerJoinEvent; 9 | import org.bukkit.potion.PotionEffect; 10 | import org.bukkit.potion.PotionEffectType; 11 | 12 | import games.bevs.minecraftbut.senerario.Senerario; 13 | import games.bevs.minecraftbut.world.ButWorld; 14 | 15 | public class NoJump extends Senerario 16 | { 17 | public NoJump(ButWorld butWorld) 18 | { 19 | super("No Jump", butWorld, Material.RABBIT_FOOT, new String[] {"Jumping is disabled"}, "Sprock"); 20 | } 21 | 22 | private void applyNoJump(Player player) 23 | { 24 | if(player.getGameMode() == GameMode.SURVIVAL) 25 | { 26 | player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20 * 60 * 60, 20 * 20000, false, false)); 27 | } 28 | } 29 | 30 | 31 | @Override 32 | public void onStart() 33 | { 34 | Bukkit.getOnlinePlayers().forEach(player -> { 35 | applyNoJump(player); 36 | }); 37 | } 38 | 39 | @Override 40 | public void onFinish() 41 | { 42 | Bukkit.getOnlinePlayers().forEach(player -> { 43 | if(player.getGameMode() == GameMode.SURVIVAL) 44 | { 45 | player.removePotionEffect(PotionEffectType.JUMP); 46 | } 47 | }); 48 | } 49 | 50 | @EventHandler 51 | public void onJoin(PlayerJoinEvent e) 52 | { 53 | Player player = e.getPlayer(); 54 | applyNoJump(player); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/OneHit.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.Material; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.player.PlayerJoinEvent; 9 | 10 | import games.bevs.minecraftbut.senerario.Senerario; 11 | import games.bevs.minecraftbut.world.ButWorld; 12 | 13 | public class OneHit extends Senerario 14 | { 15 | public OneHit(ButWorld butWorld) 16 | { 17 | super("One Hit", butWorld, Material.BONE, new String[] {"You are given only one heart"}, "Sprock"); 18 | } 19 | 20 | private void applyOneHit(Player player) 21 | { 22 | if(player.getGameMode() == GameMode.SURVIVAL) 23 | { 24 | player.setMaxHealth(2); 25 | } 26 | } 27 | 28 | 29 | @Override 30 | public void onStart() 31 | { 32 | Bukkit.getOnlinePlayers().forEach(player -> { 33 | applyOneHit(player); 34 | }); 35 | } 36 | 37 | @Override 38 | public void onFinish() 39 | { 40 | Bukkit.getOnlinePlayers().forEach(player -> { 41 | if(player.getGameMode() == GameMode.SURVIVAL) 42 | { 43 | player.setMaxHealth(20); 44 | } 45 | }); 46 | } 47 | 48 | @EventHandler 49 | public void onJoin(PlayerJoinEvent e) 50 | { 51 | Player player = e.getPlayer(); 52 | applyOneHit(player); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/RainingBlocks.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.block.Block; 5 | 6 | import games.bevs.minecraftbut.commons.XMaterial; 7 | import games.bevs.minecraftbut.commons.utils.MathUtils; 8 | import games.bevs.minecraftbut.senerario.Senerario; 9 | import games.bevs.minecraftbut.world.ButWorld; 10 | 11 | public class RainingBlocks extends Senerario 12 | { 13 | private static final Material[] FALLING_BLOCK_MATERIALS = new Material[] { Material.DIAMOND_BLOCK, Material.DIAMOND_ORE, Material.GOLD_ORE, Material.IRON_ORE, Material.COAL_ORE, Material.COBBLESTONE, Material.STONE, Material.ANVIL, Material.BARRIER, Material.BEDROCK, Material.DIRT, Material.GRASS, Material.GRAVEL, XMaterial.MELON.parseMaterial(), Material.SAND, Material.SANDSTONE, XMaterial.CRAFTING_TABLE.parseMaterial(), Material.IRON_BLOCK, Material.COAL_BLOCK, Material.JUKEBOX, Material.NOTE_BLOCK, Material.GLOWSTONE, Material.FURNACE, Material.ENDER_CHEST, Material.CHEST, Material.HOPPER, XMaterial.BIRCH_WOOD.parseMaterial(), XMaterial.BIRCH_LOG.parseMaterial(), Material.BRICK, Material.DISPENSER }; 14 | private int hieghtY = 140; 15 | 16 | 17 | public RainingBlocks(ButWorld butWorld) 18 | { 19 | super("Raining Blocks", butWorld, XMaterial.COMMAND_BLOCK.parseMaterial(), new String[] {"Random blocks will fall from the sky"}, "Sprock"); 20 | } 21 | 22 | @SuppressWarnings("deprecation") 23 | @Override 24 | public void onStart() 25 | { 26 | int lengthOfMats = FALLING_BLOCK_MATERIALS.length; 27 | this.repeat(() -> { 28 | 29 | 30 | for(int x = this.getButWorld().getMinLocation().getBlockX(); x < this.getButWorld().getMaxLocation().getBlockX(); x+= MathUtils.getRandom().nextInt(8)) 31 | { 32 | for(int z = this.getButWorld().getMinLocation().getBlockZ(); z < this.getButWorld().getMaxLocation().getBlockZ(); z+= MathUtils.getRandom().nextInt(8)) 33 | { 34 | if(MathUtils.getRandom().nextInt(10) < 8) continue; 35 | Block block = this.getButWorld().getWorld().getBlockAt( x, hieghtY, z); 36 | 37 | Material mat = FALLING_BLOCK_MATERIALS[MathUtils.getRandom().nextInt(lengthOfMats)]; 38 | block.getWorld().spawnFallingBlock(block.getLocation(), mat, (byte) 0); 39 | } 40 | } 41 | 42 | if(MathUtils.getRandom().nextInt(10) >= 8) 43 | hieghtY--; 44 | }, 20l * 5); 45 | } 46 | 47 | @Override 48 | public void onFinish() 49 | { 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/ShrinkingInventory.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.GameMode; 8 | import org.bukkit.Material; 9 | import org.bukkit.entity.Player; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.entity.PlayerDeathEvent; 12 | import org.bukkit.event.inventory.InventoryClickEvent; 13 | import org.bukkit.event.player.PlayerDropItemEvent; 14 | import org.bukkit.event.player.PlayerRespawnEvent; 15 | import org.bukkit.inventory.ItemStack; 16 | 17 | import games.bevs.minecraftbut.commons.utils.CC; 18 | import games.bevs.minecraftbut.commons.utils.ItemStackBuilder; 19 | import games.bevs.minecraftbut.senerario.Senerario; 20 | import games.bevs.minecraftbut.senerario.options.Optional; 21 | import games.bevs.minecraftbut.world.ButWorld; 22 | 23 | /** 24 | * 25 | */ 26 | public class ShrinkingInventory extends Senerario 27 | { 28 | 29 | /** 30 | * 35 32 29 26 23 20 17 14 11 8 5 2 31 | * 34 31 28 25 22 19 16 13 10 7 4 1 32 | * 33 30 27 24 21 18 15 12 9 6 3 0 33 | * 34 | * 9 10 11 12 13 14 15 16 17 35 | * 18 19 20 21 22 23 24 25 26 36 | * 27 28 29 30 31 32 33 34 35 37 | * 0 1 2 3 4 5 6 7 8 38 | */ 39 | private static int[] MAPPINGS = {8, 35, 26, 17, 40 | 7, 34, 25, 16, 41 | 6, 33, 24, 15, 42 | 5, 32, 23, 14, 43 | 4, 31, 22, 13, 44 | 3, 30, 21, 12, 45 | 2, 29, 20, 11, 46 | 1, 28, 19, 10, 47 | 0, 27, 18, 9 48 | }; 49 | @Optional(reload = true) 50 | private int secondsTillSpotFills = 60 * 2; 51 | @Optional 52 | private int fillSlotIndex = 0; 53 | 54 | private static final ItemStack BLOCKER_ITEM = new ItemStackBuilder(Material.BEDROCK).displayName(CC.bRed + "BLOCKED SLOT").build(); 55 | 56 | 57 | public ShrinkingInventory(ButWorld butWorld) 58 | { 59 | super("Shrinking Inventories", butWorld, Material.CHEST, new String[] {"You get less and less inventory space"}, "GeorgeNotFound"); 60 | } 61 | 62 | 63 | @Override 64 | public void onStart() 65 | { 66 | this.repeat(() -> { 67 | Bukkit.getOnlinePlayers().forEach(player -> { 68 | fillToSlot(player); 69 | }); 70 | }, secondsTillSpotFills * 20); 71 | } 72 | 73 | @Override 74 | public void onFinish() 75 | { 76 | Bukkit.getOnlinePlayers().forEach(player -> { 77 | List itemsToRemove = new ArrayList<>(30); 78 | for(ItemStack item : player.getInventory()) 79 | if(item.getType() == Material.BEDROCK) 80 | itemsToRemove.add(item); 81 | itemsToRemove.forEach(item -> player.getInventory().remove(item)); 82 | }); 83 | } 84 | 85 | 86 | public void fillToSlot(Player player) 87 | { 88 | for(int i = 0; i < this.fillSlotIndex; i++) 89 | { 90 | int slot = MAPPINGS[i]; 91 | player.getInventory().setItem(slot, BLOCKER_ITEM); 92 | } 93 | } 94 | 95 | @EventHandler 96 | public void onDeath(PlayerDeathEvent e) 97 | { 98 | List itemsToRemove = new ArrayList<>(30); 99 | for(ItemStack item : e.getDrops()) 100 | if(item.getType() == Material.BEDROCK) 101 | itemsToRemove.add(item); 102 | itemsToRemove.forEach(item -> e.getDrops().remove(item)); 103 | } 104 | 105 | @EventHandler 106 | public void onRespawn(PlayerRespawnEvent e) 107 | { 108 | fillToSlot(e.getPlayer()); 109 | } 110 | 111 | @EventHandler 112 | public void onDrop(PlayerDropItemEvent e) 113 | { 114 | Player player = e.getPlayer(); 115 | if(player.getGameMode() != GameMode.SURVIVAL) return; 116 | if(e.getItemDrop() == null) return; 117 | if(e.getItemDrop().getItemStack() == null) return; 118 | if(e.getItemDrop().getItemStack().getType() == Material.BEDROCK) 119 | e.setCancelled(true); 120 | } 121 | 122 | @EventHandler 123 | public void onInventory(InventoryClickEvent e) 124 | { 125 | Player player = (Player) e.getWhoClicked(); 126 | if(e.getInventory() == null) return; 127 | ItemStack item = e.getCurrentItem(); 128 | if(item == null) return; 129 | if(item.getType() == Material.BEDROCK) 130 | e.setCancelled(true); 131 | 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/SunDeath.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import games.bevs.minecraftbut.senerario.Senerario; 4 | import games.bevs.minecraftbut.world.ButWorld; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.GameMode; 7 | import org.bukkit.Location; 8 | import org.bukkit.Material; 9 | import org.bukkit.block.Block; 10 | import org.bukkit.block.BlockFace; 11 | import org.bukkit.entity.Player; 12 | import org.bukkit.event.EventHandler; 13 | import org.bukkit.event.entity.EntityDamageEvent; 14 | import org.bukkit.event.player.PlayerMoveEvent; 15 | 16 | public class SunDeath extends Senerario 17 | { 18 | 19 | public SunDeath(ButWorld butWorld) 20 | { 21 | super("Sun Death", butWorld, Material.LAVA_BUCKET, new String[] {"You die in the sun"}, "Sprock"); 22 | } 23 | 24 | 25 | @Override 26 | public void onStart() 27 | { 28 | this.repeat(() -> { 29 | for (Player onlinePlayer : Bukkit.getOnlinePlayers()) 30 | { 31 | long worldTime = onlinePlayer.getWorld().getTime() % 24_000; 32 | if(!(worldTime > 0 && worldTime < 12_800)) 33 | return; 34 | 35 | if(onlinePlayer.getGameMode() != GameMode.SURVIVAL) 36 | continue; 37 | 38 | if(onlinePlayer.isDead()) 39 | continue; 40 | 41 | if(this.underSunLight(onlinePlayer)) 42 | onlinePlayer.damage(1000000.0); 43 | } 44 | }, 10l); 45 | } 46 | 47 | @Override 48 | public void onFinish() 49 | { 50 | 51 | } 52 | 53 | public boolean underSunLight(Player player) 54 | { 55 | Location loc = player.getLocation(); 56 | Block currentBlock = loc.getBlock(); 57 | while(currentBlock.getY() < 255) 58 | { 59 | if(currentBlock.getType() != Material.AIR) 60 | return false; 61 | currentBlock = currentBlock.getRelative(BlockFace.UP); 62 | } 63 | return true; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/TNTOnSelf.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.apache.commons.lang3.math.NumberUtils; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.GameMode; 6 | import org.bukkit.Location; 7 | import org.bukkit.Material; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.entity.TNTPrimed; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.player.PlayerJoinEvent; 12 | import org.bukkit.potion.PotionEffect; 13 | import org.bukkit.potion.PotionEffectType; 14 | 15 | import games.bevs.minecraftbut.commons.Console; 16 | import games.bevs.minecraftbut.commons.utils.CC; 17 | import games.bevs.minecraftbut.senerario.Senerario; 18 | import games.bevs.minecraftbut.senerario.options.Optional; 19 | import games.bevs.minecraftbut.world.ButWorld; 20 | 21 | public class TNTOnSelf extends Senerario 22 | { 23 | @Optional 24 | private int triggerBelow = 200; 25 | @Optional(reload = true) 26 | private int secondsBetweenTNT = 30; 27 | 28 | public TNTOnSelf(ButWorld butWorld) 29 | { 30 | super("TNT On Self", butWorld, Material.TNT, new String[] {"TNT will spawn on you every minute"}, "WilburSoot"); 31 | } 32 | 33 | 34 | @Override 35 | public void onStart() 36 | { 37 | this.repeat(() -> { 38 | for(Player player : Bukkit.getOnlinePlayers()) 39 | { 40 | Location location = player.getLocation(); 41 | 42 | //Only target players in survival 43 | if(player.getGameMode() != GameMode.SURVIVAL) 44 | continue; 45 | 46 | if(player.isDead()) 47 | continue; 48 | 49 | if(location.getBlockY() < this.triggerBelow) 50 | player.getWorld().spawn(location, TNTPrimed.class); 51 | } 52 | }, 20l * secondsBetweenTNT); 53 | } 54 | 55 | @Override 56 | public void onFinish() 57 | { 58 | 59 | } 60 | 61 | // @Override 62 | // protected void onCommand(Player player, String option, String[] args) 63 | // { 64 | // super.onCommand(player, option, args); 65 | // 66 | // if(args.length != 1) 67 | // { 68 | // this.onHelp(player); 69 | // player.sendMessage(CC.red + "incorrect number of args"); 70 | // } 71 | // 72 | // String firstArg = args[0]; 73 | // int argAsInt = 0; 74 | // if(NumberUtils.isNumber(firstArg)) 75 | // { 76 | // argAsInt = Integer.parseInt(firstArg); 77 | // } 78 | // else 79 | // { 80 | // this.onHelp(player); 81 | // player.sendMessage(CC.red + "Must be a number"); 82 | // return; 83 | // } 84 | // 85 | // if(option.equalsIgnoreCase("triggerBelow")) 86 | // { 87 | // this.triggerBelow = argAsInt; 88 | // Console.log("TNT will go off under " + this.triggerBelow); 89 | // } 90 | // 91 | // if(option.equalsIgnoreCase("LavaSpeed")) 92 | // { 93 | // this.secondsBetweenTNT = argAsInt; 94 | // if(this.isEnabled()) 95 | // { 96 | // this.finish(); 97 | // this.start(); 98 | // } 99 | // Console.log("Tnt will spawn every " + argAsInt + " seconds"); 100 | // 101 | // } 102 | // } 103 | 104 | // @Override 105 | // protected void onHelp(Player player) 106 | // { 107 | // super.onHelp(player); 108 | // 109 | // player.sendMessage(withBaseCommand("triggerBelow", "")); 110 | // player.sendMessage(withBaseCommand("secondsBetweenTNT", "")); 111 | // } 112 | 113 | } 114 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/TNTRain.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | 4 | import org.bukkit.block.Block; 5 | import org.bukkit.entity.TNTPrimed; 6 | 7 | import games.bevs.minecraftbut.commons.XMaterial; 8 | import games.bevs.minecraftbut.commons.utils.MathUtils; 9 | import games.bevs.minecraftbut.senerario.Senerario; 10 | import games.bevs.minecraftbut.world.ButWorld; 11 | 12 | public class TNTRain extends Senerario 13 | { 14 | private int hieghtY = 140; 15 | public TNTRain(ButWorld butWorld) 16 | { 17 | super("TNT Rain", butWorld, XMaterial.TNT.parseMaterial(), new String[] {"TNT will rain from the sky continusly"}, "WilburSoot"); 18 | } 19 | 20 | @Override 21 | public void onStart() 22 | { 23 | this.repeat(() -> { 24 | for(int x = this.getButWorld().getMinLocation().getBlockX(); x < this.getButWorld().getMaxLocation().getBlockX(); x+= (MathUtils.getRandom().nextInt(10) + 1)) 25 | { 26 | for(int z = this.getButWorld().getMinLocation().getBlockZ(); z < this.getButWorld().getMaxLocation().getBlockZ(); z+= (MathUtils.getRandom().nextInt(10) + 1)) 27 | { 28 | if(MathUtils.getRandom().nextInt(10) < 8) continue; 29 | int highest = this.getButWorld().getWorld().getHighestBlockYAt(x, z); 30 | int y = highest + 40; 31 | Block block = this.getButWorld().getWorld().getBlockAt( x, y, z); 32 | block.getLocation().getWorld().spawn(block.getLocation(), TNTPrimed.class); 33 | 34 | } 35 | } 36 | 37 | if(MathUtils.getRandom().nextInt(10) >= 7) 38 | hieghtY--; 39 | }, 20l * 60); 40 | } 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/TheLavaRises.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.apache.commons.lang3.math.NumberUtils; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.Material; 6 | import org.bukkit.block.Block; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | 10 | import games.bevs.minecraftbut.commons.Console; 11 | import games.bevs.minecraftbut.commons.XMaterial; 12 | import games.bevs.minecraftbut.commons.utils.CC; 13 | import games.bevs.minecraftbut.senerario.Senerario; 14 | import games.bevs.minecraftbut.world.ButWorld; 15 | import net.md_5.bungee.api.ChatColor; 16 | 17 | public class TheLavaRises extends Senerario 18 | { 19 | private int hieghtY = 8; 20 | private long lavaSpeed = 45l; 21 | 22 | private Material lavaMaterial = XMaterial.LAVA.parseMaterial(); 23 | private Material signMaterial = XMaterial.SIGN.parseMaterial(); 24 | private Material signWallMaterial = XMaterial.WALL_SIGN.parseMaterial(); 25 | private Material surgarCaneMaterial = XMaterial.SUGAR_CANE.parseMaterial(); 26 | 27 | public TheLavaRises(ButWorld butWorld) 28 | { 29 | super("The Lava is rising", butWorld, Material.LAVA_BUCKET, new String[] {"Every minute (or the amount of time you set) the lava level will riase"}, "WilburSoot"); 30 | } 31 | 32 | 33 | @Override 34 | public void onStart() 35 | { 36 | this.repeat(() -> { 37 | fill(); 38 | }, 20l * lavaSpeed); 39 | } 40 | 41 | @Override 42 | public void onFinish() 43 | { 44 | 45 | } 46 | 47 | @Override 48 | protected void onCommand(Player player, String option, String[] args) 49 | { 50 | super.onCommand(player, option, args); 51 | 52 | if(args.length != 1) 53 | { 54 | this.onHelp(player); 55 | player.sendMessage(CC.red + "incorrect number of args"); 56 | } 57 | 58 | String firstArg = args[0]; 59 | int argAsInt = 0; 60 | if(NumberUtils.isNumber(firstArg)) 61 | { 62 | argAsInt = Integer.parseInt(firstArg); 63 | } 64 | else 65 | { 66 | this.onHelp(player); 67 | player.sendMessage(CC.red + "Must be a number"); 68 | return; 69 | } 70 | 71 | if(option.equalsIgnoreCase("LavaStartLevel")) 72 | { 73 | this.hieghtY = argAsInt; 74 | Console.log("Lava height set to " + this.hieghtY); 75 | } 76 | 77 | if(option.equalsIgnoreCase("LavaSpeed")) 78 | { 79 | this.lavaSpeed = argAsInt; 80 | if(this.isEnabled()) 81 | { 82 | this.finish(); 83 | this.start(); 84 | } 85 | Console.log("Lava speed set to " + argAsInt); 86 | 87 | } 88 | } 89 | 90 | @Override 91 | protected void onHelp(CommandSender sender) 92 | { 93 | super.onHelp(sender); 94 | 95 | sender.sendMessage(withBaseCommand("LavaStartLevel", "")); 96 | sender.sendMessage(withBaseCommand("LavaSpeed", "")); 97 | } 98 | 99 | private void fill() 100 | { 101 | //reached max height 102 | if(hieghtY >= 256) 103 | return; 104 | 105 | for(int x = this.getButWorld().getMinLocation().getBlockX(); x < this.getButWorld().getMaxLocation().getBlockX(); x++) 106 | { 107 | for(int z = this.getButWorld().getMinLocation().getBlockZ(); z < this.getButWorld().getMaxLocation().getBlockZ(); z++) 108 | { 109 | Block block = this.getButWorld().getWorld().getBlockAt( x, hieghtY, z); 110 | if(!block.getType().isSolid()) 111 | block.setType(lavaMaterial); 112 | else if(block.getType() == signMaterial || block.getType() == signWallMaterial || block.getType() == Material.LADDER || block.getType() == surgarCaneMaterial) 113 | block.setType(lavaMaterial); 114 | } 115 | } 116 | 117 | hieghtY++; 118 | Bukkit.broadcastMessage(ChatColor.BOLD + "Lava has gone up"); 119 | } 120 | 121 | 122 | } 123 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/TheWaterRises.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.apache.commons.lang3.math.NumberUtils; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.Material; 6 | import org.bukkit.block.Block; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | 10 | import games.bevs.minecraftbut.commons.Console; 11 | import games.bevs.minecraftbut.commons.XMaterial; 12 | import games.bevs.minecraftbut.commons.utils.CC; 13 | import games.bevs.minecraftbut.senerario.Senerario; 14 | import games.bevs.minecraftbut.world.ButWorld; 15 | import net.md_5.bungee.api.ChatColor; 16 | 17 | public class TheWaterRises extends Senerario 18 | { 19 | private int hieghtY = 8; 20 | private long waterSpeed = 45l; 21 | 22 | private Material waterMaterial = XMaterial.WATER.parseMaterial(); 23 | private Material signMaterial = XMaterial.SIGN.parseMaterial(); 24 | private Material signWallMaterial = XMaterial.WALL_SIGN.parseMaterial(); 25 | private Material surgarCaneMaterial = XMaterial.SUGAR_CANE.parseMaterial(); 26 | 27 | 28 | public TheWaterRises(ButWorld butWorld) 29 | { 30 | super("The Water is rising", butWorld, Material.WATER_BUCKET, new String[] { "Every minute (or amount of time you set) the water level will raise" }, "WilburSoot"); 31 | } 32 | 33 | 34 | @Override 35 | public void onStart() 36 | { 37 | this.repeat(() -> { 38 | this.hieghtY--; 39 | this.hieghtY--; 40 | fill(); 41 | fill(); 42 | fill(); 43 | Bukkit.broadcastMessage(ChatColor.BOLD + "The water has risen"); 44 | }, 20l * waterSpeed); 45 | } 46 | 47 | @Override 48 | public void onFinish() 49 | { 50 | 51 | } 52 | 53 | @Override 54 | protected void onCommand(Player player, String option, String[] args) 55 | { 56 | super.onCommand(player, option, args); 57 | 58 | if(args.length != 1) 59 | { 60 | this.onHelp(player); 61 | player.sendMessage(CC.red + "incorrect number of args"); 62 | } 63 | 64 | String firstArg = args[0]; 65 | int argAsInt = 0; 66 | if(NumberUtils.isNumber(firstArg)) 67 | { 68 | argAsInt = Integer.parseInt(firstArg); 69 | } 70 | else 71 | { 72 | this.onHelp(player); 73 | player.sendMessage(CC.red + "Must be a number"); 74 | return; 75 | } 76 | 77 | if(option.equalsIgnoreCase("waterStartLevel")) 78 | { 79 | this.hieghtY = argAsInt; 80 | Console.log("Lava height set to " + this.hieghtY); 81 | } 82 | 83 | if(option.equalsIgnoreCase("waterSpeed")) 84 | { 85 | this.waterSpeed = argAsInt; 86 | if(this.isEnabled()) 87 | { 88 | this.finish(); 89 | this.start(); 90 | } 91 | Console.log("Lava speed set to " + argAsInt); 92 | 93 | } 94 | } 95 | 96 | @Override 97 | protected void onHelp(CommandSender sender) 98 | { 99 | super.onHelp(sender); 100 | 101 | sender.sendMessage(withBaseCommand("WaterStartLevel", "")); 102 | sender.sendMessage(withBaseCommand("WaterSpeed", "")); 103 | } 104 | 105 | private void fill() 106 | { 107 | //reached max height 108 | if(hieghtY >= 256) 109 | return; 110 | 111 | for(int x = this.getButWorld().getMinLocation().getBlockX(); x < this.getButWorld().getMaxLocation().getBlockX(); x++) 112 | { 113 | for(int z = this.getButWorld().getMinLocation().getBlockZ(); z < this.getButWorld().getMaxLocation().getBlockZ(); z++) 114 | { 115 | Block block = this.getButWorld().getWorld().getBlockAt( x, hieghtY, z); 116 | if(!block.getType().isSolid()) 117 | block.setType(waterMaterial); 118 | else if(block.getType() == signMaterial || block.getType() == signWallMaterial || block.getType() == Material.LADDER || block.getType() == surgarCaneMaterial) 119 | block.setType(waterMaterial); 120 | } 121 | } 122 | 123 | hieghtY++; 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/WorldDecay.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios; 2 | 3 | import org.apache.commons.lang3.math.NumberUtils; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.Material; 6 | import org.bukkit.block.Block; 7 | import org.bukkit.block.BlockFace; 8 | import org.bukkit.command.CommandSender; 9 | import org.bukkit.entity.Player; 10 | 11 | import games.bevs.minecraftbut.commons.Console; 12 | import games.bevs.minecraftbut.commons.XMaterial; 13 | import games.bevs.minecraftbut.commons.utils.CC; 14 | import games.bevs.minecraftbut.commons.utils.MathUtils; 15 | import games.bevs.minecraftbut.senerario.Senerario; 16 | import games.bevs.minecraftbut.senerario.options.Optional; 17 | import games.bevs.minecraftbut.world.ButWorld; 18 | import net.md_5.bungee.api.ChatColor; 19 | 20 | public class WorldDecay extends Senerario 21 | { 22 | @Optional 23 | private int decaysPerSecond = 40; 24 | 25 | public WorldDecay(ButWorld butWorld) 26 | { 27 | super("World Decay", butWorld, Material.BRICK, new String[] {"Every block the sun touches slowly breaks down"}, "WilburSoot"); 28 | } 29 | 30 | 31 | @Override 32 | public void onStart() 33 | { 34 | this.repeat(() -> { 35 | for(int i = 0; i < decaysPerSecond; i++) 36 | { 37 | int ranX = MathUtils.getRandom().nextInt(this.getButWorld().getMaxLocation().getBlockX() - this.getButWorld().getMinLocation().getBlockX()) + this.getButWorld().getMinLocation().getBlockX(); 38 | int ranZ = MathUtils.getRandom().nextInt(this.getButWorld().getMaxLocation().getBlockZ() - this.getButWorld().getMinLocation().getBlockZ()) + this.getButWorld().getMinLocation().getBlockZ(); 39 | Block block = this.getButWorld().getWorld().getHighestBlockAt(ranX, ranZ); 40 | if(block == null) continue; 41 | block = block.getRelative(BlockFace.DOWN); 42 | 43 | if(block.getType() == Material.BEDROCK) 44 | continue; 45 | 46 | block.setType(Material.AIR); 47 | } 48 | }, 20l * 1); 49 | } 50 | 51 | @Override 52 | public void onFinish() 53 | { 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/deathout/DeathOut.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.deathout; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.event.EventHandler; 6 | import org.bukkit.event.entity.PlayerDeathEvent; 7 | import org.bukkit.event.player.PlayerRespawnEvent; 8 | 9 | import games.bevs.minecraftbut.commons.XMaterial; 10 | import games.bevs.minecraftbut.senerario.Senerario; 11 | import games.bevs.minecraftbut.senerario.options.Optional; 12 | import games.bevs.minecraftbut.world.ButWorld; 13 | 14 | public class DeathOut extends Senerario 15 | { 16 | @Optional 17 | private boolean kickOnDeath = false; 18 | @Optional 19 | private boolean spectatorOnDeath = true; 20 | 21 | public DeathOut(ButWorld butWorld) 22 | { 23 | super("Death Out", butWorld, XMaterial.CACTUS.parseMaterial(), new String[] {"You're out if you die"}, "Skeppy" ); 24 | } 25 | 26 | @Override 27 | public void onStart() 28 | { 29 | 30 | } 31 | 32 | @Override 33 | public void onFinish() 34 | { 35 | 36 | } 37 | 38 | @EventHandler 39 | public void onDeath(PlayerDeathEvent e) 40 | { 41 | e.getEntity().spigot().respawn(); 42 | } 43 | 44 | @EventHandler 45 | public void onRespawn(PlayerRespawnEvent e) 46 | { 47 | Player player = e.getPlayer(); 48 | if(player.getGameMode() != GameMode.SURVIVAL) 49 | return; 50 | 51 | if(this.spectatorOnDeath) 52 | player.setGameMode(GameMode.SPECTATOR); 53 | if(this.kickOnDeath) 54 | player.kickPlayer("You died"); 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/GemEater.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.Material; 5 | import org.bukkit.command.CommandSender; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.block.Action; 9 | import org.bukkit.event.player.PlayerInteractEvent; 10 | import org.bukkit.event.player.PlayerItemConsumeEvent; 11 | import org.bukkit.inventory.ItemStack; 12 | 13 | import games.bevs.minecraftbut.commons.Console; 14 | import games.bevs.minecraftbut.commons.Sounds; 15 | import games.bevs.minecraftbut.commons.utils.CC; 16 | import games.bevs.minecraftbut.senerario.Senerario; 17 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.CoalGem; 18 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.DiamondGem; 19 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.EmeraldGem; 20 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.GemBase; 21 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.GoldGem; 22 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.IronGem; 23 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.LapisGem; 24 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.RedstoneGem; 25 | import games.bevs.minecraftbut.world.ButWorld; 26 | 27 | public class GemEater extends Senerario 28 | { 29 | private GemManager gemManager; 30 | private boolean specialGems = true; 31 | 32 | public GemEater(ButWorld butWorld) 33 | { 34 | super("Gem Eater", butWorld, Material.IRON_INGOT, new String[] {"You can only eat ores", "coal, iron, gold, diamond, redstone, lapis"}, "WilburSoot"); 35 | 36 | this.gemManager = new GemManager(); 37 | 38 | this.gemManager.registerGem(new CoalGem()); 39 | this.gemManager.registerGem(new IronGem()); 40 | this.gemManager.registerGem(new GoldGem()); 41 | this.gemManager.registerGem(new LapisGem()); 42 | this.gemManager.registerGem(new RedstoneGem()); 43 | this.gemManager.registerGem(new DiamondGem()); 44 | this.gemManager.registerGem(new EmeraldGem()); 45 | } 46 | 47 | 48 | @Override 49 | public void onStart() 50 | { 51 | 52 | } 53 | 54 | @Override 55 | public void onFinish() 56 | { 57 | 58 | } 59 | 60 | @Override 61 | protected void onCommand(Player player, String option, String[] args) 62 | { 63 | super.onCommand(player, option, args); 64 | 65 | if(args.length != 1) 66 | { 67 | this.onHelp(player); 68 | player.sendMessage(CC.red + "incorrect number of args"); 69 | } 70 | 71 | String firstArg = args[0]; 72 | boolean isTrue = false; 73 | 74 | if(firstArg.equalsIgnoreCase("true") 75 | || firstArg.equalsIgnoreCase("on") 76 | || firstArg.equalsIgnoreCase("yes")) 77 | isTrue = true; 78 | 79 | if(option.equalsIgnoreCase("specialGems")) 80 | { 81 | this.specialGems = isTrue; 82 | Console.log("Special gems are " + isTrue); 83 | } 84 | 85 | } 86 | 87 | @Override 88 | protected void onHelp(CommandSender sender) 89 | { 90 | super.onHelp(sender); 91 | 92 | sender.sendMessage(withBaseCommand("specialGems", "")); 93 | } 94 | 95 | 96 | @EventHandler 97 | public void onConsumeNormalFood(PlayerItemConsumeEvent e) 98 | { 99 | e.setCancelled(true); 100 | } 101 | 102 | @EventHandler 103 | public void onEat(PlayerInteractEvent e) 104 | { 105 | Player player = e.getPlayer(); 106 | int playerFoodLevel = player.getFoodLevel(); 107 | 108 | ItemStack item = player.getItemInHand(); 109 | 110 | if(item == null || item.getType() == Material.AIR) 111 | return; 112 | 113 | if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) 114 | { 115 | GemBase gem = this.gemManager.getGem(item.getType()); 116 | if(gem == null) return; 117 | if(item.getDurability() != 0) 118 | { 119 | if(gem.getData() != item.getDurability()) 120 | return; 121 | } 122 | player.setFoodLevel(Math.min(playerFoodLevel + gem.getHungerRefill(), 20)); 123 | 124 | player.playSound(player.getLocation(), Sounds.BURP.bukkitSound(), 10, 1); 125 | //remove item 126 | int amount = item.getAmount(); 127 | if(amount > 1) 128 | item.setAmount(amount - 1); 129 | else 130 | item = null; 131 | 132 | player.setItemInHand(item); 133 | if(specialGems) 134 | gem.onEat(player); 135 | 136 | e.setCancelled(true); 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/GemManager.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater; 2 | 3 | import java.util.HashMap; 4 | 5 | import org.bukkit.Material; 6 | 7 | import games.bevs.minecraftbut.senerario.senerarios.gemeater.gems.GemBase; 8 | 9 | public class GemManager 10 | { 11 | private HashMap gems = new HashMap<>(); 12 | 13 | public GemManager() 14 | { 15 | 16 | } 17 | 18 | public void registerGem(GemBase gem) 19 | { 20 | this.gems.put(gem.getMaterial(), gem); 21 | } 22 | 23 | public GemBase getGem(Material mat) 24 | { 25 | return this.gems.get(mat); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/CoalGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | public class CoalGem extends GemBase 9 | { 10 | 11 | public CoalGem() 12 | { 13 | super(Material.COAL, 1); 14 | } 15 | 16 | @Override 17 | public void onEat(Player player) 18 | { 19 | player.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 20 * 10, 0, true, true), true); 20 | player.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 20 * 4, 0, true, true), true); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/DiamondGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | public class DiamondGem extends GemBase 9 | { 10 | 11 | public DiamondGem() 12 | { 13 | super(Material.DIAMOND, 20); 14 | } 15 | 16 | @Override 17 | public void onEat(Player player) 18 | { 19 | player.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 20 * 10, 1, true, true), true); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/EmeraldGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.entity.Villager; 6 | import org.bukkit.potion.PotionEffect; 7 | import org.bukkit.potion.PotionEffectType; 8 | 9 | import games.bevs.minecraftbut.commons.utils.CC; 10 | 11 | public class EmeraldGem extends GemBase 12 | { 13 | 14 | public EmeraldGem() 15 | { 16 | super(Material.EMERALD, 1); 17 | } 18 | 19 | @Override 20 | public void onEat(Player player) 21 | { 22 | Villager village = player.getWorld().spawn(player.getLocation(), Villager.class); 23 | village.setCustomNameVisible(true); 24 | village.setCustomName(CC.bYellow + "Demonized"); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/GemBase.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | 6 | import lombok.AllArgsConstructor; 7 | import lombok.Getter; 8 | import lombok.NonNull; 9 | import lombok.RequiredArgsConstructor; 10 | import lombok.Setter; 11 | 12 | @Getter 13 | @Setter 14 | public abstract class GemBase 15 | { 16 | private @NonNull Material material; 17 | private short data = 0; 18 | private @NonNull int hungerRefill = 1; 19 | 20 | public GemBase(@NonNull Material material, @NonNull int hungerRefill) { 21 | super(); 22 | this.material = material; 23 | this.data = 0; 24 | this.hungerRefill = hungerRefill; 25 | } 26 | 27 | public GemBase(@NonNull Material material, short data, @NonNull int hungerRefill) { 28 | super(); 29 | this.material = material; 30 | this.data = data; 31 | this.hungerRefill = hungerRefill; 32 | } 33 | 34 | public abstract void onEat(Player player); 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/GoldGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | public class GoldGem extends GemBase 9 | { 10 | 11 | public GoldGem() 12 | { 13 | super(Material.GOLD_INGOT, 2); 14 | } 15 | 16 | @Override 17 | public void onEat(Player player) 18 | { 19 | player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 20 * 5, 0, true, true), true); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/IronGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | public class IronGem extends GemBase 9 | { 10 | 11 | public IronGem() 12 | { 13 | super(Material.IRON_INGOT, 2); 14 | } 15 | 16 | @Override 17 | public void onEat(Player player) 18 | { 19 | player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 20 * 60, 0, true, true), true); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/LapisGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import java.util.Random; 4 | 5 | import org.bukkit.Material; 6 | import org.bukkit.enchantments.Enchantment; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.inventory.ItemStack; 9 | 10 | import games.bevs.minecraftbut.commons.XMaterial; 11 | import games.bevs.minecraftbut.commons.utils.MathUtils; 12 | 13 | /** 14 | * Has a chance of randomly enchanting an item 15 | * within your inventory 16 | */ 17 | public class LapisGem extends GemBase 18 | { 19 | private static final Enchantment[] ALLOWED_ENCHANTS = { Enchantment.DURABILITY, Enchantment.DAMAGE_ALL, Enchantment.ARROW_INFINITE, Enchantment.DIG_SPEED, Enchantment.ARROW_KNOCKBACK, Enchantment.KNOCKBACK, Enchantment.DAMAGE_ARTHROPODS, Enchantment.FIRE_ASPECT, Enchantment.LOOT_BONUS_BLOCKS, Enchantment.SILK_TOUCH}; 20 | 21 | public LapisGem() 22 | { 23 | super(XMaterial.INK_SAC.parseMaterial(), (short) 4, 1); 24 | } 25 | 26 | @Override 27 | public void onEat(Player player) 28 | { 29 | Random ran = MathUtils.getRandom(); 30 | int randomSlot = ran.nextInt(36); 31 | ItemStack item = player.getInventory().getItem(randomSlot); 32 | if(item == null || item.getType() == Material.AIR) 33 | return; 34 | int chanceOfEnchant = ran.nextInt(5); 35 | //1 / 5 chance of enchanting 36 | if(chanceOfEnchant == 2) 37 | { 38 | item.addUnsafeEnchantment(ALLOWED_ENCHANTS[ran.nextInt(ALLOWED_ENCHANTS.length)], ran.nextInt(100) <= 5 ? ran.nextInt(120) : (ran.nextInt(2) + 1)); 39 | } 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/gemeater/gems/RedstoneGem.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.gemeater.gems; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | public class RedstoneGem extends GemBase 9 | { 10 | 11 | public RedstoneGem() 12 | { 13 | super(Material.REDSTONE, 1); 14 | } 15 | 16 | @Override 17 | public void onEat(Player player) 18 | { 19 | player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 20 * 10, 0, true, true), true); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/linkedinvs/LinkedInventories.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.linkedinvs; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.Material; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.block.BlockPlaceEvent; 8 | import org.bukkit.event.entity.PlayerDeathEvent; 9 | import org.bukkit.event.inventory.InventoryClickEvent; 10 | import org.bukkit.event.inventory.InventoryDragEvent; 11 | import org.bukkit.event.player.PlayerDropItemEvent; 12 | import org.bukkit.event.player.PlayerInteractEvent; 13 | import org.bukkit.event.player.PlayerItemConsumeEvent; 14 | import org.bukkit.event.player.PlayerPickupItemEvent; 15 | 16 | import games.bevs.minecraftbut.senerario.Senerario; 17 | import games.bevs.minecraftbut.world.ButWorld; 18 | 19 | /** 20 | * All players share an inventory 21 | * Requires 1.8 only 22 | */ 23 | public class LinkedInventories extends Senerario 24 | { 25 | public LinkedInventories(ButWorld butWorld) 26 | { 27 | super("Linked Inventories", butWorld, Material.CHEST, new String[] {"All players share Inventories"}, "GeorgeNotFound"); 28 | } 29 | 30 | 31 | @Override 32 | public void onStart() 33 | { 34 | Bukkit.getOnlinePlayers().forEach(player -> player.getInventory().clear()); 35 | } 36 | 37 | @Override 38 | public void onFinish() 39 | { 40 | 41 | } 42 | 43 | public void updateInventoryForAll(Player player, long delay) 44 | { 45 | this.delay(() -> { 46 | for(Player onlinePlayer : Bukkit.getOnlinePlayers()) 47 | { 48 | if(player == onlinePlayer) continue; 49 | onlinePlayer.getInventory().setArmorContents(player.getInventory().getArmorContents()); 50 | onlinePlayer.getInventory().setContents(player.getInventory().getContents()); 51 | onlinePlayer.updateInventory(); 52 | } 53 | }, delay); 54 | } 55 | 56 | @EventHandler 57 | public void onDrop(PlayerDropItemEvent e) 58 | { 59 | Player player = e.getPlayer(); 60 | this.updateInventoryForAll(player, 2); 61 | } 62 | 63 | @EventHandler 64 | public void onPick(PlayerPickupItemEvent e) 65 | { 66 | Player player = e.getPlayer(); 67 | this.updateInventoryForAll(player, 2); 68 | } 69 | 70 | @EventHandler 71 | public void onPlace(BlockPlaceEvent e) 72 | { 73 | Player player = e.getPlayer(); 74 | this.updateInventoryForAll(player, 2); 75 | } 76 | 77 | @EventHandler 78 | public void onPlace(PlayerItemConsumeEvent e) 79 | { 80 | Player player = e.getPlayer(); 81 | this.updateInventoryForAll(player, 2); 82 | } 83 | 84 | @EventHandler 85 | public void onInteract(PlayerInteractEvent e) 86 | { 87 | Player player = e.getPlayer(); 88 | this.updateInventoryForAll(player, 2); 89 | } 90 | 91 | @EventHandler 92 | public void onDrag(InventoryDragEvent e) 93 | { 94 | Player player = (Player) e.getWhoClicked(); 95 | this.updateInventoryForAll(player, 2); 96 | } 97 | 98 | @EventHandler 99 | public void onDeath(PlayerDeathEvent e) 100 | { 101 | Player player = e.getEntity(); 102 | this.updateInventoryForAll(player, 2); 103 | } 104 | 105 | @EventHandler 106 | public void onInventory(InventoryClickEvent e) 107 | { 108 | Player player = (Player) e.getWhoClicked(); 109 | this.updateInventoryForAll(player, 2); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/senerario/senerarios/mathorstop/MathOrStop.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.senerario.senerarios.mathorstop; 2 | 3 | import com.google.common.collect.Lists; 4 | import games.bevs.minecraftbut.commons.utils.CC; 5 | import games.bevs.minecraftbut.commons.utils.MathUtils; 6 | import games.bevs.minecraftbut.senerario.Senerario; 7 | import games.bevs.minecraftbut.senerario.options.Optional; 8 | import games.bevs.minecraftbut.world.ButWorld; 9 | import lombok.AllArgsConstructor; 10 | import org.bukkit.Bukkit; 11 | import org.bukkit.Material; 12 | import org.bukkit.Sound; 13 | import org.bukkit.entity.Creeper; 14 | import org.bukkit.entity.Player; 15 | import org.bukkit.event.EventHandler; 16 | import org.bukkit.event.player.AsyncPlayerChatEvent; 17 | import org.bukkit.inventory.ItemStack; 18 | import org.bukkit.util.Vector; 19 | 20 | import java.util.Collections; 21 | import java.util.HashMap; 22 | import java.util.List; 23 | 24 | public class MathOrStop extends Senerario 25 | { 26 | /** 27 | * Time before question has to be answered 28 | */ 29 | @Optional 30 | private long mathSprintSeconds = 30l; 31 | @Optional 32 | private long secondsLeft = 0; 33 | 34 | private int grade = 0; 35 | private int questionIndex = 0; 36 | 37 | //Grade, Questions 38 | private HashMap> questions; 39 | 40 | public MathOrStop(ButWorld butWorld) 41 | { 42 | super("Math or Stop", butWorld, Material.BARRIER, new String[] {"Answer the math questions or rip"}, "Sprock"); 43 | 44 | populateQuestions(); 45 | } 46 | 47 | public void populateQuestions() 48 | { 49 | this.questions = new HashMap<>(); 50 | 51 | //generate baby grade questions 52 | this.addQuestion(0, new Question("How many lines are there: ////", "4")); 53 | this.addQuestion(0, new Question("How many lines are there: //////", "6")); 54 | this.addQuestion(0, new Question("How many lines are there: // + ///", "5")); 55 | this.addQuestion(0, new Question("How many lines are there: // - /", "1")); 56 | 57 | //generate first grade questions 58 | for(int i = 0; i < 10; i++) 59 | { 60 | int value1 = MathUtils.getRandom().nextInt(10); 61 | int value2 = MathUtils.getRandom().nextInt(10); 62 | this.addQuestion(1, new Question(value1 + " + " + value2, (value1 + value2) + "")); 63 | } 64 | 65 | //generate second grade questions 66 | for(int i = 0; i < 10; i++) 67 | { 68 | int value1 = MathUtils.getRandom().nextInt(10); 69 | int value2 = MathUtils.getRandom().nextInt(10); 70 | this.addQuestion(2, new Question(value1 + " - " + value2, (value1 - value2) + "")); 71 | } 72 | 73 | //generate third grade questions 74 | for(int i = 0; i < 10; i++) 75 | { 76 | int value1 = MathUtils.getRandom().nextInt(100); 77 | int value2 = MathUtils.getRandom().nextInt(100); 78 | this.addQuestion(3, new Question(value1 + " - " + value2, (value1 - value2) + "")); 79 | } 80 | 81 | 82 | //generate fourth grade questions 83 | for(int i = 0; i < 10; i++) 84 | { 85 | int value1 = MathUtils.getRandom().nextInt(10); 86 | int value2 = MathUtils.getRandom().nextInt(10); 87 | this.addQuestion(4, new Question(value1 + " * " + value2, (value1 * value2) + "")); 88 | } 89 | 90 | //generate fith grade questions 91 | this.addQuestion(5, new Question( "1 / 2", "0.5")); 92 | this.addQuestion(5, new Question( "1 / 4", "0.25")); 93 | this.addQuestion(5, new Question( "1 / 10", "0.1")); 94 | this.addQuestion(5, new Question( "1 / 20", "0.05")); 95 | this.addQuestion(5, new Question( "1 / 5", "0.2")); 96 | this.addQuestion(5, new Question( "3 / 10", "0.3")); 97 | 98 | 99 | //generate sixth grade questions 100 | this.addQuestion(6, new Question("2^4", "16")); 101 | this.addQuestion(6, new Question("5^3", "125")); 102 | this.addQuestion(6, new Question("7^2", "49")); 103 | this.addQuestion(6, new Question("3^2", "9")); 104 | this.addQuestion(6, new Question("301^1", "301")); 105 | this.addQuestion(6, new Question("25531^0", "1")); 106 | 107 | //seven grade 108 | this.addQuestion(7, new Question("2^7/2^2", "32")); 109 | this.addQuestion(7, new Question("2^4/2^2", "4")); 110 | this.addQuestion(7, new Question("2^1/2^2", "0.5")); 111 | 112 | //Eight grade 113 | this.addQuestion(8, new Question("6 / 2(1 + 2)", "9")); 114 | this.addQuestion(8, new Question("(x + 8) / 2 = 10", "12")); 115 | this.addQuestion(8, new Question("sin(pi)", "1")); 116 | this.addQuestion(8, new Question("cos(pi)", "-1")); 117 | this.addQuestion(8, new Question("lim(2/x + 1)", "1")); 118 | 119 | for(int grade = 0; grade < 9; grade++) 120 | { 121 | shuffleGradeQuestions(grade); 122 | } 123 | } 124 | 125 | 126 | @Override 127 | protected void onStart() 128 | { 129 | this.secondsLeft = this.mathSprintSeconds; 130 | this.questionIndex = 0; 131 | this.grade = 0; 132 | 133 | this.repeat(() -> { 134 | if(this.secondsLeft == 0) 135 | { 136 | Bukkit.getServer().shutdown(); 137 | return; 138 | } 139 | 140 | 141 | Question question = this.getCurrentQuestion(); 142 | Bukkit.broadcastMessage(CC.iGray + "Teacher (" + this.secondsLeft + "): " + CC.gray + question.question); 143 | 144 | float precentage = (float) this.secondsLeft / (float) this.mathSprintSeconds; 145 | 146 | this.secondsLeft--; 147 | }, 20l); 148 | } 149 | 150 | @Override 151 | protected void onFinish() 152 | { 153 | 154 | } 155 | 156 | private void addQuestion(int grade, Question question) 157 | { 158 | List questionList = this.questions.getOrDefault(grade, Lists.newArrayList()); 159 | 160 | questionList.add(question); 161 | 162 | 163 | this.questions.put(grade, questionList); 164 | } 165 | 166 | public int getSizeInGrade(int grade) 167 | { 168 | return this.questions.get(grade).size(); 169 | } 170 | 171 | private void shuffleGradeQuestions(int grade) 172 | { 173 | List questionList = this.questions.getOrDefault(grade, Lists.newArrayList()); 174 | 175 | Collections.shuffle(questionList); 176 | 177 | this.questions.put(grade, questionList); 178 | } 179 | 180 | public void correct(Player player) 181 | { 182 | this.secondsLeft = this.mathSprintSeconds; 183 | player.playSound(player.getLocation(), Sound.LEVEL_UP, 1f, 1f); 184 | } 185 | 186 | public void wrong(Player player) 187 | { 188 | 189 | int punishment = MathUtils.getRandom().nextInt(5); 190 | if(punishment == 0) 191 | { 192 | for(int i = 0; i < 5; i++) 193 | player.getWorld().spawn(player.getLocation(), Creeper.class); 194 | } 195 | else if(punishment == 1) 196 | { 197 | player.teleport(player.getLocation().add(0, -2, 0)); 198 | } 199 | else if(punishment == 2) 200 | { 201 | player.setWalkSpeed(0.01f); 202 | this.delay(() -> { 203 | player.setWalkSpeed(0.2f); 204 | }, 20l * 10l); 205 | } 206 | else if(punishment == 3) 207 | { 208 | player.getWorld().strikeLightning(player.getLocation()); 209 | } 210 | else if(punishment == 4) 211 | { 212 | ItemStack dirty = new ItemStack(Material.DEAD_BUSH, 64); 213 | dirty.setAmount(64); 214 | 215 | for(int sec = 0; sec < 5; sec++) 216 | this.delay(() -> { 217 | for(int i = 0; i < 5; i++) 218 | player.getWorld().dropItemNaturally(player.getLocation(), dirty); 219 | }, 20l * sec); 220 | 221 | } 222 | else { 223 | Vector vector = player.getEyeLocation().getDirection(); 224 | 225 | vector = vector.multiply(10); 226 | vector.setY(2.1); 227 | 228 | player.setVelocity(vector); 229 | } 230 | 231 | player.playSound(player.getLocation(), Sound.ANVIL_BREAK, 1f, 1f); 232 | } 233 | 234 | public Question getCurrentQuestion() 235 | { 236 | return this.questions.get(this.grade).get(questionIndex); 237 | } 238 | 239 | public void guessToQuestion(Player player, String guess) 240 | { 241 | Question question = getCurrentQuestion(); 242 | if(question.answer.equalsIgnoreCase(guess.trim())) 243 | { 244 | //correct 245 | this.correct(player); 246 | //Next Question 247 | 248 | this.questionIndex++; 249 | if(this.getSizeInGrade(this.grade) > this.questionIndex) 250 | { 251 | this.questionIndex = 0; 252 | this.grade++; 253 | } 254 | } 255 | else 256 | { 257 | //Wrong 258 | this.wrong(player); 259 | } 260 | } 261 | 262 | 263 | @EventHandler 264 | public void onChat(AsyncPlayerChatEvent e) 265 | { 266 | Player player = e.getPlayer(); 267 | String message = e.getMessage(); 268 | 269 | //lazy 270 | try 271 | { 272 | int value = Integer.parseInt(message); 273 | this.guessToQuestion(player, message); 274 | } catch(Exception ext) { } 275 | 276 | //lazy 277 | try 278 | { 279 | double value = Double.parseDouble(message); 280 | this.guessToQuestion(player, message); 281 | } catch(Exception ext) { } 282 | } 283 | 284 | 285 | @AllArgsConstructor 286 | class Question 287 | { 288 | public String question; 289 | public String answer; 290 | } 291 | } 292 | -------------------------------------------------------------------------------- /src/main/java/games/bevs/minecraftbut/world/ButWorld.java: -------------------------------------------------------------------------------- 1 | package games.bevs.minecraftbut.world; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.ChatColor; 5 | import org.bukkit.Location; 6 | import org.bukkit.World; 7 | import org.bukkit.WorldBorder; 8 | 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | 12 | public class ButWorld 13 | { 14 | @Getter 15 | private World world; 16 | private int size = 150; 17 | 18 | @Getter 19 | private Location minLocation, 20 | maxLocation; 21 | 22 | public ButWorld(World world) 23 | { 24 | this.world = world; 25 | 26 | this.initWorld(world); 27 | } 28 | 29 | public void setWorld(World world) 30 | { 31 | this.world = world; 32 | this.initWorld(world); 33 | } 34 | 35 | public void initWorld(World world) 36 | { 37 | int heightsBlock = this.world.getHighestBlockYAt(0, 0); 38 | this.world.setSpawnLocation(0, heightsBlock + 3, 0); 39 | 40 | WorldBorder worldBorder = this.world.getWorldBorder(); 41 | worldBorder.setCenter(0, 0); 42 | worldBorder.setSize(this.size); 43 | 44 | this.minLocation = new Location(world, -this.size / 2, 0, -this.size / 2); 45 | this.maxLocation = new Location(world, this.size / 2, 0, this.size / 2); 46 | 47 | Bukkit.broadcastMessage(ChatColor.BOLD + "World: " + this.world.getName()); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | name: ${project.name} 2 | main: ${project.groupId}.${project.artifactId} 3 | version: ${project.version} --------------------------------------------------------------------------------