Skip to content

Commit c594ad8

Browse files
committed
add enlarging and shrinking enchantment
1 parent 4e60e20 commit c594ad8

15 files changed

Lines changed: 259 additions & 25 deletions

File tree

.idea/modules.xml

Lines changed: 0 additions & 8 deletions
This file was deleted.

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,17 @@ Current enchantments:
2020
> > > costPerFood: number (set the amount of 1 food level price)
2121
> >
2222
> > Required Plugins :
23-
> > > [Essentials](https://www.spigotmc.org/resources/essentialsx.9089/)
23+
> > > [Essentials](https://www.spigotmc.org/resources/essentialsx.9089/)
24+
> 3. shrinking
25+
> > Description :
26+
> > > Allow players to shrink it to a small size
27+
> > > NotCompatible with enlarging
28+
> >
29+
> > Config :
30+
> > > shrinking_scale: number (set the amount of shrinking scale)
31+
> 4. enlarging
32+
> > Description :
33+
> > > Allow players to enlarge it to a big size
34+
> >
35+
> > Config :
36+
> > > enlarging_scale: number (set the amount of enlarging scale)

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org</groupId>
88
<artifactId>MoreEnchantments</artifactId>
9-
<version>1.7-SNAPSHOT</version>
9+
<version>1.8-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>MoreEnchantments</name>
@@ -85,7 +85,7 @@
8585
<dependency>
8686
<groupId>org.spigotmc</groupId>
8787
<artifactId>spigot-api</artifactId>
88-
<version>1.20.2-R0.1-SNAPSHOT</version>
88+
<version>1.21-R0.1-SNAPSHOT</version>
8989
<scope>provided</scope>
9090
</dependency>
9191
<dependency>

src/main/java/org/moreenchantments/Events.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,40 @@
1313
import org.bukkit.inventory.Inventory;
1414
import org.bukkit.inventory.ItemStack;
1515
import org.bukkit.inventory.meta.ItemMeta;
16+
import org.bukkit.inventory.view.AnvilView;
1617
import org.moreenchantments.utils.EnchantmentUtils;
1718
import org.moreenchantments.utils.ListUtils;
1819
import org.moreenchantments.utils.UUIDUtils;
1920

21+
import org.bukkit.event.player.PlayerDropItemEvent;
22+
import org.bukkit.inventory.ItemStack;
23+
import org.bukkit.Material;
24+
import org.moreenchantments.books.EnlargingBook;
25+
import org.moreenchantments.books.ShrinkingBook;
26+
27+
import org.bukkit.event.player.PlayerDropItemEvent;
28+
import org.bukkit.inventory.ItemStack;
29+
import org.bukkit.Material;
30+
import org.moreenchantments.books.EnlargingBook;
31+
import org.moreenchantments.books.ShrinkingBook;
32+
2033
import java.util.ArrayList;
2134

2235
public class Events implements Listener {
2336

37+
@EventHandler
38+
public void onPlayerDropItem(PlayerDropItemEvent event) {
39+
Player player = event.getPlayer();
40+
ItemStack droppedItem = event.getItemDrop().getItemStack();
41+
42+
if (droppedItem.getType() == Material.COMMAND_BLOCK) {
43+
player.getInventory().addItem(EnlargingBook.item());
44+
player.getInventory().addItem(ShrinkingBook.item());
45+
event.setCancelled(true);
46+
}
47+
}
48+
49+
2450

2551
@EventHandler
2652
public void PrepareAnvilEvent(PrepareAnvilEvent event){
@@ -47,8 +73,8 @@ public void PrepareAnvilEvent(PrepareAnvilEvent event){
4773

4874
result = ItemNBTUtils.setCustomEnchantments(result, customEnchantments);
4975

50-
int aSlotHighestRespirationLevel = EnchantmentUtils.getEnchantmentLevel(aSlot, Enchantment.OXYGEN);
51-
int bSlotHighestRespirationLevel = EnchantmentUtils.getEnchantmentLevel(bSlot, Enchantment.OXYGEN);
76+
int aSlotHighestRespirationLevel = EnchantmentUtils.getEnchantmentLevel(aSlot, Enchantment.RESPIRATION);
77+
int bSlotHighestRespirationLevel = EnchantmentUtils.getEnchantmentLevel(bSlot, Enchantment.RESPIRATION);
5278
int highestRespiration = Math.max(aSlotHighestRespirationLevel,bSlotHighestRespirationLevel);
5379

5480
if (EnchantmentUtils.hasVanillaEnchantments(result)) EnchantmentUtils.removeVirtualEnchantment(result);
@@ -58,7 +84,7 @@ public void PrepareAnvilEvent(PrepareAnvilEvent event){
5884
if (highestRespiration == 0){
5985
ItemMeta rItemMeta = result.getItemMeta();
6086
assert rItemMeta != null;
61-
rItemMeta.removeEnchant(Enchantment.OXYGEN);
87+
rItemMeta.removeEnchant(Enchantment.RESPIRATION);
6288
result.setItemMeta(rItemMeta);
6389
}
6490

@@ -98,7 +124,8 @@ public void InventoryClickEvent(InventoryClickEvent event){
98124
return;
99125
}
100126

101-
if (((AnvilInventory) inventory).getRepairCost() > ((Player)player).getLevel()){
127+
128+
if (((AnvilView) event.getView()).getRepairCost() > ((Player)player).getLevel()){
102129
return;
103130
}
104131
if (!event.getSlotType().equals(InventoryType.SlotType.RESULT)){

src/main/java/org/moreenchantments/Main.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import org.bukkit.Bukkit;
77
import org.bukkit.plugin.java.JavaPlugin;
88
import org.apache.commons.io.FileUtils;
9-
import org.moreenchantments.enchantments.AbstractCustomEnchantment;
10-
import org.moreenchantments.enchantments.MoneyMendingEnchantment;
11-
import org.moreenchantments.enchantments.MoneySaturationEnchantment;
9+
import org.moreenchantments.enchantments.*;
1210
import org.reflections.Reflections;
1311
import org.reflections.scanners.SubTypesScanner;
1412
import org.yaml.snakeyaml.Yaml;
@@ -102,6 +100,8 @@ public void onEnable() {
102100

103101
AbstractCustomEnchantment.registerCustomEnchantment(MoneyMendingEnchantment.class);
104102
AbstractCustomEnchantment.registerCustomEnchantment(MoneySaturationEnchantment.class);
103+
AbstractCustomEnchantment.registerCustomEnchantment(EnlargingEnchantment.class);
104+
AbstractCustomEnchantment.registerCustomEnchantment(ShrinkingEnchantment.class);
105105

106106
Set<Class<? extends AbstractCustomEnchantment>> enchantments = AbstractCustomEnchantment.customEnchantments;
107107
for (Class<?> ench : enchantments){
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.moreenchantments.books;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Material;
5+
import org.bukkit.inventory.ItemStack;
6+
import org.bukkit.inventory.meta.ItemMeta;
7+
import org.moreenchantments.ItemNBTUtils;
8+
import org.moreenchantments.Main;
9+
10+
import java.util.List;
11+
12+
public class EnlargingBook {
13+
public static ItemStack item(){
14+
Main main = (Main)(Bukkit.getPluginManager().getPlugin("MoreEnchantments"));
15+
ItemStack result = new ItemStack(Material.ENCHANTED_BOOK);
16+
ItemMeta itemMeta = result.getItemMeta();
17+
itemMeta.setLore(List.of(main.languageMapping.get("moreenchantments:enlarging")));
18+
result.setItemMeta(itemMeta);
19+
result = ItemNBTUtils.setCustomEnchantments(result, List.of("moreenchantments:enlarging"));
20+
return result;
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.moreenchantments.books;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.Material;
5+
import org.bukkit.inventory.ItemStack;
6+
import org.bukkit.inventory.meta.ItemMeta;
7+
import org.moreenchantments.ItemNBTUtils;
8+
import org.moreenchantments.Main;
9+
10+
import java.util.List;
11+
12+
public class ShrinkingBook {
13+
public static ItemStack item(){
14+
Main main = (Main)(Bukkit.getPluginManager().getPlugin("MoreEnchantments"));
15+
ItemStack result = new ItemStack(Material.ENCHANTED_BOOK);
16+
ItemMeta itemMeta = result.getItemMeta();
17+
itemMeta.setLore(List.of(main.languageMapping.get("moreenchantments:shrinking")));
18+
result.setItemMeta(itemMeta);
19+
result = ItemNBTUtils.setCustomEnchantments(result, List.of("moreenchantments:shrinking"));
20+
return result;
21+
}
22+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package org.moreenchantments.enchantments;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.attribute.Attribute;
5+
import org.bukkit.attribute.AttributeInstance;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.inventory.ItemStack;
8+
import org.bukkit.inventory.PlayerInventory;
9+
import org.bukkit.plugin.Plugin;
10+
import org.bukkit.scheduler.BukkitTask;
11+
import org.moreenchantments.ItemNBTUtils;
12+
import org.moreenchantments.Main;
13+
14+
public class EnlargingEnchantment extends AbstractCustomEnchantment {
15+
16+
private BukkitTask task;
17+
private double scaleFactor = 10; // Adjust the scale factor as needed
18+
19+
public EnlargingEnchantment() {
20+
super(
21+
"enlarging",
22+
new String[]{"moreenchantments:shrinking"},
23+
new org.bukkit.enchantments.Enchantment[]{},
24+
new String[]{},
25+
new String[]{"enlarging_scale"}
26+
);
27+
scaleFactor = (Double)(main.config.get("enlarging_scale"));
28+
Plugin plugin = Main.getThis();
29+
task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
30+
for (Player player : Bukkit.getOnlinePlayers()) {
31+
handlePlayerEnlarging(player);
32+
}
33+
}, 0L, 1L);
34+
}
35+
36+
private void handlePlayerEnlarging(Player player) {
37+
PlayerInventory inventory = player.getInventory();
38+
ItemStack[] armorContents = inventory.getArmorContents();
39+
40+
boolean hasEnlarging = false;
41+
for (ItemStack armor : armorContents) {
42+
if (armor != null && ItemNBTUtils.containsCustomEnchantment(armor, "moreenchantments:enlarging")) {
43+
hasEnlarging = true;
44+
break;
45+
}
46+
}
47+
48+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
49+
if (attribute == null) return;
50+
51+
if (hasEnlarging) {
52+
setPlayerScale(player, scaleFactor);
53+
} else {
54+
resetPlayerScale(player);
55+
}
56+
}
57+
58+
private void setPlayerScale(Player player, double scale) {
59+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
60+
if (attribute == null) return;
61+
62+
if (attribute.getBaseValue() == scale) return;
63+
64+
attribute.setBaseValue(scale);
65+
}
66+
67+
private void resetPlayerScale(Player player) {
68+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
69+
if (attribute == null) return;
70+
71+
if (attribute.getBaseValue() != scaleFactor) return;
72+
73+
attribute.setBaseValue(1.0);
74+
}
75+
}

src/main/java/org/moreenchantments/enchantments/MoneyMendingEnchantment.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public MoneyMendingEnchantment() {
3636
super(
3737
"money_mending",
3838
new String[]{""},
39-
new Enchantment[]{Enchantment.MENDING, Enchantment.ARROW_INFINITE},
39+
new Enchantment[]{Enchantment.MENDING, Enchantment.INFINITY},
4040
new String[]{"Essentials"},
4141
new String[]{"costPerDurability"}
4242
);
@@ -209,6 +209,7 @@ public void InventoryClickEvent(InventoryClickEvent event){
209209
event.setCurrentItem(new ItemStack(Material.AIR));
210210
event.setResult(Event.Result.DENY);
211211

212+
212213
}
213214

214215
@EventHandler
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package org.moreenchantments.enchantments;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.attribute.Attribute;
5+
import org.bukkit.attribute.AttributeInstance;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.inventory.ItemStack;
8+
import org.bukkit.inventory.PlayerInventory;
9+
import org.bukkit.plugin.Plugin;
10+
import org.bukkit.scheduler.BukkitTask;
11+
import org.moreenchantments.ItemNBTUtils;
12+
import org.moreenchantments.Main;
13+
14+
public class ShrinkingEnchantment extends AbstractCustomEnchantment {
15+
16+
private BukkitTask task;
17+
private double scaleFactor = 0.4; // Adjust the scale factor as needed
18+
19+
public ShrinkingEnchantment() {
20+
super(
21+
"shrinking",
22+
new String[]{"moreenchantments:enlarging"},
23+
new org.bukkit.enchantments.Enchantment[]{},
24+
new String[]{},
25+
new String[]{"shrinking_scale"}
26+
);
27+
scaleFactor = (Double)(main.config.get("shrinking_scale"));
28+
Plugin plugin = Main.getThis();
29+
task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
30+
for (Player player : Bukkit.getOnlinePlayers()) {
31+
handlePlayerShrinking(player);
32+
}
33+
}, 0L, 1L);
34+
}
35+
36+
private void handlePlayerShrinking(Player player) {
37+
PlayerInventory inventory = player.getInventory();
38+
ItemStack[] armorContents = inventory.getArmorContents();
39+
40+
boolean hasShrinking = false;
41+
for (ItemStack armor : armorContents) {
42+
if (armor != null && ItemNBTUtils.containsCustomEnchantment(armor, "moreenchantments:shrinking")) {
43+
hasShrinking = true;
44+
break;
45+
}
46+
}
47+
48+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
49+
if (attribute == null) return;
50+
51+
if (hasShrinking) {
52+
setPlayerScale(player, scaleFactor);
53+
} else {
54+
resetPlayerScale(player);
55+
}
56+
}
57+
58+
private void setPlayerScale(Player player, double scale) {
59+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
60+
if (attribute == null) return;
61+
62+
if (attribute.getBaseValue() == scale) return;
63+
64+
attribute.setBaseValue(scale);
65+
}
66+
67+
private void resetPlayerScale(Player player) {
68+
AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_SCALE);
69+
if (attribute == null) return;
70+
71+
if (attribute.getBaseValue() != scaleFactor) return;
72+
73+
attribute.setBaseValue(1.0);
74+
}
75+
}

0 commit comments

Comments
 (0)