Skip to content

Commit 70c4d6c

Browse files
authored
Merge pull request #23 from OneLiteFeatherNET/bugfix/vanish-item-consume
fix(vanish): Fix item consume for vanished players
2 parents 6f78ad6 + 0f82e59 commit 70c4d6c

2 files changed

Lines changed: 31 additions & 10 deletions

File tree

src/main/java/net/onelitefeather/stardust/listener/PlayerVanishListener.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import net.onelitefeather.stardust.user.UserPropertyType;
99
import org.bukkit.Bukkit;
1010
import org.bukkit.block.data.Powerable;
11-
import org.bukkit.entity.*;
11+
import org.bukkit.entity.Entity;
12+
import org.bukkit.entity.Item;
13+
import org.bukkit.entity.Player;
14+
import org.bukkit.entity.Projectile;
1215
import org.bukkit.event.Event;
1316
import org.bukkit.event.EventHandler;
1417
import org.bukkit.event.EventPriority;
@@ -21,6 +24,7 @@
2124
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
2225
import org.bukkit.event.player.PlayerDropItemEvent;
2326
import org.bukkit.event.player.PlayerInteractEvent;
27+
import org.bukkit.event.player.PlayerItemConsumeEvent;
2428
import org.bukkit.event.raid.RaidTriggerEvent;
2529

2630
import java.util.Arrays;
@@ -138,16 +142,21 @@ public void onTarget(EntityTargetEvent event) {
138142
}
139143
}
140144

145+
@EventHandler
146+
public void onItemConsume(PlayerItemConsumeEvent event) {
147+
var player = event.getPlayer();
148+
User user = stardustPlugin.getUserService().getUser(player.getUniqueId());
149+
if (user == null) return;
150+
if (!user.isVanished()) return;
151+
event.setCancelled(true);
152+
}
153+
141154
@EventHandler
142155
public void onFoodLevelChange(FoodLevelChangeEvent event) {
143-
if (event.getEntity() instanceof Player player) {
144-
try {
145-
User user = stardustPlugin.getUserService().getUser(player.getUniqueId());
146-
event.setCancelled(user != null && (user.isVanished() || player.isInvulnerable()));
147-
} catch (Exception e) {
148-
stardustPlugin.getLogger().throwing(PlayerVanishListener.class.getSimpleName(), "onFoodLevelChange", e);
149-
}
150-
}
156+
if (!(event.getEntity() instanceof Player player)) return;
157+
if (event.getFoodLevel() >= event.getEntity().getFoodLevel()) return; //Ignore food level increment
158+
if (!player.isInvulnerable()) return;
159+
event.setCancelled(true);
151160
}
152161

153162
@EventHandler

src/main/java/net/onelitefeather/stardust/task/UserTask.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.kyori.adventure.text.Component;
44
import net.onelitefeather.stardust.StardustPlugin;
55
import net.onelitefeather.stardust.util.PlayerUtil;
6+
import org.bukkit.entity.Player;
67
import org.jetbrains.annotations.NotNull;
78

89
public class UserTask implements Runnable {
@@ -17,12 +18,14 @@ public UserTask(@NotNull StardustPlugin plugin) {
1718
public void run() {
1819
plugin.getServer().getOnlinePlayers().forEach(player -> {
1920

21+
if (player.isInvulnerable()) saturatePlayer(player);
22+
2023
var user = plugin.getUserService().getUser(player.getUniqueId());
2124
if (user == null) return;
2225

2326
if (user.isVanished()) {
2427
player.sendActionBar(Component.translatable("plugin.vanish-actionbar"));
25-
28+
saturatePlayer(player);
2629
//Keep fly mode if the player's gamemode was changed to survival or adventure
2730
if (!player.getAllowFlight() && !PlayerUtil.canEnterFlyMode(player)) {
2831
player.setAllowFlight(true);
@@ -36,4 +39,13 @@ public void run() {
3639
}
3740
});
3841
}
42+
43+
private void saturatePlayer(Player player) {
44+
int requiredFoodLevel = 3; //Required food level for sprinting
45+
if(player.getFoodLevel() <= requiredFoodLevel) {
46+
player.setFoodLevel(20);
47+
player.setSaturation(20);
48+
player.setExhaustion(0);
49+
}
50+
}
3951
}

0 commit comments

Comments
 (0)