What is a .gitignore?

This commit is contained in:
Dominic Zimmer 2020-09-23 19:06:51 +02:00
commit 9e8d86a547
37 changed files with 869 additions and 0 deletions

3
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

9
.idea/artifacts/MeinKraft_jar.xml generated Normal file
View 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
View 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
View 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
View 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
View 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>

Binary file not shown.

View 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}

View 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));
}
}

View 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));
}
}
}
}
}
}

View 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);
}
}
}
}

View 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();
}

View 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;
}
}

View 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;
}
}

View 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);
}
}

View 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);
}
}

View 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);
}
}
}
}
}

View File

@ -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);
}
}

View 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
View 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}