Skip to content

Commit 1198dfc

Browse files
vLuckyyyRollczi
andauthored
GH-891 Fix removing catboy using butcher, remove catboy on server shutdown, add catboy config. (#891)
* Fix removing catboy using butcher, remove catboy on server shutdown, add catboy config. Add catboy persistance. * GH-579 Add repository for language. Remove user settings. (#890) * Add repository for language. Remove user settings. * Simplify API * Provide catboy speed from config. * Create CatBoyEntityService --------- Co-authored-by: Norbert Dejlich <[email protected]>
1 parent 8936fa3 commit 1198dfc

File tree

12 files changed

+182
-30
lines changed

12 files changed

+182
-30
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.eternalcode.core.feature.butcher;
2+
3+
import org.bukkit.entity.Entity;
4+
import org.bukkit.event.Cancellable;
5+
import org.bukkit.event.Event;
6+
import org.bukkit.event.HandlerList;
7+
8+
public class ButcherEntityRemoveEvent extends Event implements Cancellable {
9+
10+
private static final HandlerList HANDLER_LIST = new HandlerList();
11+
12+
private boolean cancelled;
13+
private final Entity entity;
14+
15+
public ButcherEntityRemoveEvent(Entity entity) {
16+
this.entity = entity;
17+
}
18+
19+
@Override
20+
public boolean isCancelled() {
21+
return cancelled;
22+
}
23+
24+
@Override
25+
public void setCancelled(boolean cancelled) {
26+
this.cancelled = cancelled;
27+
}
28+
29+
public Entity getEntity() {
30+
return entity;
31+
}
32+
33+
@Override
34+
public HandlerList getHandlers() {
35+
return HANDLER_LIST;
36+
}
37+
38+
public static HandlerList getHandlerList() {
39+
return HANDLER_LIST;
40+
}
41+
}

eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.eternalcode.core.database.DatabaseType;
55
import com.eternalcode.core.feature.afk.AfkSettings;
66
import com.eternalcode.core.feature.automessage.AutoMessageSettings;
7+
import com.eternalcode.core.feature.catboy.CatBoySettings;
78
import com.eternalcode.core.feature.chat.ChatSettings;
89
import com.eternalcode.core.feature.helpop.HelpOpSettings;
910
import com.eternalcode.core.feature.jail.JailSettings;
@@ -421,6 +422,24 @@ public Set<String> allowedCommands() {
421422
}
422423
}
423424

425+
@Bean
426+
@Description({ " ", "# 4fun Section" })
427+
FunSection fun = new FunSection();
428+
429+
@Contextual
430+
public static class FunSection implements CatBoySettings {
431+
@Description({
432+
"# Speed of player walk speed while using /catboy feature",
433+
"# Default minecraft walk speed is 0.2"
434+
})
435+
public float catboyWalkSpeed = 0.4F;
436+
437+
@Override
438+
public float getCatboyWalkSpeed() {
439+
return this.catboyWalkSpeed;
440+
}
441+
}
442+
424443
@Override
425444
public Resource resource(File folder) {
426445
return Source.of(folder, "config.yml");
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
import com.eternalcode.core.bridge.litecommand.argument.AbstractViewerArgument;
44
import com.eternalcode.core.configuration.implementation.PluginConfiguration;
55
import com.eternalcode.core.injector.annotations.Inject;
66
import com.eternalcode.core.injector.annotations.lite.LiteArgument;
7+
import com.eternalcode.core.viewer.ViewerService;
78
import com.eternalcode.multification.notice.NoticeBroadcast;
89
import com.eternalcode.core.notice.NoticeService;
910
import com.eternalcode.core.translation.Translation;
1011
import com.eternalcode.core.translation.TranslationManager;
1112
import com.eternalcode.core.viewer.Viewer;
12-
import com.eternalcode.core.viewer.ViewerService;
1313
import dev.rollczi.litecommands.argument.Argument;
1414
import dev.rollczi.litecommands.argument.parser.ParseResult;
1515
import dev.rollczi.litecommands.invocation.Invocation;
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
4-
import com.eternalcode.core.configuration.implementation.PluginConfiguration;
4+
import com.eternalcode.core.event.EventCaller;
55
import com.eternalcode.core.injector.annotations.Inject;
66
import com.eternalcode.core.notice.NoticeService;
77
import dev.rollczi.litecommands.annotations.argument.Arg;
@@ -25,10 +25,12 @@
2525
class ButcherCommand {
2626

2727
private final NoticeService noticeService;
28+
private final EventCaller eventCaller;
2829

2930
@Inject
30-
ButcherCommand(NoticeService noticeService, PluginConfiguration pluginConfiguration) {
31+
ButcherCommand(NoticeService noticeService, EventCaller eventCaller) {
3132
this.noticeService = noticeService;
33+
this.eventCaller = eventCaller;
3234
}
3335

3436
@Execute
@@ -51,16 +53,21 @@ void execute(@Context Player player, @Arg(ButcherArgument.KEY) int chunks, @Arg(
5153

5254
private void killMobs(Player player, int chunksNumber, MobFilter mobFilter) {
5355
Collection<Chunk> chunks = this.getChunksNearPlayer(player, chunksNumber);
54-
5556
int killedMobs = 0;
5657

5758
for (Chunk chunk : chunks) {
5859
for (Entity entity : chunk.getEntities()) {
59-
6060
if (!mobFilter.filterMob(entity)) {
6161
continue;
6262
}
6363

64+
ButcherEntityRemoveEvent event = new ButcherEntityRemoveEvent(entity);
65+
this.eventCaller.callEvent(event);
66+
67+
if (event.isCancelled()) {
68+
continue;
69+
}
70+
6471
entity.remove();
6572
killedMobs++;
6673
}

eternalcore-core/src/main/java/com/eternalcode/core/feature/essentials/mob/MobEntity.java renamed to eternalcore-core/src/main/java/com/eternalcode/core/feature/butcher/MobEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
import com.eternalcode.core.util.EntityUtil;
44
import org.bukkit.entity.Animals;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
import com.eternalcode.core.bridge.litecommand.argument.AbstractViewerArgument;
44
import com.eternalcode.core.injector.annotations.Inject;

eternalcore-core/src/main/java/com/eternalcode/core/feature/essentials/mob/MobFilter.java renamed to eternalcore-core/src/main/java/com/eternalcode/core/feature/butcher/MobFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
import org.bukkit.entity.Entity;
44

eternalcore-core/src/main/java/com/eternalcode/core/feature/essentials/mob/MobType.java renamed to eternalcore-core/src/main/java/com/eternalcode/core/feature/butcher/MobType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.eternalcode.core.feature.essentials.mob;
1+
package com.eternalcode.core.feature.butcher;
22

33
enum MobType {
44

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.eternalcode.core.feature.catboy;
2+
3+
import com.eternalcode.core.injector.annotations.Inject;
4+
import com.eternalcode.core.injector.annotations.component.Service;
5+
import org.bukkit.NamespacedKey;
6+
import org.bukkit.entity.Cat;
7+
import org.bukkit.entity.EntityType;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.persistence.PersistentDataContainer;
10+
import org.bukkit.persistence.PersistentDataType;
11+
import org.bukkit.plugin.Plugin;
12+
13+
@Service
14+
class CatBoyEntityService {
15+
16+
private final NamespacedKey catboyNamespacedKey;
17+
18+
@Inject
19+
CatBoyEntityService(Plugin plugin) {
20+
this.catboyNamespacedKey = new NamespacedKey(plugin, "catboy");
21+
}
22+
23+
Cat createCatboyEntity(Player player, Cat.Type type) {
24+
Cat cat = (Cat) player.getWorld().spawnEntity(player.getLocation(), EntityType.CAT);
25+
cat.setInvulnerable(true);
26+
cat.setOwner(player);
27+
cat.setAI(false);
28+
cat.setCatType(type);
29+
30+
PersistentDataContainer persistentDataContainer = cat.getPersistentDataContainer();
31+
persistentDataContainer.set(catboyNamespacedKey, PersistentDataType.BOOLEAN, true);
32+
33+
return cat;
34+
}
35+
36+
boolean isCatboy(Cat cat) {
37+
return cat.getPersistentDataContainer().has(catboyNamespacedKey, PersistentDataType.BOOLEAN);
38+
}
39+
40+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.eternalcode.core.feature.catboy;
2+
3+
public interface CatBoySettings {
4+
5+
float getCatboyWalkSpeed();
6+
7+
}

0 commit comments

Comments
 (0)