Skip to content

Commit 3007e57

Browse files
committed
visibility conditions
1 parent 92b6c42 commit 3007e57

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

src/main/java/de/erethon/aether/creature/AetherBaseMob.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@
4242
import net.minecraft.server.MinecraftServer;
4343
import net.minecraft.server.level.ServerEntity;
4444
import net.minecraft.server.level.ServerLevel;
45+
import net.minecraft.server.level.ServerPlayer;
4546
import net.minecraft.sounds.SoundEvents;
4647
import net.minecraft.sounds.SoundSource;
4748
import net.minecraft.util.Mth;
4849
import net.minecraft.world.InteractionHand;
4950
import net.minecraft.world.InteractionResult;
51+
import net.minecraft.world.damagesource.CombatTracker;
5052
import net.minecraft.world.damagesource.DamageSource;
5153
import net.minecraft.world.entity.Display;
5254
import net.minecraft.world.entity.Entity;
@@ -107,7 +109,7 @@ public class AetherBaseMob extends Monster implements RangedAttackMob, CrossbowA
107109
protected EntityType<?> displayType;
108110
private int version = 0;
109111
protected CraftCustomMob bukkitLivingEntity;
110-
private AetherHolder holder;
112+
public AetherHolder holder;
111113
private String mobTag = null;
112114

113115
protected int mobLevel = 1;
@@ -145,6 +147,10 @@ public AetherBaseMob(NPCData data, World world, Integer overrideLevel) {
145147
version = data.getCurrentVersion();
146148
onLoad();
147149
onFirstSpawn();
150+
if (!holder.checkSpawnConditions()) {
151+
remove(Entity.RemovalReason.DISCARDED);
152+
return;
153+
}
148154
}
149155

150156
public void addToWorld() {

src/main/java/de/erethon/aether/listener/EntityListener.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import de.erethon.papyrus.entities.CraftCustomMob;
77
import de.erethon.spellbook.api.SpellEffectAddEvent;
88
import io.papermc.paper.event.entity.EntityKnockbackEvent;
9+
import io.papermc.paper.event.player.PlayerTrackEntityEvent;
910
import org.bukkit.Bukkit;
1011
import org.bukkit.entity.LivingEntity;
1112
import org.bukkit.entity.Player;
1213
import org.bukkit.event.EventHandler;
1314
import org.bukkit.event.Listener;
15+
import org.bukkit.event.entity.EntityDamageByEntityEvent;
1416
import org.bukkit.event.entity.EntityDamageEvent;
1517

1618
public class EntityListener implements Listener {
@@ -54,4 +56,11 @@ public void onEntityDamage(EntityKnockbackByEntityEvent event) {
5456
}
5557
}
5658

59+
@EventHandler
60+
public void onTrackingStart(PlayerTrackEntityEvent event) {
61+
if (event.getEntity() instanceof CraftCustomMob mob && mob.getHandle() instanceof AetherBaseMob aetherMob) {
62+
event.setCancelled(!aetherMob.holder.checkVisibilityConditions(event.getPlayer()));
63+
}
64+
}
65+
5766
}

src/main/java/de/erethon/aether/qxl/AetherHolder.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
import de.erethon.questsxl.common.QConfigLoader;
88
import de.erethon.questsxl.common.QRegistries;
99
import de.erethon.questsxl.common.Quester;
10+
import de.erethon.questsxl.condition.QCondition;
1011
import de.erethon.questsxl.error.FriendlyError;
12+
import de.erethon.questsxl.player.QPlayer;
1113
import org.bukkit.Location;
1214
import org.bukkit.configuration.ConfigurationSection;
15+
import org.bukkit.entity.Player;
1316

1417
import java.util.HashSet;
1518
import java.util.Set;
@@ -18,13 +21,37 @@ public class AetherHolder implements QComponent, Quester {
1821

1922
private AetherBaseMob mob;
2023

24+
private Set<QCondition> visibilityConditions = new HashSet<>();
25+
private Set<QCondition> spawnConditions = new HashSet<>();
2126
private Set<QAction> rightClickActions = new HashSet<>();
2227
private Set<QAction> leftClickActions = new HashSet<>();
2328
private Set<QAction> deathActions = new HashSet<>();
2429
private Set<QAction> spawnActions = new HashSet<>();
2530
private Set<QAction> damageActions = new HashSet<>();
2631
private Set<QAction> attackActions = new HashSet<>();
2732

33+
public boolean checkVisibilityConditions(Player player) {
34+
QPlayer qPlayer = QuestsXL.get().getDatabaseManager().getCurrentPlayer(player);
35+
if (qPlayer == null) {
36+
return false;
37+
}
38+
for (QCondition condition : visibilityConditions) {
39+
if (!condition.check(qPlayer)) {
40+
return false;
41+
}
42+
}
43+
return true;
44+
}
45+
46+
public boolean checkSpawnConditions() {
47+
for (QCondition condition : spawnConditions) {
48+
if (!condition.check(this)) {
49+
return false;
50+
}
51+
}
52+
return true;
53+
}
54+
2855
public void onDeath() {
2956
if (deathActions == null || deathActions.isEmpty()) {
3057
return;
@@ -123,6 +150,8 @@ public static AetherHolder loadFromConfigSection(ConfigurationSection section, A
123150
String mobID = mob.getData().getID();
124151
holder.mob = mob;
125152
try {
153+
holder.visibilityConditions = (Set<QCondition>) QConfigLoader.load(holder, "visibilityConditions", section, QRegistries.CONDITIONS);
154+
holder.spawnConditions = (Set<QCondition>) QConfigLoader.load(holder, "spawnConditions", section, QRegistries.CONDITIONS);
126155
holder.rightClickActions = (Set<QAction>) QConfigLoader.load(holder, "rightClickActions", section, QRegistries.ACTIONS);
127156
holder.leftClickActions = (Set<QAction>) QConfigLoader.load(holder, "leftClickActions", section, QRegistries.ACTIONS);
128157
holder.deathActions = (Set<QAction>) QConfigLoader.load(holder, "deathActions", section, QRegistries.ACTIONS);

0 commit comments

Comments
 (0)