What is a .gitignore?
This commit is contained in:
Generated
+3
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
Generated
+9
@@ -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>
|
||||
Generated
+6
@@ -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>
|
||||
Generated
+8
@@ -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>
|
||||
Generated
+124
@@ -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>
|
||||
@@ -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>
|
||||
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.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}
|
||||
Reference in New Issue
Block a user