Skip to content
Merged
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
Expand Up @@ -30,6 +30,7 @@ public static void main(String[] args) {
// Static registries
generator.generate(resource("blocks.json"), "net.minestom.server.instance.block", "Block", "BlockImpl", "Blocks");
generator.generate(resource("items.json"), "net.minestom.server.item", "Material", "MaterialImpl", "Materials");
generator.generate(resource("game_events.json"), "net.minestom.server.game", "GameEvent", "GameEventImpl", "GameEvents");
generator.generate(resource("entities.json"), "net.minestom.server.entity", "EntityType", "EntityTypeImpl", "EntityTypes");
generator.generate(resource("potion_effects.json"), "net.minestom.server.potion", "PotionEffect", "PotionEffectImpl", "PotionEffects");
generator.generate(resource("potions.json"), "net.minestom.server.potion", "PotionType", "PotionTypeImpl", "PotionTypes");
Expand Down
127 changes: 127 additions & 0 deletions src/autogenerated/java/net/minestom/server/game/GameEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package net.minestom.server.game;

/**
* Code autogenerated, do not edit!
*/
@SuppressWarnings("unused")
interface GameEvents {
GameEvent BLOCK_ACTIVATE = GameEventImpl.get("minecraft:block_activate");

GameEvent BLOCK_ATTACH = GameEventImpl.get("minecraft:block_attach");

GameEvent BLOCK_CHANGE = GameEventImpl.get("minecraft:block_change");

GameEvent BLOCK_CLOSE = GameEventImpl.get("minecraft:block_close");

GameEvent BLOCK_DEACTIVATE = GameEventImpl.get("minecraft:block_deactivate");

GameEvent BLOCK_DESTROY = GameEventImpl.get("minecraft:block_destroy");

GameEvent BLOCK_DETACH = GameEventImpl.get("minecraft:block_detach");

GameEvent BLOCK_OPEN = GameEventImpl.get("minecraft:block_open");

GameEvent BLOCK_PLACE = GameEventImpl.get("minecraft:block_place");

GameEvent CONTAINER_CLOSE = GameEventImpl.get("minecraft:container_close");

GameEvent CONTAINER_OPEN = GameEventImpl.get("minecraft:container_open");

GameEvent DRINK = GameEventImpl.get("minecraft:drink");

GameEvent EAT = GameEventImpl.get("minecraft:eat");

GameEvent ELYTRA_GLIDE = GameEventImpl.get("minecraft:elytra_glide");

GameEvent ENTITY_DAMAGE = GameEventImpl.get("minecraft:entity_damage");

GameEvent ENTITY_DIE = GameEventImpl.get("minecraft:entity_die");

GameEvent ENTITY_DISMOUNT = GameEventImpl.get("minecraft:entity_dismount");

GameEvent ENTITY_INTERACT = GameEventImpl.get("minecraft:entity_interact");

GameEvent ENTITY_MOUNT = GameEventImpl.get("minecraft:entity_mount");

GameEvent ENTITY_PLACE = GameEventImpl.get("minecraft:entity_place");

GameEvent ENTITY_ACTION = GameEventImpl.get("minecraft:entity_action");

GameEvent EQUIP = GameEventImpl.get("minecraft:equip");

GameEvent EXPLODE = GameEventImpl.get("minecraft:explode");

GameEvent FLAP = GameEventImpl.get("minecraft:flap");

GameEvent FLUID_PICKUP = GameEventImpl.get("minecraft:fluid_pickup");

GameEvent FLUID_PLACE = GameEventImpl.get("minecraft:fluid_place");

GameEvent HIT_GROUND = GameEventImpl.get("minecraft:hit_ground");

GameEvent INSTRUMENT_PLAY = GameEventImpl.get("minecraft:instrument_play");

GameEvent ITEM_INTERACT_FINISH = GameEventImpl.get("minecraft:item_interact_finish");

GameEvent ITEM_INTERACT_START = GameEventImpl.get("minecraft:item_interact_start");

GameEvent JUKEBOX_PLAY = GameEventImpl.get("minecraft:jukebox_play");

GameEvent JUKEBOX_STOP_PLAY = GameEventImpl.get("minecraft:jukebox_stop_play");

GameEvent LIGHTNING_STRIKE = GameEventImpl.get("minecraft:lightning_strike");

GameEvent NOTE_BLOCK_PLAY = GameEventImpl.get("minecraft:note_block_play");

GameEvent PRIME_FUSE = GameEventImpl.get("minecraft:prime_fuse");

GameEvent PROJECTILE_LAND = GameEventImpl.get("minecraft:projectile_land");

GameEvent PROJECTILE_SHOOT = GameEventImpl.get("minecraft:projectile_shoot");

GameEvent SCULK_SENSOR_TENDRILS_CLICKING = GameEventImpl.get("minecraft:sculk_sensor_tendrils_clicking");

GameEvent SHEAR = GameEventImpl.get("minecraft:shear");

GameEvent SHRIEK = GameEventImpl.get("minecraft:shriek");

GameEvent SPLASH = GameEventImpl.get("minecraft:splash");

GameEvent STEP = GameEventImpl.get("minecraft:step");

GameEvent SWIM = GameEventImpl.get("minecraft:swim");

GameEvent TELEPORT = GameEventImpl.get("minecraft:teleport");

GameEvent UNEQUIP = GameEventImpl.get("minecraft:unequip");

GameEvent RESONATE_1 = GameEventImpl.get("minecraft:resonate_1");

GameEvent RESONATE_2 = GameEventImpl.get("minecraft:resonate_2");

GameEvent RESONATE_3 = GameEventImpl.get("minecraft:resonate_3");

GameEvent RESONATE_4 = GameEventImpl.get("minecraft:resonate_4");

GameEvent RESONATE_5 = GameEventImpl.get("minecraft:resonate_5");

GameEvent RESONATE_6 = GameEventImpl.get("minecraft:resonate_6");

GameEvent RESONATE_7 = GameEventImpl.get("minecraft:resonate_7");

GameEvent RESONATE_8 = GameEventImpl.get("minecraft:resonate_8");

GameEvent RESONATE_9 = GameEventImpl.get("minecraft:resonate_9");

GameEvent RESONATE_10 = GameEventImpl.get("minecraft:resonate_10");

GameEvent RESONATE_11 = GameEventImpl.get("minecraft:resonate_11");

GameEvent RESONATE_12 = GameEventImpl.get("minecraft:resonate_12");

GameEvent RESONATE_13 = GameEventImpl.get("minecraft:resonate_13");

GameEvent RESONATE_14 = GameEventImpl.get("minecraft:resonate_14");

GameEvent RESONATE_15 = GameEventImpl.get("minecraft:resonate_15");
}
69 changes: 69 additions & 0 deletions src/main/java/net/minestom/server/game/GameEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package net.minestom.server.game;

import net.minestom.server.registry.Registry;
import net.minestom.server.registry.StaticProtocolObject;
import net.minestom.server.utils.NamespaceID;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;

/**
* Represents a game event.
* Used for a wide variety of events, from weather to bed use to game mode to demo messages.
*
* @version 1.0.0
* @since 1.6.0
* @author themeinerlp
*/
public sealed interface GameEvent extends StaticProtocolObject permits GameEventImpl {

/**
* Returns the game event registry.
*
* @return the game event registry or null if not found
*/
@Contract(pure = true)
@Nullable
Registry.GameEventEntry registry();

/**
* Gets the namespace ID of this game event.
*
* @return the namespace ID
*/
@Override
@NotNull
NamespaceID namespace();

/**
* Gets the game events from the registry.
*
* @return the game events
*/
static @NotNull Collection<@NotNull GameEvent> values() {
return GameEventImpl.values();
}

/**
* Gets a game event by its namespace ID.
*
* @param namespaceID the namespace ID
* @return the game event or null if not found
*/
static @Nullable GameEvent fromNamespaceId(@NotNull String namespaceID) {
return GameEventImpl.getSafe(namespaceID);
}

/**
* Gets a game event by its namespace ID.
*
* @param namespaceID the namespace ID
* @return the game event or null if not found
*/
static @Nullable GameEvent fromNamespaceId(@NotNull NamespaceID namespaceID) {
return fromNamespaceId(namespaceID.asString());
}

}
70 changes: 70 additions & 0 deletions src/main/java/net/minestom/server/game/GameEventImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package net.minestom.server.game;

import net.minestom.server.registry.Registry;
import net.minestom.server.utils.NamespaceID;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;

/**
* Represents a game event implementation.
* Used for a wide variety of events, from weather to bed use to game mode to demo messages.
*
* @version 1.0.0
* @since 1.6.0
* @author themeinerlp
*/
record GameEventImpl(Registry.GameEventEntry registry, NamespaceID namespace, int id) implements GameEvent {
private static final AtomicInteger INDEX = new AtomicInteger();
private static final Registry.Container<GameEvent> CONTAINER = Registry.createStaticContainer(Registry.Resource.GAMEPLAY_TAGS, GameEventImpl::createImpl);

/**
* Creates a new {@link GameEventImpl} with the given namespace and properties.
*
* @param namespace the namespace
* @param properties the properties
* @return a new {@link GameEventImpl}
*/
private static GameEventImpl createImpl(String namespace, Registry.Properties properties) {
return new GameEventImpl(Registry.gameEventEntry(namespace, properties));
}

/**
* Creates a new {@link GameEventImpl} with the given registry.
*
* @param registry the registry
*/
private GameEventImpl(Registry.GameEventEntry registry) {
this(registry, registry.namespace(), INDEX.getAndIncrement());
}

/**
* Gets the game events from the registry.
*
* @return the game events
*/
static Collection<GameEvent> values() {
return CONTAINER.values();
}

/**
* Gets a game event by its namespace ID.
*
* @param namespace the namespace ID
* @return the game event or null if not found
*/
public static GameEvent get(@NotNull String namespace) {
return CONTAINER.get(namespace);
}

/**
* Gets a game event by its namespace ID.
*
* @param namespace the namespace ID
* @return the game event or null if not found
*/
static GameEvent getSafe(@NotNull String namespace) {
return CONTAINER.getSafe(namespace);
}
}
5 changes: 3 additions & 2 deletions src/main/java/net/minestom/server/gamedata/tags/Tag.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.EntityType;
import net.minestom.server.fluid.Fluid;
import net.minestom.server.game.GameEvent;
import net.minestom.server.instance.block.Block;
import net.minestom.server.item.Material;
import net.minestom.server.registry.DynamicRegistry;
Expand Down Expand Up @@ -96,8 +97,8 @@ public enum BasicType {
name -> Objects.requireNonNull(Fluid.fromNamespaceId(name)).id()),
ENTITY_TYPES("minecraft:entity_type", Registry.Resource.ENTITY_TYPE_TAGS,
name -> Objects.requireNonNull(EntityType.fromNamespaceId(name)).id()),
/*GAME_EVENTS("minecraft:game_event", Registry.Resource.GAMEPLAY_TAGS,
name -> Objects.requireNonNull(Fluid.fromNamespaceId(name)).id());*/
GAME_EVENTS("minecraft:game_event", Registry.Resource.GAMEPLAY_TAGS,
name -> Objects.requireNonNull(GameEvent.fromNamespaceId(name)).id()),
SOUND_EVENTS("minecraft:sound_event", null, null), // Seems not to be included in server data
POTION_EFFECTS("minecraft:sound_event", null, null), // Seems not to be included in server data

Expand Down
10 changes: 10 additions & 0 deletions src/main/java/net/minestom/server/registry/Registry.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,10 @@ public static VillagerType villagerType(String namespace, @NotNull Properties ma
return new VillagerType(namespace, main, null);
}

public static GameEventEntry gameEventEntry(String namespace, Properties properties) {
return new GameEventEntry(namespace, properties, null);
}

@ApiStatus.Internal
public static Map<String, Map<String, Object>> load(Resource resource) {
Map<String, Map<String, Object>> map = new HashMap<>();
Expand Down Expand Up @@ -558,6 +562,12 @@ public boolean hasPrecipitation() {
}
}

public static final record GameEventEntry(NamespaceID namespace, Properties main, Properties custom) implements Entry {
public GameEventEntry(String namespace, Properties main, Properties custom) {
this(NamespaceID.from(namespace), main, custom);
}
}

public static final class MaterialEntry implements Entry {
private final NamespaceID namespace;
private final Properties main;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,50 @@
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;

/**
* Represents a static protocol object.
* Used for objects which are not dynamic and are known at compile time.
*
* @version 1.0.0
* @since 1.0.0
* @author themeinerlp
*/
public interface StaticProtocolObject extends ProtocolObject, Keyed {

/**
* Gets the namespace ID of this object.
*
* @return the namespace ID
*/
@Contract(pure = true)
@NotNull NamespaceID namespace();

/**
* Gets the name of this object.
*
* @return the name
*/
@Contract(pure = true)
default @NotNull String name() {
return namespace().asString();
}

/**
* Gets the key of this object.
*
* @return the key
*/
@Override
@Contract(pure = true)
default @NotNull Key key() {
return namespace();
}

/**
* Gets the ID of this object.
*
* @return the ID
*/
@Contract(pure = true)
int id();
}