What is a .gitignore?
This commit is contained in:
commit
9e8d86a547
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
9
.idea/artifacts/MeinKraft_jar.xml
generated
Normal file
9
.idea/artifacts/MeinKraft_jar.xml
generated
Normal file
@ -0,0 +1,9 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="MeinKraft:jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/MeinKraft_jar</output-path>
|
||||
<root id="archive" name="MeinKraft.jar">
|
||||
<element id="module-output" name="MeinKraft" />
|
||||
<element id="extracted-dir" path="$USER_HOME$/Documents/buildtools/Spigot/Spigot-API/target/spigot-api-1.16.3-R0.1-SNAPSHOT-shaded.jar" path-in-jar="/" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
6
.idea/misc.xml
generated
Normal file
6
.idea/misc.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/MeinKraft.iml" filepath="$PROJECT_DIR$/MeinKraft.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
124
.idea/uiDesigner.xml
generated
Normal file
124
.idea/uiDesigner.xml
generated
Normal file
@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
31
MeinKraft.iml
Normal file
31
MeinKraft.iml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/Documents/buildtools/Spigot/Spigot-API/target/spigot-api-1.16.3-R0.1-SNAPSHOT-shaded.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/Documents/buildtools/Spigot/Spigot-Server/target/spigot-1.16.3-R0.1-SNAPSHOT.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/Documents/buildtools/Spigot/Spigot-Server/target/spigot-1.16.3-R0.1-SNAPSHOT.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
</component>
|
||||
</module>
|
BIN
out/artifacts/MeinKraft_jar/MeinKraft.jar
Normal file
BIN
out/artifacts/MeinKraft_jar/MeinKraft.jar
Normal file
Binary file not shown.
BIN
out/production/MeinKraft/de/leafbla/meinkraft/Main.class
Normal file
BIN
out/production/MeinKraft/de/leafbla/meinkraft/Main.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
10
out/production/MeinKraft/plugin.yml
Normal file
10
out/production/MeinKraft/plugin.yml
Normal file
@ -0,0 +1,10 @@
|
||||
name: MeinKraft
|
||||
version: 0.1
|
||||
author: thamma
|
||||
main: de.leafbla.meinkraft.Main
|
||||
website: leafbla.de
|
||||
api-version: 1.16
|
||||
commands:
|
||||
role:
|
||||
description: This is a demo command.
|
||||
usage: /role {[player] [class]} {list}
|
33
src/de/leafbla/meinkraft/Main.java
Normal file
33
src/de/leafbla/meinkraft/Main.java
Normal file
@ -0,0 +1,33 @@
|
||||
package de.leafbla.meinkraft;
|
||||
|
||||
import de.leafbla.meinkraft.roleplay.RoleCommand;
|
||||
import de.leafbla.meinkraft.roleplay.RoleManager;
|
||||
import de.leafbla.meinkraft.roleplay.bomber.BomberListener;
|
||||
import de.leafbla.meinkraft.roleplay.fighter.FighterListener;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class Main extends JavaPlugin {
|
||||
|
||||
public RoleManager roleManager;
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Logger.getLogger("test").log(Level.INFO, "Plugin disabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
this.roleManager = new RoleManager(this);
|
||||
Logger.getLogger("MeinKraft").log(Level.INFO, "Plugin enabled");
|
||||
getServer().getPluginManager().registerEvents(new ThiefListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new NinjaListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new BomberListener(this), this);
|
||||
getServer().getPluginManager().registerEvents(new FighterListener(this), this);
|
||||
|
||||
// This will throw a NullPointerException if you don't have the command defined in your plugin.yml file!
|
||||
this.getCommand("role").setExecutor(new RoleCommand(this.roleManager));
|
||||
}
|
||||
}
|
126
src/de/leafbla/meinkraft/NinjaListener.java
Normal file
126
src/de/leafbla/meinkraft/NinjaListener.java
Normal file
@ -0,0 +1,126 @@
|
||||
package de.leafbla.meinkraft;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftSnowball;
|
||||
import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class NinjaListener implements Listener {
|
||||
private Main plugin;
|
||||
|
||||
public NinjaListener(Main main) {
|
||||
this.plugin = main;
|
||||
addKnife();
|
||||
addDarts();
|
||||
}
|
||||
|
||||
private void addDarts() {
|
||||
ItemStack item = new ItemStack(Material.STICK);
|
||||
ItemMeta im = item.getItemMeta();
|
||||
im.setDisplayName("Blowpipe");
|
||||
item.setItemMeta(im);
|
||||
NamespacedKey key = new NamespacedKey(plugin, "blowpipe");
|
||||
ShapedRecipe recipe = new ShapedRecipe(key, item);
|
||||
recipe.shape("D", "D");
|
||||
recipe.setIngredient('D', Material.DIRT);
|
||||
Bukkit.addRecipe(recipe);
|
||||
}
|
||||
|
||||
private void addKnife() {
|
||||
ItemStack item = new ItemStack(Material.IRON_INGOT);
|
||||
ItemMeta im = item.getItemMeta();
|
||||
im.setDisplayName("Throwing Knife");
|
||||
item.setItemMeta(im);
|
||||
NamespacedKey key = new NamespacedKey(plugin, "throwing_knife");
|
||||
ShapedRecipe recipe = new ShapedRecipe(key, item);
|
||||
recipe.shape("DD", "DD");
|
||||
recipe.setIngredient('D', Material.DIRT);
|
||||
Bukkit.addRecipe(recipe);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInteract(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (event.getAction().name().contains("RIGHT")) {
|
||||
ItemStack knife = event.getPlayer().getInventory().getItemInMainHand();
|
||||
if (knife.getType() == Material.IRON_INGOT) {
|
||||
ItemStack oneknife = knife.clone();
|
||||
oneknife.setAmount(1);
|
||||
Snowball ball = player.launchProjectile(Snowball.class);
|
||||
ball.setVelocity(ball.getVelocity().multiply(1.2));
|
||||
ball.setBounce(false);
|
||||
((CraftSnowball) ball).getHandle().setItem(CraftItemStack.asNMSCopy(oneknife));
|
||||
|
||||
int amt = knife.getAmount();
|
||||
knife.setAmount(amt - 1);
|
||||
player.setItemInHand(knife);
|
||||
} else if (knife.getType() == Material.STICK) {
|
||||
ItemStack oneknife = new ItemStack(Material.FEATHER, 1);
|
||||
Snowball ball = player.launchProjectile(Snowball.class);
|
||||
ball.setVelocity(ball.getVelocity().multiply(3));
|
||||
((CraftSnowball) ball).getHandle().setItem(CraftItemStack.asNMSCopy(oneknife));
|
||||
|
||||
int amt = knife.getAmount();
|
||||
flying = true;
|
||||
new BukkitRunnable() {
|
||||
int i = 0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (flying)
|
||||
ball.getWorld().spawnParticle(Particle.FLAME, ball.getLocation(), 0);
|
||||
else
|
||||
this.cancel();
|
||||
}
|
||||
}.runTaskTimerAsynchronously(this.plugin, 0, 1);
|
||||
//knife.setAmount(amt - 1);
|
||||
//player.setItemInHand(knife);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean flying = false;
|
||||
|
||||
@EventHandler
|
||||
public void onLand(ProjectileHitEvent event) {
|
||||
if (event.getEntity() instanceof Snowball) {
|
||||
Snowball ball = (Snowball) event.getEntity();
|
||||
ItemStack item =
|
||||
CraftItemStack.asBukkitCopy(
|
||||
((CraftSnowball) ball).getHandle().getItem()
|
||||
);
|
||||
if (item.getType() == Material.IRON_INGOT) {
|
||||
if (event.getHitEntity() == null)
|
||||
event.getEntity().getWorld().dropItem(event.getEntity().getLocation(), item);
|
||||
else {
|
||||
if (event.getHitEntity() instanceof LivingEntity)
|
||||
((LivingEntity) event.getHitEntity()).damage(8);
|
||||
}
|
||||
} else if (item.getType() == Material.FEATHER) {
|
||||
flying = false;
|
||||
if (event.getHitEntity() != null) {
|
||||
if (event.getHitEntity() instanceof LivingEntity) {
|
||||
LivingEntity len = ((LivingEntity) event.getHitEntity());
|
||||
Bukkit.broadcastMessage(String.format("hit %s", len.getName()));
|
||||
len.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 5 * 20, 0, true, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
63
src/de/leafbla/meinkraft/ThiefListener.java
Normal file
63
src/de/leafbla/meinkraft/ThiefListener.java
Normal file
@ -0,0 +1,63 @@
|
||||
package de.leafbla.meinkraft;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
|
||||
public class ThiefListener implements Listener {
|
||||
|
||||
private Main plugin;
|
||||
|
||||
public ThiefListener(Main plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInteract(PlayerInteractEntityEvent event) {
|
||||
if (event.getHand() != EquipmentSlot.HAND)
|
||||
return;
|
||||
Player p = event.getPlayer();
|
||||
if (!p.isSneaking())
|
||||
return;;
|
||||
Entity en = event.getRightClicked();
|
||||
if (en instanceof LivingEntity) {
|
||||
LivingEntity len = (LivingEntity) en;
|
||||
if (isBehind(len, p))
|
||||
if (len instanceof Player) {
|
||||
Player target = (Player) len;
|
||||
p.openInventory(target.getInventory());
|
||||
}
|
||||
}
|
||||
}
|
||||
static boolean isBehind(LivingEntity behind, LivingEntity front) {
|
||||
Location l1 = behind.getLocation();
|
||||
Location l2 = front.getLocation();
|
||||
l1.setPitch(0);
|
||||
l2.setPitch(0);
|
||||
float angle = l1.getDirection().angle(l2.getDirection());
|
||||
return (Math.abs(angle) < 1f && behind.getLocation().distance(front.getLocation()) < 1.2);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onMove(PlayerMoveEvent event) {
|
||||
Player p = event.getPlayer();
|
||||
for (final HumanEntity hen: p.getInventory().getViewers()) {
|
||||
if (!isBehind(hen, p)) {
|
||||
Bukkit.getScheduler().runTask(this.plugin, hen::closeInventory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
18
src/de/leafbla/meinkraft/roleplay/PlayerRole.java
Normal file
18
src/de/leafbla/meinkraft/roleplay/PlayerRole.java
Normal file
@ -0,0 +1,18 @@
|
||||
package de.leafbla.meinkraft.roleplay;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public abstract class PlayerRole {
|
||||
|
||||
protected final Player player;
|
||||
protected final Main plugin;
|
||||
|
||||
public PlayerRole(Main plugin, Player player) {
|
||||
this.player = player;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public abstract Role getRole();
|
||||
|
||||
}
|
31
src/de/leafbla/meinkraft/roleplay/Role.java
Normal file
31
src/de/leafbla/meinkraft/roleplay/Role.java
Normal file
@ -0,0 +1,31 @@
|
||||
package de.leafbla.meinkraft.roleplay;
|
||||
|
||||
import de.leafbla.meinkraft.roleplay.fighter.FighterRole;
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
public enum Role {
|
||||
|
||||
BOMBER(FighterRole.class),
|
||||
FIGHTER(FighterRole.class),
|
||||
NINJA(FighterRole.class),
|
||||
WIZARD(FighterRole.class);
|
||||
|
||||
private final Class<? extends PlayerRole> playerRole;
|
||||
|
||||
Role(Class<? extends PlayerRole> playerRole) {
|
||||
this.playerRole = playerRole;
|
||||
}
|
||||
|
||||
public PlayerRole createInstance(Main plugin, Player player) {
|
||||
try {
|
||||
return this.playerRole.getConstructor(Main.class, Player.class).newInstance(plugin, player);
|
||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
60
src/de/leafbla/meinkraft/roleplay/RoleCommand.java
Normal file
60
src/de/leafbla/meinkraft/roleplay/RoleCommand.java
Normal file
@ -0,0 +1,60 @@
|
||||
package de.leafbla.meinkraft.roleplay;
|
||||
|
||||
import de.leafbla.meinkraft.roleplay.Role;
|
||||
import de.leafbla.meinkraft.roleplay.RoleManager;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RoleCommand implements CommandExecutor {
|
||||
|
||||
private final RoleManager roleManager;
|
||||
|
||||
public RoleCommand(RoleManager roleManager) {
|
||||
this.roleManager = roleManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender commandSender, Command command, String label, String[] args) {
|
||||
if (command.getName().equalsIgnoreCase("role")) {
|
||||
if (args.length == 1) {
|
||||
if (args[0].equalsIgnoreCase("list")) {
|
||||
commandSender.sendMessage(String.format("§eAvailable classes: %s§6",
|
||||
Arrays.stream(Role.values()).map(c -> StringUtils.capitalize(c.name())).collect(Collectors.joining("§e,§6 "))
|
||||
));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (args.length == 2) {
|
||||
Player player = Bukkit.getPlayer(args[0]);
|
||||
if (player != null && player.isOnline()) {
|
||||
if (args[1].equalsIgnoreCase("clear")) {
|
||||
this.roleManager.unsetClass(player);
|
||||
commandSender.sendMessage(String.format("§ePlayer §6%s§e's class was cleared", player.getName()));
|
||||
return true;
|
||||
} else {
|
||||
try {
|
||||
Role theclass = Role.valueOf(args[1].toUpperCase());
|
||||
this.roleManager.setClass(player, theclass);
|
||||
commandSender.sendMessage(String.format("§ePlayer §6%s §ewas assigned class §6%s", player.getName(), StringUtils.capitalize(theclass.name())));
|
||||
} catch (IllegalArgumentException e) {
|
||||
commandSender.sendMessage(String.format("§cClass §e%s §cnot found", args[1]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
commandSender.sendMessage(String.format("§cPlayer §e%s §cnot found", args[0]));
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
30
src/de/leafbla/meinkraft/roleplay/RoleListener.java
Normal file
30
src/de/leafbla/meinkraft/roleplay/RoleListener.java
Normal file
@ -0,0 +1,30 @@
|
||||
package de.leafbla.meinkraft.roleplay;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public abstract class RoleListener<T extends PlayerRole> implements Listener {
|
||||
|
||||
protected final Main plugin;
|
||||
protected final RoleManager roleManager;
|
||||
protected final Role role;
|
||||
|
||||
public RoleListener(Role role, Main plugin) {
|
||||
this.role = role;
|
||||
this.plugin = plugin;
|
||||
this.roleManager = plugin.roleManager;
|
||||
}
|
||||
|
||||
public boolean matchesRole(Player player) {
|
||||
PlayerRole playerRole = this.roleManager.getPlayerRole(player);
|
||||
if (playerRole == null) return false;
|
||||
return playerRole.getRole() == this.role;
|
||||
}
|
||||
|
||||
public T getRole(Player player) {
|
||||
if (!matchesRole(player))
|
||||
return null;
|
||||
return (T) this.roleManager.getPlayerRole(player);
|
||||
}
|
||||
}
|
47
src/de/leafbla/meinkraft/roleplay/RoleManager.java
Normal file
47
src/de/leafbla/meinkraft/roleplay/RoleManager.java
Normal file
@ -0,0 +1,47 @@
|
||||
package de.leafbla.meinkraft.roleplay;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class RoleManager {
|
||||
|
||||
private final Map<Player, PlayerRole> classes = new HashMap<>();
|
||||
private final Main plugin;
|
||||
|
||||
public RoleManager(Main plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void setClass(Player player, Role theclass) {
|
||||
this.unsetClass(player);
|
||||
PlayerRole thePlayerRole = theclass.createInstance(plugin, player);
|
||||
if (thePlayerRole == null) {
|
||||
Logger.getLogger("MeinKraft").warning("setClass(Player, Class) returned null");
|
||||
return;
|
||||
}
|
||||
this.classes.put(player, thePlayerRole);
|
||||
player.sendMessage(
|
||||
String.format("§eYou are now a §6%s§e!", StringUtils.capitalize(theclass.name()))
|
||||
);
|
||||
}
|
||||
|
||||
public void unsetClass(Player player) {
|
||||
if (this.classes.containsKey(player)) {
|
||||
Role oldclass = this.classes.get(player).getRole();
|
||||
player.sendMessage(
|
||||
String.format("§eYou are no longer a §6%s§e!", StringUtils.capitalize(oldclass.name()))
|
||||
);
|
||||
this.classes.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
public PlayerRole getPlayerRole(Player player) {
|
||||
return this.classes.getOrDefault(player, null);
|
||||
}
|
||||
|
||||
}
|
121
src/de/leafbla/meinkraft/roleplay/bomber/BomberListener.java
Normal file
121
src/de/leafbla/meinkraft/roleplay/bomber/BomberListener.java
Normal file
@ -0,0 +1,121 @@
|
||||
package de.leafbla.meinkraft.roleplay.bomber;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftSnowball;
|
||||
import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Snowball;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class BomberListener implements Listener {
|
||||
private final Main plugin;
|
||||
|
||||
private final Map<Location, Player> mines = new HashMap<>();
|
||||
private final Map<Player, Location> c4 = new HashMap<>();
|
||||
|
||||
public BomberListener(Main main) {
|
||||
this.plugin = main;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlace(BlockPlaceEvent event) {
|
||||
if (event.getBlockPlaced().getType() == Material.STONE_PRESSURE_PLATE) {
|
||||
mines.put(event.getBlockPlaced().getLocation(), event.getPlayer());
|
||||
}
|
||||
if (event.getBlockPlaced().getType() == Material.TURTLE_EGG) {
|
||||
if (c4.containsKey(event.getPlayer())) {
|
||||
Location old = c4.get(event.getPlayer());
|
||||
old.getBlock().setType(Material.AIR);
|
||||
}
|
||||
c4.put(event.getPlayer(), event.getBlockPlaced().getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlace(PlayerInteractEvent event) {
|
||||
if (event.getAction() == Action.PHYSICAL)
|
||||
if (event.getClickedBlock().getType() == Material.STONE_PRESSURE_PLATE) {
|
||||
World w = event.getClickedBlock().getWorld();
|
||||
Location loc = event.getClickedBlock().getLocation();
|
||||
if (mines.containsKey(loc)) {
|
||||
Player source = mines.get(loc);
|
||||
w.createExplosion(loc, 2f, false, false, source);
|
||||
mines.remove(loc);
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
loc.getBlock().setType(Material.AIR);
|
||||
}
|
||||
}.runTask(this.plugin);
|
||||
//mines.remove(loc);
|
||||
}
|
||||
}
|
||||
if (event.getAction().name().contains("RIGHT")) {
|
||||
if (event.getPlayer().getItemInHand().getType() == Material.REDSTONE_TORCH) {
|
||||
World w = event.getPlayer().getWorld();
|
||||
if (c4.containsKey(event.getPlayer())) {
|
||||
Location loc = c4.get(event.getPlayer());
|
||||
w.createExplosion(loc, 2f, false, false, event.getPlayer());
|
||||
w.getBlockAt(loc).setType(Material.AIR);
|
||||
c4.remove(event.getPlayer());
|
||||
}
|
||||
}
|
||||
if (event.getPlayer().getItemInHand().getType() == Material.SLIME_BALL) {
|
||||
ItemStack oneknife = new ItemStack(Material.SLIME_BALL, 1);
|
||||
Snowball ball = event.getPlayer().launchProjectile(Snowball.class);
|
||||
grenades.put(ball, event.getPlayer());
|
||||
ball.setVelocity(ball.getVelocity().multiply(.75));
|
||||
ball.setBounce(true);
|
||||
((CraftSnowball) ball).getHandle().setItem(CraftItemStack.asNMSCopy(oneknife));
|
||||
|
||||
ItemStack balls = event.getPlayer().getItemInHand();
|
||||
int amt = balls.getAmount();
|
||||
balls.setAmount(amt);
|
||||
event.getPlayer().setItemInHand(balls);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map<Snowball, Player> grenades = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public void onLand(ProjectileHitEvent event) {
|
||||
if (event.getEntity() instanceof Snowball) {
|
||||
Snowball ball = (Snowball) event.getEntity();
|
||||
ItemStack item =
|
||||
CraftItemStack.asBukkitCopy(
|
||||
((CraftSnowball) ball).getHandle().getItem()
|
||||
);
|
||||
if (item.getType() == Material.SLIME_BALL) {
|
||||
if (grenades.containsKey(ball)) {
|
||||
Player thrower = grenades.get(ball);
|
||||
Location loc = event.getEntity().getLocation();
|
||||
World w = event.getEntity().getWorld();
|
||||
w.playSound(event.getEntity().getLocation(), Sound.ENTITY_CREEPER_PRIMED, 2, 1);
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
w.createExplosion(loc, 3f, false, false, thrower);
|
||||
}
|
||||
}.runTaskLater(this.plugin, 30);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package de.leafbla.meinkraft.roleplay.fighter;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import de.leafbla.meinkraft.roleplay.Role;
|
||||
import de.leafbla.meinkraft.roleplay.RoleListener;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
public class FighterListener extends RoleListener<FighterRole> {
|
||||
|
||||
public FighterListener(Main main) {
|
||||
super(Role.FIGHTER, main);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDamage(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Player)) return;
|
||||
Player player = (Player) event.getDamager();
|
||||
if (!this.matchesRole(player)) return;
|
||||
FighterRole role = this.getRole(player);
|
||||
if (event.getCause() != EntityDamageEvent.DamageCause.ENTITY_ATTACK) return;
|
||||
|
||||
role.attackEntity(event.getEntity());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onAttack(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (!this.matchesRole(player)) return;
|
||||
FighterRole role = this.getRole(player);
|
||||
role.onInteract(event);
|
||||
}
|
||||
}
|
103
src/de/leafbla/meinkraft/roleplay/fighter/FighterRole.java
Normal file
103
src/de/leafbla/meinkraft/roleplay/fighter/FighterRole.java
Normal file
@ -0,0 +1,103 @@
|
||||
package de.leafbla.meinkraft.roleplay.fighter;
|
||||
|
||||
import de.leafbla.meinkraft.Main;
|
||||
import de.leafbla.meinkraft.roleplay.PlayerRole;
|
||||
import de.leafbla.meinkraft.roleplay.Role;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class FighterRole extends PlayerRole {
|
||||
|
||||
public FighterRole(Main plugin, Player player) {
|
||||
super(plugin, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Role getRole() {
|
||||
return Role.FIGHTER;
|
||||
}
|
||||
|
||||
public void attackEntity(Entity entity) {
|
||||
if (!(entity instanceof LivingEntity)) return;
|
||||
this.player.playSound(player.getLocation(), Sound.BLOCK_ANVIL_LAND, 1, 1);
|
||||
entity.getWorld().dropItem(entity.getLocation(),new ItemStack(Material.STONE));
|
||||
}
|
||||
|
||||
public void onInteract(PlayerInteractEvent event) {
|
||||
Player p = event.getPlayer();
|
||||
if (p.isSneaking()) {
|
||||
if (p.getItemInHand().getType() == Material.AIR) {
|
||||
p.setVelocity(new Vector(0, 1, 0));
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
p.setGravity(false);
|
||||
Location loc = p.getLocation();
|
||||
loc.setPitch(0);
|
||||
p.teleport(loc);
|
||||
new BukkitRunnable() {
|
||||
int i = 0;
|
||||
final int MAX = 15;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (++i == MAX) {
|
||||
this.cancel();
|
||||
new BukkitRunnable() {
|
||||
boolean once = true;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (once) {
|
||||
loc.setPitch(38);
|
||||
p.teleport(loc);
|
||||
p.setGravity(true);
|
||||
p.setFallDistance(0);
|
||||
p.setNoDamageTicks(40);
|
||||
p.setVelocity(new Vector(0, -2, 0));
|
||||
once = false;
|
||||
}
|
||||
if (((LivingEntity) p).isOnGround()) {
|
||||
p.getWorld().createExplosion(p.getLocation(), 0f, false, false, p);
|
||||
for (Entity en : p.getNearbyEntities(2, 1, 2)) {
|
||||
if (en instanceof LivingEntity) {
|
||||
LivingEntity len = ((LivingEntity) en);
|
||||
Vector dir = len.getLocation().toVector().subtract(p.getLocation().toVector()).normalize();
|
||||
len.setVelocity(dir.multiply(2).add(new Vector(0, 1, 0)));
|
||||
}
|
||||
}
|
||||
this.cancel();
|
||||
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(plugin, 2, 1);
|
||||
return;
|
||||
}
|
||||
loc.setYaw(((loc.getYaw() + 180 + 360 / MAX) % 360) - 180);
|
||||
p.teleport(loc);
|
||||
}
|
||||
}.runTaskTimer(plugin, 0, 1);
|
||||
}
|
||||
}.runTaskLater(plugin, 15);
|
||||
}
|
||||
} else if (p.getItemInHand().getType() == Material.BLAZE_ROD) {
|
||||
for (Entity en : p.getNearbyEntities(5, 5, 5)) {
|
||||
if (en instanceof LivingEntity) {
|
||||
LivingEntity len = ((LivingEntity) en);
|
||||
Vector dir = len.getLocation().toVector().subtract(p.getLocation().toVector());
|
||||
if (Math.abs(dir.angle(p.getLocation().getDirection())) < 1.6) {
|
||||
len.setVelocity(dir.multiply(2).add(new Vector(0, .3, 0)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
10
src/plugin.yml
Normal file
10
src/plugin.yml
Normal file
@ -0,0 +1,10 @@
|
||||
name: MeinKraft
|
||||
version: 0.1
|
||||
author: thamma
|
||||
main: de.leafbla.meinkraft.Main
|
||||
website: leafbla.de
|
||||
api-version: 1.16
|
||||
commands:
|
||||
role:
|
||||
description: This is a demo command.
|
||||
usage: /role {[player] [class]} {list}
|
Loading…
Reference in New Issue
Block a user