Skip to content

Commit 19688e4

Browse files
feat: bring forwards 1.18.2 changes (Starting items, class names, player)
1 parent 8f86748 commit 19688e4

16 files changed

+324
-21
lines changed

Diff for: CHANGELOG.md

+35-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
11
# Kube Utils Changelog
22

3-
## [1.0.0]
3+
## [1.0.1]
4+
5+
> This is features ported up for 0.1.4 (1.18.2 update)
46
57
### Added
68

7-
- Ported 1.19.2
9+
- A new `KuEvents.playerStarterItems` event that, once used and successfully gave items, will stop running
10+
- You can define an item and equipment slot (For things like armor) too
11+
```javascript
12+
KuEvents.playerStarterItems(event => {
13+
// Item.of is optional here
14+
event.addItems("5x minecraft:gold_ingot", Item.of("2x minecraft:grass_block"))
15+
16+
// Valid options are part of the EquipmentSlot Enum
17+
event.addEquipmentItem("chest", "minecraft:golden_chestplate")
18+
event.addEquipmentItem("offhand", "minecraft:stone")
19+
})
20+
```
21+
- A new `Ku.Player` class that brings some helpful methods
22+
- `showActionBar(text: string, color?: Color = Color.WHITE, bold = false, italic = false)`
23+
- Uses the built-in client action bar to display a message. This is already supported through the player class but this method allows for less boilerplate and stable code ports
24+
- `showActionBarComponent(component: Component)`
25+
- Mostly the same as the above but gives you access to use a JS Object as your component which might look a something like this
26+
```javascript
27+
const player = Ku.Player(event.player);
28+
player.showActionBarComponent({
29+
text: "Hello",
30+
bold: true
31+
})
32+
```
33+
- `clearStarterItemsFlag`
34+
- This method simply reset the flag for the `ku.player.starter-items` meaning on the next login, the player will be given the items once again
35+
- `isClientSide`
36+
- Lets you know if the client being wrapped is client side. This was mostly a helper for my code but it could be helpful
37+
38+
### Changed
39+
40+
- Renamed the internal binding classes to be suffixed with Ku so they're visually different from vanilla and KubeJS

Diff for: gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ loom.platform=forge
66
minecraft_version=1.19.2
77
forge_version=1.19.2-43.2.3
88

9-
mod_version=1.0.0
9+
mod_version=1.0.1
1010
maven_group=pro.mikey.mods
1111
archives_base_name=kube-utils
1212
mod_id=kubeutils

Diff for: src/main/java/pro/mikey/kubeutils/KubeUtils.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
package pro.mikey.kubeutils;
22

3+
import net.minecraftforge.common.MinecraftForge;
34
import net.minecraftforge.fml.common.Mod;
45
import org.apache.logging.log4j.LogManager;
56
import org.apache.logging.log4j.Logger;
7+
import pro.mikey.kubeutils.events.OnPlayerLoginEvent;
68

79
@Mod(KubeUtils.MOD_ID)
810
public class KubeUtils {
911
public static final String MOD_ID = "kubeutils";
1012
public static final Logger LOGGER = LogManager.getLogger();
1113

12-
public KubeUtils() {}
14+
15+
public KubeUtils() {
16+
this.registerEvents();
17+
}
18+
19+
private void registerEvents() {
20+
MinecraftForge.EVENT_BUS.register(new OnPlayerLoginEvent());
21+
}
1322

1423
public static String getId() {
1524
return MOD_ID;
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package pro.mikey.kubeutils.events;
2+
3+
import pro.mikey.kubeutils.utils.Utils;
4+
5+
public enum KuEvents {
6+
PLAYER_STARTER_ITEMS("player.starter-items");
7+
8+
private final String id;
9+
10+
KuEvents(String id) {
11+
this.id = "%s.%s".formatted(Utils.PREFIX, id);
12+
}
13+
14+
public String id() {
15+
return id;
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package pro.mikey.kubeutils.events;
2+
3+
import net.minecraftforge.event.entity.player.PlayerEvent;
4+
import net.minecraftforge.eventbus.api.SubscribeEvent;
5+
import pro.mikey.kubeutils.kubejs.events.KuEventsGroup;
6+
import pro.mikey.kubeutils.kubejs.events.PlayerStarterItems;
7+
8+
// NOTE: Maybe move this to a single class of events?
9+
public class OnPlayerLoginEvent {
10+
11+
@SubscribeEvent
12+
void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
13+
if (!event.getEntity().kjs$getPersistentData().getBoolean(PlayerStarterItems.STARTER_ITEMS_GIVEN_FLAG)) {
14+
KuEventsGroup.PLAYER_STARTING_ITEMS.post(new PlayerStarterItems(event.getEntity()));
15+
}
16+
}
17+
}

Diff for: src/main/java/pro/mikey/kubeutils/kubejs/BaseBindings.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
import pro.mikey.kubeutils.kubejs.modules.*;
55

66
public interface BaseBindings {
7-
Fluids Fluids = new Fluids();
8-
Utils Utils = new Utils();
7+
FluidsKu Fluids = new FluidsKu();
8+
UtilsKu Utils = new UtilsKu();
99
StreamsHelper Streams = new StreamsHelper();
10-
ListActions Lists = new ListActions();
11-
ClassWrapper<LevelUtils> Level = new ClassWrapper<>(LevelUtils.class);
10+
ListsKu Lists = new ListsKu();
11+
ClassWrapper<LevelKu> Level = new ClassWrapper<>(LevelKu.class);
12+
ClassWrapper<PlayerKu> Player = new ClassWrapper<>(PlayerKu.class);
1213
}

Diff for: src/main/java/pro/mikey/kubeutils/kubejs/KubeUtilsPlugin.java

+16
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,26 @@
22

33
import dev.latvian.mods.kubejs.KubeJSPlugin;
44
import dev.latvian.mods.kubejs.script.BindingsEvent;
5+
import dev.latvian.mods.kubejs.script.ScriptType;
6+
import dev.latvian.mods.kubejs.util.ClassFilter;
7+
import pro.mikey.kubeutils.kubejs.events.KuEventsGroup;
8+
import pro.mikey.kubeutils.utils.Utils;
59

610
public class KubeUtilsPlugin extends KubeJSPlugin {
711
@Override
812
public void registerBindings(BindingsEvent event) {
913
event.add("Ku", BaseBindings.class);
1014
}
15+
16+
@Override
17+
public void registerEvents() {
18+
KuEventsGroup.GROUP.register();
19+
}
20+
21+
@Override
22+
public void registerClasses(ScriptType type, ClassFilter filter) {
23+
filter.deny(Utils.class);
24+
filter.deny(BaseBindings.class);
25+
filter.deny(KubeUtilsPlugin.class);
26+
}
1127
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package pro.mikey.kubeutils.kubejs.events;
2+
3+
import dev.latvian.mods.kubejs.event.EventGroup;
4+
import dev.latvian.mods.kubejs.event.EventHandler;
5+
6+
public class KuEventsGroup {
7+
public static final EventGroup GROUP = EventGroup.of("KuEvents");
8+
public static final EventHandler PLAYER_STARTING_ITEMS = GROUP.server("playerStarterItems", () -> PlayerStarterItems.class);
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package pro.mikey.kubeutils.kubejs.events;
2+
3+
import dev.latvian.mods.kubejs.item.ItemHandlerUtils;
4+
import dev.latvian.mods.kubejs.player.PlayerEventJS;
5+
import net.minecraft.world.entity.EquipmentSlot;
6+
import net.minecraft.world.entity.player.Player;
7+
import net.minecraft.world.item.ItemStack;
8+
import pro.mikey.kubeutils.events.KuEvents;
9+
import pro.mikey.kubeutils.kubejs.modules.PlayerKu;
10+
import pro.mikey.kubeutils.utils.Utils;
11+
import pro.mikey.kubeutils.utils.annotations.KuEvent;
12+
13+
import java.util.*;
14+
15+
/**
16+
* Custom event fired when the player logins in and does not have the {@link PlayerStarterItems#STARTER_ITEMS_GIVEN_FLAG}
17+
* flag enabled. You can reset this flag at any point using {@link PlayerKu#clearStarterItemsFlag()}
18+
*
19+
* To add items, simply call the event and use the `addItems` method.
20+
* <p>
21+
* <code>
22+
* // 1.18
23+
* // Item.of is optional here
24+
* KuEvents.playerStarterItems(event => {
25+
* event.addItems("5x minecraft:gold_ingot", Item.of("2x minecraft:grass_block"))
26+
* <p>
27+
* event.addEquipmentItem("chest", "minecraft:golden_chestplate")
28+
* event.addEquipmentItem("offhand", "minecraft:stone")
29+
* })
30+
* </code
31+
*/
32+
@KuEvent(KuEvents.PLAYER_STARTER_ITEMS)
33+
public class PlayerStarterItems extends PlayerEventJS {
34+
public static final String STARTER_ITEMS_GIVEN_FLAG = Utils.kuIdStorage("sig");
35+
36+
private final Player player;
37+
private final List<ItemStack> items = new ArrayList<>();
38+
private final Map<EquipmentSlot, ItemStack> armorItems = new HashMap<>();
39+
40+
public PlayerStarterItems(Player player) {
41+
this.player = player;
42+
}
43+
44+
public void addItems(ItemStack... items) {
45+
this.items.addAll(List.of(items));
46+
}
47+
48+
public void addEquipmentItem(String equipmentSlot, ItemStack item) {
49+
var slot = Arrays.stream(EquipmentSlot.values())
50+
.filter(e -> e.getName().equalsIgnoreCase(equipmentSlot))
51+
.findFirst()
52+
.orElse(EquipmentSlot.CHEST);
53+
54+
this.armorItems.put(slot, item);
55+
}
56+
57+
@Override
58+
protected void afterPosted(boolean cancelled) {
59+
if (cancelled) {
60+
return;
61+
}
62+
63+
boolean inserted = false;
64+
if (this.items.size() > 0) {
65+
this.items.forEach(item -> ItemHandlerUtils.giveItemToPlayer(this.player, item, -1));
66+
inserted = true;
67+
}
68+
69+
if (this.armorItems.size() > 0) {
70+
this.armorItems.forEach((key, value) -> {
71+
this.player.setItemSlot(key, value);
72+
73+
// If it didn't place, put it in their inventory
74+
if (this.player.getItemBySlot(key).getItem() != value.getItem()) {
75+
ItemHandlerUtils.giveItemToPlayer(this.player, value, -1);
76+
}
77+
});
78+
79+
inserted = true;
80+
}
81+
82+
if (inserted) {
83+
this.player.kjs$getPersistentData().putBoolean(STARTER_ITEMS_GIVEN_FLAG, true);
84+
}
85+
}
86+
87+
@Override
88+
public Player getEntity() {
89+
return this.player;
90+
}
91+
}

Diff for: src/main/java/pro/mikey/kubeutils/kubejs/modules/Fluids.java renamed to src/main/java/pro/mikey/kubeutils/kubejs/modules/FluidsKu.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package pro.mikey.kubeutils.kubejs.modules;
22

3-
import dev.latvian.mods.kubejs.util.ListJS;
43
import net.minecraft.world.level.material.Fluid;
54
import net.minecraftforge.registries.ForgeRegistries;
65

@@ -10,8 +9,8 @@
109
/**
1110
* Fluid helpers module
1211
*/
13-
public class Fluids {
14-
public Fluids() {
12+
public class FluidsKu {
13+
public FluidsKu() {
1514
}
1615

1716
/**
@@ -33,7 +32,7 @@ public List<Fluid> getFluidsByNamespace(@Nullable String namespace) {
3332
}
3433

3534
/**
36-
* Same as {@link Fluids#getFluidsByNamespace(String)} but accepts a list of namespaces
35+
* Same as {@link FluidsKu#getFluidsByNamespace(String)} but accepts a list of namespaces
3736
*
3837
* @param namespaces the namespaces you want to fetch the fluids for
3938
*

Diff for: src/main/java/pro/mikey/kubeutils/kubejs/modules/LevelUtils.java renamed to src/main/java/pro/mikey/kubeutils/kubejs/modules/LevelKu.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
import java.util.*;
2323
import java.util.function.Predicate;
2424

25-
public class LevelUtils {
25+
public class LevelKu {
2626
private static final ResourceLocation UNKNOWN = new ResourceLocation(KubeUtils.getId(), "unknown");
2727
private final ServerLevel level;
2828

29-
public LevelUtils(ServerLevel level) {
29+
public LevelKu(ServerLevel level) {
3030
this.level = level.getLevel();
3131
}
3232

Diff for: src/main/java/pro/mikey/kubeutils/kubejs/modules/ListActions.java renamed to src/main/java/pro/mikey/kubeutils/kubejs/modules/ListsKu.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
77

8-
import java.util.List;
98
import java.util.Map;
109

11-
public class ListActions {
12-
private static final Logger LOGGER = LoggerFactory.getLogger(ListActions.class);
10+
public class ListsKu {
11+
private static final Logger LOGGER = LoggerFactory.getLogger(ListsKu.class);
1312

14-
public ListActions() {
13+
public ListsKu() {
1514
}
1615

1716
/**

0 commit comments

Comments
 (0)