├── .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 |
6 |
7 |
8 |
9 |
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 | [](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 | [](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 | [](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 extends FallingBlock> 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 extends FallingBlock> fallingclazz = fallingBlock.getClass();
33 | // Method method = fallingclazz.getDeclaredMethod("getBlockData");
34 | // Object blockData = method.invoke(fallingBlock);
35 | // Class extends Object> 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}
--------------------------------------------------------------------------------