Skip to content

Pullback 1.5.1 release #107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Jan 6, 2025
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
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ tasks {
addStringOption("-release", "21")
// Links to external javadocs
links("https://docs.oracle.com/en/java/javase/21/docs/api/")
links("https://jd.adventure.kyori.net/api/${libs.versions.adventure.get()}/")
links("https://jd.advntr.dev/api/${libs.versions.adventure.get()}/")
}
}
withType<Zip> {
Expand Down
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.GAME_EVENTS, 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(), registry.main().getInt("id"));
}

/**
* 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);
}
}
28 changes: 15 additions & 13 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 All @@ -17,7 +18,7 @@

import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;

Expand Down Expand Up @@ -89,30 +90,31 @@ public NamespaceID getName() {

public enum BasicType {
BLOCKS("minecraft:block", Registry.Resource.BLOCK_TAGS,
name -> Objects.requireNonNull(Block.fromNamespaceId(name)).id()),
blockName -> Optional.ofNullable(Block.fromNamespaceId(blockName)).map(Block::id)),
ITEMS("minecraft:item", Registry.Resource.ITEM_TAGS,
name -> Objects.requireNonNull(Material.fromNamespaceId(name)).id()),
itemName -> Optional.ofNullable(Material.fromNamespaceId(itemName)).map(Material::id)),
FLUIDS("minecraft:fluid", Registry.Resource.FLUID_TAGS,
name -> Objects.requireNonNull(Fluid.fromNamespaceId(name)).id()),
fluidName -> Optional.ofNullable(Fluid.fromNamespaceId(fluidName)).map(Fluid::id)),
BIOMES("minecraft:worldgen/biome", Registry.Resource.BIOME_TAGS,
biomeName -> Optional.of(DynamicRegistry.Key.of(biomeName)).map(DynamicRegistry.Key::namespace).map(MinecraftServer.getBiomeRegistry()::getId)),
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());*/
entityName -> Optional.ofNullable(EntityType.fromNamespaceId(entityName)).map(EntityType::id)),
GAME_EVENTS("minecraft:game_event", Registry.Resource.GAMEPLAY_TAGS,
eventName -> Optional.ofNullable(GameEvent.fromNamespaceId(eventName)).map(GameEvent::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

//todo this is cursed. it does not update as the registry changes. Fix later.
ENCHANTMENTS("minecraft:enchantment", Registry.Resource.ENCHANTMENT_TAGS,
name -> MinecraftServer.getEnchantmentRegistry().getId(DynamicRegistry.Key.of(name)));
enchName -> Optional.of(DynamicRegistry.Key.of(enchName)).map(DynamicRegistry.Key::namespace).map(MinecraftServer.getEnchantmentRegistry()::getId)),;

private final static BasicType[] VALUES = values();
private static final BasicType[] VALUES = values();
private final String identifier;
private final Registry.Resource resource;
private final Function<String, Integer> function;
private final Function<String, Optional<Integer>> function;

BasicType(@NotNull String identifier,
@Nullable Registry.Resource resource,
@Nullable Function<String, Integer> function) {
@Nullable Function<String, Optional<Integer>> function) {
this.identifier = identifier;
this.resource = resource;
this.function = function;
Expand All @@ -126,7 +128,7 @@ public Registry.Resource getResource() {
return resource;
}

public Function<String, Integer> getFunction() {
public Function<String, Optional<Integer>> getFunction() {
return function;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,11 @@ public void write(@NotNull NetworkBuffer writer) {
final var values = tag.getValues();
writer.write(VAR_INT, values.size());
for (var name : values) {
writer.write(VAR_INT, type.getFunction().apply(name.asString()));
var applied = type.getFunction().apply(name.asString());
if (applied.isEmpty()) {
continue;
}
writer.write(VAR_INT, applied.get());
}
}
}
Expand Down
Loading
Loading