Skip to content

Commit eddadc3

Browse files
authored
Merge pull request #6 from kiriDevs/develop
2 parents d257b2e + 7ce146f commit eddadc3

18 files changed

+413
-242
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.kiridevs</groupId>
88
<artifactId>ksmpplugin</artifactId>
9-
<version>2.1.0</version>
9+
<version>3.0.0-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>kiriSMP Plugin</name>

src/main/java/de/kiridevs/ksmpplugin/Util.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.kiridevs.ksmpplugin;
22

3-
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.format.NamedTextColor;
3+
import java.util.Map;
4+
55
import org.bukkit.Location;
66
import org.bukkit.NamespacedKey;
77
import org.bukkit.World;
@@ -11,8 +11,8 @@
1111
import org.bukkit.event.entity.EntityDamageEvent;
1212
import org.bukkit.persistence.PersistentDataContainer;
1313
import org.bukkit.persistence.PersistentDataType;
14-
15-
import java.util.Map;
14+
import net.kyori.adventure.text.Component;
15+
import net.kyori.adventure.text.format.NamedTextColor;
1616

1717
public class Util {
1818
public static void applyDamageModifier(EntityDamageEvent event, double modifier) {

src/main/java/de/kiridevs/ksmpplugin/features/DeathMessage.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package de.kiridevs.ksmpplugin.features;
22

3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Location;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.EventHandler;
7+
import org.bukkit.event.Listener;
8+
import org.bukkit.event.entity.PlayerDeathEvent;
39
import net.kyori.adventure.text.Component;
410
import net.kyori.adventure.text.format.NamedTextColor;
511
import net.kyori.adventure.text.format.TextDecoration;
6-
import org.bukkit.event.Listener;
12+
713
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
8-
import org.bukkit.event.EventHandler;
9-
import org.bukkit.event.entity.PlayerDeathEvent;
10-
import org.bukkit.entity.Player;
11-
import org.bukkit.Location;
12-
import org.bukkit.Bukkit;
1314

1415
import static net.kyori.adventure.text.Component.text;
1516

src/main/java/de/kiridevs/ksmpplugin/features/DragonBuff.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package de.kiridevs.ksmpplugin.features;
22

3-
import de.kiridevs.ksmpplugin.Util;
4-
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
5-
import io.papermc.paper.event.block.DragonEggFormEvent;
6-
import net.kyori.adventure.text.Component;
7-
import net.kyori.adventure.text.format.NamedTextColor;
3+
import java.util.Map;
4+
85
import org.bukkit.Bukkit;
96
import org.bukkit.World;
107
import org.bukkit.WorldBorder;
@@ -19,8 +16,12 @@
1916
import org.bukkit.event.entity.EntityDamageEvent;
2017
import org.bukkit.event.player.PlayerChangedWorldEvent;
2118
import org.bukkit.projectiles.ProjectileSource;
19+
import io.papermc.paper.event.block.DragonEggFormEvent;
20+
import net.kyori.adventure.text.Component;
21+
import net.kyori.adventure.text.format.NamedTextColor;
2222

23-
import java.util.Map;
23+
import de.kiridevs.ksmpplugin.Util;
24+
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
2425

2526
// This class groups all functionality responsible for making the EnderDragon stronger for the first dragon fight
2627
public class DragonBuff implements Listener {

src/main/java/de/kiridevs/ksmpplugin/features/EndCrystalBuff.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.kiridevs.ksmpplugin.features;
22

3-
import de.kiridevs.ksmpplugin.Util;
4-
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
3+
import java.util.Collection;
4+
55
import org.bukkit.Bukkit;
66
import org.bukkit.Location;
77
import org.bukkit.NamespacedKey;
@@ -20,7 +20,8 @@
2020
import org.bukkit.persistence.PersistentDataType;
2121
import org.bukkit.util.Vector;
2222

23-
import java.util.Collection;
23+
import de.kiridevs.ksmpplugin.Util;
24+
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
2425

2526
// This class groups all functionality responsible for making EndCrystals stronger for the first dragon fight
2627
public class EndCrystalBuff implements Listener {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package de.kiridevs.ksmpplugin.features;
2+
3+
import java.util.HashMap;
4+
5+
import org.bukkit.*;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.entity.minecart.RideableMinecart;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.player.PlayerInteractEntityEvent;
11+
import org.bukkit.event.vehicle.VehicleMoveEvent;
12+
import org.bukkit.inventory.ItemStack;
13+
import org.bukkit.inventory.PlayerInventory;
14+
import org.bukkit.inventory.meta.Damageable;
15+
import org.bukkit.persistence.PersistentDataContainer;
16+
import org.bukkit.persistence.PersistentDataType;
17+
import org.bukkit.util.Vector;
18+
19+
import de.kiridevs.ksmpplugin.main.KiriSmpPlugin;
20+
21+
public class StickyMinecarts implements Listener {
22+
private static final String STICKY_MARKER_KEY = "isStickyMinecart";
23+
/**
24+
* @see <a href="https://jd.papermc.io/paper/1.20/org/bukkit/entity/Minecart.html#setMaxSpeed(double)">Paper JavaDocs</a>
25+
*/
26+
private static final double CART_DEFAULT_MAX_SPEED = 0.4d;
27+
28+
private final KiriSmpPlugin plugin;
29+
private final NamespacedKey dataKey;
30+
31+
public StickyMinecarts(KiriSmpPlugin plugin) {
32+
this.plugin = plugin;
33+
this.dataKey = new NamespacedKey(this.plugin, STICKY_MARKER_KEY);
34+
}
35+
36+
private boolean makeSticky(RideableMinecart cart) {
37+
PersistentDataContainer pdc = cart.getPersistentDataContainer();
38+
if (pdc.getOrDefault(dataKey, PersistentDataType.BOOLEAN, false)) {
39+
// Cart is already sticky
40+
return false;
41+
}
42+
pdc.set(this.dataKey, PersistentDataType.BOOLEAN, true);
43+
44+
// Stop cart from moving
45+
cart.setVelocity(new Vector(0, 0, 0));
46+
cart.setMaxSpeed(0);
47+
48+
// Play waxing effect
49+
Location cartLoc = cart.getLocation();
50+
cartLoc.getWorld().playEffect(cartLoc, Effect.COPPER_WAX_ON, 0);
51+
52+
return true;
53+
}
54+
55+
private boolean unsticky(RideableMinecart cart) {
56+
// Remove flag
57+
PersistentDataContainer pdc = cart.getPersistentDataContainer();
58+
boolean sticky = pdc.getOrDefault(this.dataKey, PersistentDataType.BOOLEAN, false);
59+
if (!sticky) return false;
60+
61+
cart.setMaxSpeed(CART_DEFAULT_MAX_SPEED);
62+
pdc.remove(dataKey);
63+
64+
// Play effect
65+
Location cartLoc = cart.getLocation();
66+
cartLoc.getWorld().playEffect(cartLoc, Effect.COPPER_WAX_OFF, 0);
67+
68+
return true;
69+
}
70+
71+
@EventHandler
72+
public void onPlayerInteractEvent(PlayerInteractEntityEvent event) {
73+
if (!(event.getRightClicked() instanceof RideableMinecart cart)) return;
74+
75+
Player player = event.getPlayer();
76+
PlayerInventory inv = player.getInventory();
77+
ItemStack main = inv.getItemInMainHand();
78+
79+
event.setCancelled(true); // Prevent sit-down
80+
switch (main.getType()) {
81+
case HONEY_BOTTLE -> {
82+
boolean stickied = this.makeSticky(cart);
83+
// Remove glue from inventory
84+
if (!stickied) return;
85+
main.subtract(1);
86+
HashMap<Integer, ItemStack> uninsertables = inv.addItem(new ItemStack(Material.GLASS_BOTTLE, 1));
87+
for (ItemStack uninsertable : uninsertables.values()) {
88+
Location playerLoc = player.getLocation();
89+
playerLoc.getWorld().dropItem(playerLoc, uninsertable);
90+
}
91+
}
92+
case SHEARS -> {
93+
boolean unstickied = this.unsticky(cart);
94+
// Remove 1 durability from the used shears
95+
if (!unstickied) return;
96+
Damageable dmgShears = (Damageable) main.getItemMeta();
97+
dmgShears.setDamage(dmgShears.getDamage() + 1);
98+
main.setItemMeta(dmgShears);
99+
}
100+
case STICK -> cart.setRotation(90, 0);
101+
default -> event.setCancelled(false); // Allow sitdown without special item
102+
}
103+
}
104+
105+
@EventHandler
106+
public void onMinecartMove(VehicleMoveEvent event) {
107+
if (!(event.getVehicle() instanceof RideableMinecart cart)) return;
108+
if (
109+
!cart.getPersistentDataContainer()
110+
.getOrDefault(this.dataKey, PersistentDataType.BOOLEAN, false)
111+
) return;
112+
113+
double yVelo = cart.getVelocity().getY();
114+
cart.setVelocity(new Vector(0, yVelo, 0));
115+
cart.setMaxSpeed(0);
116+
}
117+
118+
public void init() {
119+
Bukkit.getPluginManager().registerEvents(this, this.plugin);
120+
}
121+
}

src/main/java/de/kiridevs/ksmpplugin/main/Config.java

-33
This file was deleted.

src/main/java/de/kiridevs/ksmpplugin/main/KiriSmpPlugin.java

+10-16
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package de.kiridevs.ksmpplugin.main;
22

3-
import de.kiridevs.ksmpplugin.features.*;
4-
import de.kiridevs.ksmpplugin.recipes.*;
5-
import io.papermc.paper.plugin.configuration.PluginMeta;
3+
import java.util.logging.Logger;
4+
65
import org.bukkit.configuration.ConfigurationSection;
76
import org.bukkit.plugin.java.JavaPlugin;
7+
import io.papermc.paper.plugin.configuration.PluginMeta;
88

9-
import java.util.logging.Logger;
9+
import de.kiridevs.ksmpplugin.features.DeathMessage;
10+
import de.kiridevs.ksmpplugin.features.DragonBuff;
11+
import de.kiridevs.ksmpplugin.features.EndCrystalBuff;
12+
import de.kiridevs.ksmpplugin.features.StickyMinecarts;
13+
import de.kiridevs.ksmpplugin.recipes.*;
1014

1115
public class KiriSmpPlugin extends JavaPlugin {
1216

@@ -18,18 +22,7 @@ public KiriSmpPlugin() {
1822
}
1923

2024
private void registerRecipes() {
21-
ConfigurationSection craftingConfig =
22-
this.getConfig().getConfigurationSection("recipes.crafting");
23-
24-
new ChainRecipes(this, craftingConfig.getConfigurationSection("chain")).register();
25-
26-
if (!craftingConfig.getString("chainArmor").equals("false")) {
27-
new ChainArmorRecipes(this, craftingConfig.getString("chainArmor")).register();
28-
}
29-
30-
if (craftingConfig.getBoolean("bell")) new BellRecipe(this).register();
31-
if (craftingConfig.getBoolean("saddle")) new SaddleRecipe(this).register();
32-
if (craftingConfig.getBoolean("bundle")) new BundleRecipe(this).register();
25+
CraftingRecipes.register(this);
3326

3427
ConfigurationSection stonecuttingConfig =
3528
this.getConfig().getConfigurationSection("recipes.stonecutting");
@@ -40,6 +33,7 @@ public void initFeatures() {
4033
new DragonBuff(this).init();
4134
new EndCrystalBuff(this).init();
4235
new DeathMessage(this).init();
36+
new StickyMinecarts(this).init();
4337
}
4438

4539
@Override

src/main/java/de/kiridevs/ksmpplugin/recipes/BundleRecipe.java

-38
This file was deleted.

0 commit comments

Comments
 (0)