Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.eternalcode.core.feature.notarget;

import java.util.UUID;
import org.bukkit.entity.Player;

public interface MobTargetService {
Comment thread
CitralFlo marked this conversation as resolved.

/*
* Removes mob tracking for player.
*/
void removeTracking(Player player);

/*
* Checks if a player is ignored for mob targeting.
* @return true if the player is ignored, false otherwise.
*/
boolean doMobsIgnore(UUID uniqueId);
Comment thread
CitralFlo marked this conversation as resolved.

/*
* Removes a player from the mob targeting ignore list.
*/
void startTracking(UUID uniqueId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.eternalcode.core.feature.notarget;

import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.injector.annotations.component.Controller;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;

@Controller
public class MobTargetListener implements Listener {

private final MobTargetService mobTargetService;

@Inject
public MobTargetListener(MobTargetService mobTargetService) {
this.mobTargetService = mobTargetService;
}

@EventHandler
public void onMobTarget(EntityTargetLivingEntityEvent event) {
if (event.getTarget() instanceof Player player && this.mobTargetService.doMobsIgnore(player.getUniqueId())) {
event.setCancelled(true);
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.eternalcode.core.feature.notarget;

import com.eternalcode.core.injector.annotations.component.Service;
import java.util.HashSet;
import java.util.UUID;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Mob;
import org.bukkit.entity.Player;

@Service
public class MobTargetServiceImpl implements MobTargetService {

private final HashSet<UUID> mobTargetMap = new HashSet<>();

@Override
public void removeTracking(Player player) {
this.mobTargetMap.add(player.getUniqueId());

this.enableNoTarget(player);
}

@Override
public boolean doMobsIgnore(UUID uniqueId) {
return this.mobTargetMap.contains(uniqueId);
}

@Override
public void startTracking(UUID uniqueId) {
this.mobTargetMap.remove(uniqueId);
}

private void enableNoTarget(Player player) {
for (Entity entity : player.getNearbyEntities(30, 30, 30)) {
if (entity instanceof Mob mob) {

if (mob.getTarget() != null && mob.getTarget().equals(player)) {
mob.setTarget(null);
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.eternalcode.core.feature.notarget;

import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.notice.NoticeService;
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Sender;
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission;
import java.util.UUID;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

@Command(name = "notarget")
@Permission("eternalcore.notarget")
public class NoTargetCommand {

private final MobTargetService mobTargetService;
private final NoticeService noticeService;

@Inject
public NoTargetCommand(MobTargetService mobTargetService, NoticeService noticeService) {
this.mobTargetService = mobTargetService;
this.noticeService = noticeService;
}

@Execute
void execute(@Sender Player player) {
UUID uniqueId = player.getUniqueId();

if (this.mobTargetService.doMobsIgnore(uniqueId)) {
this.turnOff(uniqueId);
return;
}
Comment thread
CitralFlo marked this conversation as resolved.

this.turnOn(player);
}

@Execute
void execute(@Sender CommandSender sender, @Arg Player target) {
UUID uniqueId = target.getUniqueId();

if (this.mobTargetService.doMobsIgnore(uniqueId)) {
this.noticeService.create()
.notice(translation -> translation.noTarget().turnedOn())
.placeholder("{PLAYER}", target.getName())
.sender(sender)
.send();

this.turnOn(target);
return;
}
Comment thread
CitralFlo marked this conversation as resolved.
this.noticeService.create()
.notice(translation -> translation.noTarget().turnedOff())
.placeholder("{PLAYER}", target.getName())
.sender(sender)
.send();

this.turnOff(uniqueId);
}

private void turnOn(Player player) {
this.mobTargetService.removeTracking(player);

this.noticeService.create()
.notice(translation -> translation.noTarget().enabled())
.player(player.getUniqueId())
.send();
}

private void turnOff(UUID uniqueId) {
this.mobTargetService.startTracking(uniqueId);

this.noticeService.create()
.notice(translation -> translation.noTarget().disabled())
.player(uniqueId)
.send();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.eternalcode.core.feature.notarget.messages;

import com.eternalcode.multification.notice.Notice;
import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.annotation.Comment;
import lombok.Getter;
import lombok.experimental.Accessors;

@Getter
@Accessors(fluent = true)
public class ENNoTargetMessages extends OkaeriConfig implements NoTargetMessages {
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Monsters will target You!");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Monsters will target You!");
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Monsters will target you!");

Notice enabled = Notice.chat("<color:#9d6eef>► <white>Monsters will no longer target You!");

@Comment({" ", "# Placeholder: {PLAYER} - Targeted player name"})
Notice turnedOff = Notice.chat("<color:#9d6eef>► <white>Monsters will target <green>{PLAYER}<white> - protection has been turned off!");
Notice turnedOn = Notice.chat("<color:#9d6eef>► <white>Monsters will ignore <green>{PLAYER}<white> - protection has been turned on!");

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.eternalcode.core.feature.notarget.messages;

import com.eternalcode.multification.notice.Notice;

public interface NoTargetMessages {
Notice enabled();
Notice disabled();

Notice turnedOn();
Notice turnedOff();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.eternalcode.core.feature.notarget.messages;

import com.eternalcode.multification.notice.Notice;
import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.annotation.Comment;
import lombok.Getter;
import lombok.experimental.Accessors;

@Getter
@Accessors(fluent = true)
public class PLNoTargetMessages extends OkaeriConfig implements NoTargetMessages {
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Potwory nie będą Cię więcej ignorować!");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Potwory nie będą Cię więcej ignorować!");
Notice disabled = Notice.chat("<color:#9d6eef>► <white>Potwory nie będą cię więcej ignorować!");

Notice enabled = Notice.chat("<color:#9d6eef>► <white>Potwory będą Cię ignorować!");

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Notice enabled = Notice.chat("<color:#9d6eef>► <white>Potwory będą Cię ignorować!");
Notice enabled = Notice.chat("<color:#9d6eef>► <white>Potwory będą cię ignorować!");


@Comment({ " ", "# Placeholder: {PLAYER} - Wybrany komendą gracz"})
Notice turnedOff = Notice.chat("<color:#9d6eef>► <white>Potwory nie będą ignorować gracza: <green>{PLAYER}<white> - ochrona została wyłączona!");
Notice turnedOn = Notice.chat("<color:#9d6eef>► <white>Potwory będą ignorować gracza: <green>{PLAYER}<white> - ochrona została włączona!");
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.eternalcode.core.feature.back.messages.BackMessages;
import com.eternalcode.core.feature.freeze.messages.FreezeMessages;
import com.eternalcode.core.feature.notarget.messages.NoTargetMessages;
import com.eternalcode.core.feature.playtime.messages.PlaytimeMessages;
import com.eternalcode.core.feature.clear.messages.ClearMessages;
import com.eternalcode.core.feature.container.messages.ContainerMessages;
Expand All @@ -14,14 +15,11 @@
import com.eternalcode.core.feature.burn.messages.BurnMessages;
import com.eternalcode.core.feature.butcher.messages.ButcherMessages;
import com.eternalcode.core.feature.chat.messages.ChatMessages;
import com.eternalcode.core.feature.clear.messages.ClearMessages;
import com.eternalcode.core.feature.container.messages.ContainerMessages;
import com.eternalcode.core.feature.deathmessage.messages.DeathMessages;
import com.eternalcode.core.feature.disposal.messages.DisposalMessages;
import com.eternalcode.core.feature.enchant.messages.EnchantMessages;
import com.eternalcode.core.feature.feed.messages.FeedMessages;
import com.eternalcode.core.feature.fly.messages.FlyMessages;
import com.eternalcode.core.feature.freeze.messages.FreezeMessages;
import com.eternalcode.core.feature.fun.demoscreen.messages.DemoScreenMessages;
import com.eternalcode.core.feature.fun.elderguardian.messages.ElderGuardianMessages;
import com.eternalcode.core.feature.fun.endscreen.messages.EndScreenMessages;
Expand All @@ -41,11 +39,9 @@
import com.eternalcode.core.feature.near.messages.NearMessages;
import com.eternalcode.core.feature.onlineplayers.messages.OnlineMessages;
import com.eternalcode.core.feature.ping.PingMessages;
import com.eternalcode.core.feature.playtime.messages.PlaytimeMessages;
import com.eternalcode.core.feature.powertool.messages.PowertoolMessages;
import com.eternalcode.core.feature.quitmessage.messages.QuitMessage;
import com.eternalcode.core.feature.randomteleport.messages.RandomTeleportMessages;
import com.eternalcode.core.feature.repair.messages.RepairMessages;
import com.eternalcode.core.feature.seen.messages.SeenMessages;
import com.eternalcode.core.feature.setslot.messages.SetSlotMessages;
import com.eternalcode.core.feature.signeditor.messages.SignEditorMessages;
Expand All @@ -61,7 +57,6 @@
import com.eternalcode.core.feature.vanish.messages.VanishMessages;
import com.eternalcode.core.feature.warp.messages.WarpMessages;
import com.eternalcode.core.feature.whois.WhoIsMessages;
import com.eternalcode.core.litecommand.argument.messages.ArgumentMessages;

public interface Translation {

Expand Down Expand Up @@ -118,6 +113,8 @@ interface Format {

NearMessages near();

NoTargetMessages noTarget();

HealMessages heal();

FeedMessages feed();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import com.eternalcode.core.feature.motd.messages.ENMotdMessages;
import com.eternalcode.core.feature.msg.messages.ENMsgMessages;
import com.eternalcode.core.feature.near.messages.ENNearMessages;
import com.eternalcode.core.feature.notarget.messages.ENNoTargetMessages;
import com.eternalcode.core.feature.onlineplayers.messages.ENOnlineMessages;
import com.eternalcode.core.feature.ping.ENPingMessages;
import com.eternalcode.core.feature.playtime.messages.ENPlaytimeMessages;
Expand Down Expand Up @@ -211,6 +212,9 @@ public static class ENFormatSection extends OkaeriConfig implements Format {
@Comment("# Near")
public ENNearMessages near = new ENNearMessages();

@Comment("# No Target")
public ENNoTargetMessages noTarget = new ENNoTargetMessages();

@Comment("# Heal")
public ENHealMessages heal = new ENHealMessages();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,24 @@
import com.eternalcode.core.feature.back.messages.PLBackMessages;
import com.eternalcode.core.feature.freeze.messages.PLFreezeMessages;
import com.eternalcode.core.feature.near.messages.PLNearMessages;
import com.eternalcode.core.feature.notarget.messages.PLNoTargetMessages;
import com.eternalcode.core.feature.playtime.messages.PLPlaytimeMessages;
import com.eternalcode.core.feature.clear.messages.PLClearMessages;
import com.eternalcode.core.feature.container.messages.PLContainerMessages;
import com.eternalcode.core.feature.repair.messages.PLRepairMessages;
import com.eternalcode.core.litecommand.argument.messages.PLArgumentMessages;
import com.eternalcode.core.configuration.contextual.ConfigItem;
import com.eternalcode.core.feature.adminchat.messages.PLAdminChatMessages;
import com.eternalcode.core.feature.afk.messages.PLAfkMessages;
import com.eternalcode.core.feature.automessage.messages.PLAutoMessageMessages;
import com.eternalcode.core.feature.broadcast.messages.PLBroadcastMessages;
import com.eternalcode.core.feature.burn.messages.PLBurnMessages;
import com.eternalcode.core.feature.butcher.messages.PLButcherMessages;
import com.eternalcode.core.feature.chat.messages.PLChatMessages;
import com.eternalcode.core.feature.clear.messages.PLClearMessages;
import com.eternalcode.core.feature.container.messages.PLContainerMessages;
import com.eternalcode.core.feature.deathmessage.messages.PLDeathMessages;
import com.eternalcode.core.feature.disposal.messages.PLDisposalMessages;
import com.eternalcode.core.feature.enchant.messages.PLEnchantMessages;
import com.eternalcode.core.feature.feed.messages.PLFeedMessages;
import com.eternalcode.core.feature.fly.messages.PLFlyMessages;
import com.eternalcode.core.feature.freeze.messages.PLFreezeMessages;
import com.eternalcode.core.feature.fun.demoscreen.messages.PLDemoScreenMessages;
import com.eternalcode.core.feature.fun.elderguardian.messages.PLElderGuardianMessages;
import com.eternalcode.core.feature.fun.endscreen.messages.PLEndScreenMessages;
Expand All @@ -40,14 +37,11 @@
import com.eternalcode.core.feature.kill.messages.PLKillMessages;
import com.eternalcode.core.feature.motd.messages.PLMotdMessages;
import com.eternalcode.core.feature.msg.messages.PLMsgMessages;
import com.eternalcode.core.feature.near.messages.PLNearMessages;
import com.eternalcode.core.feature.onlineplayers.messages.PLOnlineMessages;
import com.eternalcode.core.feature.ping.PLPingMessages;
import com.eternalcode.core.feature.playtime.messages.PLPlaytimeMessages;
import com.eternalcode.core.feature.powertool.messages.PLPowertoolMessages;
import com.eternalcode.core.feature.quitmessage.messages.PLQuitMessage;
import com.eternalcode.core.feature.randomteleport.messages.PLRandomTeleportMessages;
import com.eternalcode.core.feature.repair.messages.PLRepairMessages;
import com.eternalcode.core.feature.seen.messages.PLSeenMessages;
import com.eternalcode.core.feature.setslot.messages.PLSetSlotMessages;
import com.eternalcode.core.feature.signeditor.messages.PLSignEditorMessages;
Expand All @@ -63,7 +57,6 @@
import com.eternalcode.core.feature.vanish.messages.PLVanishMessages;
import com.eternalcode.core.feature.warp.messages.PLWarpMessages;
import com.eternalcode.core.feature.whois.PLWhoIsMessages;
import com.eternalcode.core.litecommand.argument.messages.PLArgumentMessages;
import com.eternalcode.core.translation.AbstractTranslation;
import com.eternalcode.core.translation.Language;
import eu.okaeri.configs.OkaeriConfig;
Expand Down Expand Up @@ -215,6 +208,9 @@ public static class PLFormatSection extends OkaeriConfig implements Format {
@Comment("# Gracze w pobliżu")
public PLNearMessages near = new PLNearMessages();

@Comment("# Ignorowanie przez moby")
public PLNoTargetMessages noTarget = new PLNoTargetMessages();

@Comment("# Leczenie")
public PLHealMessages heal = new PLHealMessages();

Expand Down
Loading