hollow-cube/1.20

* initial 1.20 support

* test fixes

* anvil 1.20, 1.20.1

(cherry picked from commit 716f32972a)
This commit is contained in:
Matt Worzala 2023-06-14 22:11:18 -04:00 committed by mworzala
parent 5aa466b937
commit c20a28ccfc
No known key found for this signature in database
GPG Key ID: B148F922E64797C7
18 changed files with 180 additions and 65 deletions

View File

@ -3,11 +3,11 @@ metadata.format.version = "1.1"
[versions] [versions]
# Important dependencies # Important dependencies
data = "1.19.4-rv2" data = "1.20-rv2"
adventure = "4.12.0" adventure = "4.12.0"
kotlin = "1.7.22" kotlin = "1.7.22"
hydrazine = "1.7.2" hydrazine = "1.7.2"
hephaistos = "2.5.3" hephaistos = "2.6.0"
jetbrainsAnnotations = "23.0.0" jetbrainsAnnotations = "23.0.0"
slf4j = "2.0.7" slf4j = "2.0.7"

View File

@ -81,6 +81,8 @@ interface Blocks {
Block GRAVEL = BlockImpl.get("minecraft:gravel"); Block GRAVEL = BlockImpl.get("minecraft:gravel");
Block SUSPICIOUS_GRAVEL = BlockImpl.get("minecraft:suspicious_gravel");
Block GOLD_ORE = BlockImpl.get("minecraft:gold_ore"); Block GOLD_ORE = BlockImpl.get("minecraft:gold_ore");
Block DEEPSLATE_GOLD_ORE = BlockImpl.get("minecraft:deepslate_gold_ore"); Block DEEPSLATE_GOLD_ORE = BlockImpl.get("minecraft:deepslate_gold_ore");
@ -1201,6 +1203,10 @@ interface Blocks {
Block TORCHFLOWER_CROP = BlockImpl.get("minecraft:torchflower_crop"); Block TORCHFLOWER_CROP = BlockImpl.get("minecraft:torchflower_crop");
Block PITCHER_CROP = BlockImpl.get("minecraft:pitcher_crop");
Block PITCHER_PLANT = BlockImpl.get("minecraft:pitcher_plant");
Block BEETROOTS = BlockImpl.get("minecraft:beetroots"); Block BEETROOTS = BlockImpl.get("minecraft:beetroots");
Block DIRT_PATH = BlockImpl.get("minecraft:dirt_path"); Block DIRT_PATH = BlockImpl.get("minecraft:dirt_path");
@ -1363,6 +1369,8 @@ interface Blocks {
Block TURTLE_EGG = BlockImpl.get("minecraft:turtle_egg"); Block TURTLE_EGG = BlockImpl.get("minecraft:turtle_egg");
Block SNIFFER_EGG = BlockImpl.get("minecraft:sniffer_egg");
Block DEAD_TUBE_CORAL_BLOCK = BlockImpl.get("minecraft:dead_tube_coral_block"); Block DEAD_TUBE_CORAL_BLOCK = BlockImpl.get("minecraft:dead_tube_coral_block");
Block DEAD_BRAIN_CORAL_BLOCK = BlockImpl.get("minecraft:dead_brain_coral_block"); Block DEAD_BRAIN_CORAL_BLOCK = BlockImpl.get("minecraft:dead_brain_coral_block");
@ -1825,6 +1833,8 @@ interface Blocks {
Block SCULK_SENSOR = BlockImpl.get("minecraft:sculk_sensor"); Block SCULK_SENSOR = BlockImpl.get("minecraft:sculk_sensor");
Block CALIBRATED_SCULK_SENSOR = BlockImpl.get("minecraft:calibrated_sculk_sensor");
Block SCULK = BlockImpl.get("minecraft:sculk"); Block SCULK = BlockImpl.get("minecraft:sculk");
Block SCULK_VEIN = BlockImpl.get("minecraft:sculk_vein"); Block SCULK_VEIN = BlockImpl.get("minecraft:sculk_vein");

View File

@ -97,6 +97,8 @@ interface Materials {
Material SUSPICIOUS_SAND = MaterialImpl.get("minecraft:suspicious_sand"); Material SUSPICIOUS_SAND = MaterialImpl.get("minecraft:suspicious_sand");
Material SUSPICIOUS_GRAVEL = MaterialImpl.get("minecraft:suspicious_gravel");
Material RED_SAND = MaterialImpl.get("minecraft:red_sand"); Material RED_SAND = MaterialImpl.get("minecraft:red_sand");
Material GRAVEL = MaterialImpl.get("minecraft:gravel"); Material GRAVEL = MaterialImpl.get("minecraft:gravel");
@ -423,6 +425,8 @@ interface Materials {
Material TORCHFLOWER = MaterialImpl.get("minecraft:torchflower"); Material TORCHFLOWER = MaterialImpl.get("minecraft:torchflower");
Material PITCHER_PLANT = MaterialImpl.get("minecraft:pitcher_plant");
Material SPORE_BLOSSOM = MaterialImpl.get("minecraft:spore_blossom"); Material SPORE_BLOSSOM = MaterialImpl.get("minecraft:spore_blossom");
Material BROWN_MUSHROOM = MaterialImpl.get("minecraft:brown_mushroom"); Material BROWN_MUSHROOM = MaterialImpl.get("minecraft:brown_mushroom");
@ -1133,6 +1137,8 @@ interface Materials {
Material TURTLE_EGG = MaterialImpl.get("minecraft:turtle_egg"); Material TURTLE_EGG = MaterialImpl.get("minecraft:turtle_egg");
Material SNIFFER_EGG = MaterialImpl.get("minecraft:sniffer_egg");
Material DEAD_TUBE_CORAL_BLOCK = MaterialImpl.get("minecraft:dead_tube_coral_block"); Material DEAD_TUBE_CORAL_BLOCK = MaterialImpl.get("minecraft:dead_tube_coral_block");
Material DEAD_BRAIN_CORAL_BLOCK = MaterialImpl.get("minecraft:dead_brain_coral_block"); Material DEAD_BRAIN_CORAL_BLOCK = MaterialImpl.get("minecraft:dead_brain_coral_block");
@ -1307,6 +1313,8 @@ interface Materials {
Material SCULK_SENSOR = MaterialImpl.get("minecraft:sculk_sensor"); Material SCULK_SENSOR = MaterialImpl.get("minecraft:sculk_sensor");
Material CALIBRATED_SCULK_SENSOR = MaterialImpl.get("minecraft:calibrated_sculk_sensor");
Material TRIPWIRE_HOOK = MaterialImpl.get("minecraft:tripwire_hook"); Material TRIPWIRE_HOOK = MaterialImpl.get("minecraft:tripwire_hook");
Material TRAPPED_CHEST = MaterialImpl.get("minecraft:trapped_chest"); Material TRAPPED_CHEST = MaterialImpl.get("minecraft:trapped_chest");
@ -2211,6 +2219,8 @@ interface Materials {
Material TORCHFLOWER_SEEDS = MaterialImpl.get("minecraft:torchflower_seeds"); Material TORCHFLOWER_SEEDS = MaterialImpl.get("minecraft:torchflower_seeds");
Material PITCHER_POD = MaterialImpl.get("minecraft:pitcher_pod");
Material BEETROOT = MaterialImpl.get("minecraft:beetroot"); Material BEETROOT = MaterialImpl.get("minecraft:beetroot");
Material BEETROOT_SEEDS = MaterialImpl.get("minecraft:beetroot_seeds"); Material BEETROOT_SEEDS = MaterialImpl.get("minecraft:beetroot_seeds");
@ -2265,6 +2275,8 @@ interface Materials {
Material MUSIC_DISC_OTHERSIDE = MaterialImpl.get("minecraft:music_disc_otherside"); Material MUSIC_DISC_OTHERSIDE = MaterialImpl.get("minecraft:music_disc_otherside");
Material MUSIC_DISC_RELIC = MaterialImpl.get("minecraft:music_disc_relic");
Material MUSIC_DISC_5 = MaterialImpl.get("minecraft:music_disc_5"); Material MUSIC_DISC_5 = MaterialImpl.get("minecraft:music_disc_5");
Material MUSIC_DISC_PIGSTEP = MaterialImpl.get("minecraft:music_disc_pigstep"); Material MUSIC_DISC_PIGSTEP = MaterialImpl.get("minecraft:music_disc_pigstep");
@ -2453,11 +2465,53 @@ interface Materials {
Material SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:spire_armor_trim_smithing_template"); Material SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:spire_armor_trim_smithing_template");
Material POTTERY_SHARD_ARCHER = MaterialImpl.get("minecraft:pottery_shard_archer"); Material WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:wayfinder_armor_trim_smithing_template");
Material POTTERY_SHARD_PRIZE = MaterialImpl.get("minecraft:pottery_shard_prize"); Material SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:shaper_armor_trim_smithing_template");
Material POTTERY_SHARD_ARMS_UP = MaterialImpl.get("minecraft:pottery_shard_arms_up"); Material SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:silence_armor_trim_smithing_template");
Material POTTERY_SHARD_SKULL = MaterialImpl.get("minecraft:pottery_shard_skull"); Material RAISER_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:raiser_armor_trim_smithing_template");
Material HOST_ARMOR_TRIM_SMITHING_TEMPLATE = MaterialImpl.get("minecraft:host_armor_trim_smithing_template");
Material ANGLER_POTTERY_SHERD = MaterialImpl.get("minecraft:angler_pottery_sherd");
Material ARCHER_POTTERY_SHERD = MaterialImpl.get("minecraft:archer_pottery_sherd");
Material ARMS_UP_POTTERY_SHERD = MaterialImpl.get("minecraft:arms_up_pottery_sherd");
Material BLADE_POTTERY_SHERD = MaterialImpl.get("minecraft:blade_pottery_sherd");
Material BREWER_POTTERY_SHERD = MaterialImpl.get("minecraft:brewer_pottery_sherd");
Material BURN_POTTERY_SHERD = MaterialImpl.get("minecraft:burn_pottery_sherd");
Material DANGER_POTTERY_SHERD = MaterialImpl.get("minecraft:danger_pottery_sherd");
Material EXPLORER_POTTERY_SHERD = MaterialImpl.get("minecraft:explorer_pottery_sherd");
Material FRIEND_POTTERY_SHERD = MaterialImpl.get("minecraft:friend_pottery_sherd");
Material HEART_POTTERY_SHERD = MaterialImpl.get("minecraft:heart_pottery_sherd");
Material HEARTBREAK_POTTERY_SHERD = MaterialImpl.get("minecraft:heartbreak_pottery_sherd");
Material HOWL_POTTERY_SHERD = MaterialImpl.get("minecraft:howl_pottery_sherd");
Material MINER_POTTERY_SHERD = MaterialImpl.get("minecraft:miner_pottery_sherd");
Material MOURNER_POTTERY_SHERD = MaterialImpl.get("minecraft:mourner_pottery_sherd");
Material PLENTY_POTTERY_SHERD = MaterialImpl.get("minecraft:plenty_pottery_sherd");
Material PRIZE_POTTERY_SHERD = MaterialImpl.get("minecraft:prize_pottery_sherd");
Material SHEAF_POTTERY_SHERD = MaterialImpl.get("minecraft:sheaf_pottery_sherd");
Material SHELTER_POTTERY_SHERD = MaterialImpl.get("minecraft:shelter_pottery_sherd");
Material SKULL_POTTERY_SHERD = MaterialImpl.get("minecraft:skull_pottery_sherd");
Material SNORT_POTTERY_SHERD = MaterialImpl.get("minecraft:snort_pottery_sherd");
} }

View File

@ -63,11 +63,7 @@ interface Particles {
Particle FLAME = ParticleImpl.get("minecraft:flame"); Particle FLAME = ParticleImpl.get("minecraft:flame");
Particle DRIPPING_CHERRY_LEAVES = ParticleImpl.get("minecraft:dripping_cherry_leaves"); Particle CHERRY_LEAVES = ParticleImpl.get("minecraft:cherry_leaves");
Particle FALLING_CHERRY_LEAVES = ParticleImpl.get("minecraft:falling_cherry_leaves");
Particle LANDING_CHERRY_LEAVES = ParticleImpl.get("minecraft:landing_cherry_leaves");
Particle SCULK_SOUL = ParticleImpl.get("minecraft:sculk_soul"); Particle SCULK_SOUL = ParticleImpl.get("minecraft:sculk_soul");
@ -196,4 +192,6 @@ interface Particles {
Particle SCRAPE = ParticleImpl.get("minecraft:scrape"); Particle SCRAPE = ParticleImpl.get("minecraft:scrape");
Particle SHRIEK = ParticleImpl.get("minecraft:shriek"); Particle SHRIEK = ParticleImpl.get("minecraft:shriek");
Particle EGG_CRACK = ParticleImpl.get("minecraft:egg_crack");
} }

View File

@ -73,6 +73,8 @@ interface SoundEvents {
SoundEvent BLOCK_AMETHYST_BLOCK_PLACE = SoundEventImpl.get("minecraft:block.amethyst_block.place"); SoundEvent BLOCK_AMETHYST_BLOCK_PLACE = SoundEventImpl.get("minecraft:block.amethyst_block.place");
SoundEvent BLOCK_AMETHYST_BLOCK_RESONATE = SoundEventImpl.get("minecraft:block.amethyst_block.resonate");
SoundEvent BLOCK_AMETHYST_BLOCK_STEP = SoundEventImpl.get("minecraft:block.amethyst_block.step"); SoundEvent BLOCK_AMETHYST_BLOCK_STEP = SoundEventImpl.get("minecraft:block.amethyst_block.step");
SoundEvent BLOCK_AMETHYST_CLUSTER_BREAK = SoundEventImpl.get("minecraft:block.amethyst_cluster.break"); SoundEvent BLOCK_AMETHYST_CLUSTER_BREAK = SoundEventImpl.get("minecraft:block.amethyst_cluster.break");
@ -337,9 +339,15 @@ interface SoundEvents {
SoundEvent BLOCK_BREWING_STAND_BREW = SoundEventImpl.get("minecraft:block.brewing_stand.brew"); SoundEvent BLOCK_BREWING_STAND_BREW = SoundEventImpl.get("minecraft:block.brewing_stand.brew");
SoundEvent ITEM_BRUSH_BRUSHING = SoundEventImpl.get("minecraft:item.brush.brushing"); SoundEvent ITEM_BRUSH_BRUSHING_GENERIC = SoundEventImpl.get("minecraft:item.brush.brushing.generic");
SoundEvent ITEM_BRUSH_BRUSH_SAND_COMPLETED = SoundEventImpl.get("minecraft:item.brush.brush_sand_completed"); SoundEvent ITEM_BRUSH_BRUSHING_SAND = SoundEventImpl.get("minecraft:item.brush.brushing.sand");
SoundEvent ITEM_BRUSH_BRUSHING_GRAVEL = SoundEventImpl.get("minecraft:item.brush.brushing.gravel");
SoundEvent ITEM_BRUSH_BRUSHING_SAND_COMPLETE = SoundEventImpl.get("minecraft:item.brush.brushing.sand.complete");
SoundEvent ITEM_BRUSH_BRUSHING_GRAVEL_COMPLETE = SoundEventImpl.get("minecraft:item.brush.brushing.gravel.complete");
SoundEvent BLOCK_BUBBLE_COLUMN_BUBBLE_POP = SoundEventImpl.get("minecraft:block.bubble_column.bubble_pop"); SoundEvent BLOCK_BUBBLE_COLUMN_BUBBLE_POP = SoundEventImpl.get("minecraft:block.bubble_column.bubble_pop");
@ -961,6 +969,16 @@ interface SoundEvents {
SoundEvent BLOCK_SUSPICIOUS_SAND_FALL = SoundEventImpl.get("minecraft:block.suspicious_sand.fall"); SoundEvent BLOCK_SUSPICIOUS_SAND_FALL = SoundEventImpl.get("minecraft:block.suspicious_sand.fall");
SoundEvent BLOCK_SUSPICIOUS_GRAVEL_BREAK = SoundEventImpl.get("minecraft:block.suspicious_gravel.break");
SoundEvent BLOCK_SUSPICIOUS_GRAVEL_STEP = SoundEventImpl.get("minecraft:block.suspicious_gravel.step");
SoundEvent BLOCK_SUSPICIOUS_GRAVEL_PLACE = SoundEventImpl.get("minecraft:block.suspicious_gravel.place");
SoundEvent BLOCK_SUSPICIOUS_GRAVEL_HIT = SoundEventImpl.get("minecraft:block.suspicious_gravel.hit");
SoundEvent BLOCK_SUSPICIOUS_GRAVEL_FALL = SoundEventImpl.get("minecraft:block.suspicious_gravel.fall");
SoundEvent BLOCK_FROGLIGHT_BREAK = SoundEventImpl.get("minecraft:block.froglight.break"); SoundEvent BLOCK_FROGLIGHT_BREAK = SoundEventImpl.get("minecraft:block.froglight.break");
SoundEvent BLOCK_FROGLIGHT_FALL = SoundEventImpl.get("minecraft:block.froglight.fall"); SoundEvent BLOCK_FROGLIGHT_FALL = SoundEventImpl.get("minecraft:block.froglight.fall");
@ -1589,6 +1607,8 @@ interface SoundEvents {
SoundEvent MUSIC_DISC_OTHERSIDE = SoundEventImpl.get("minecraft:music_disc.otherside"); SoundEvent MUSIC_DISC_OTHERSIDE = SoundEventImpl.get("minecraft:music_disc.otherside");
SoundEvent MUSIC_DISC_RELIC = SoundEventImpl.get("minecraft:music_disc.relic");
SoundEvent MUSIC_DRAGON = SoundEventImpl.get("minecraft:music.dragon"); SoundEvent MUSIC_DRAGON = SoundEventImpl.get("minecraft:music.dragon");
SoundEvent MUSIC_END = SoundEventImpl.get("minecraft:music.end"); SoundEvent MUSIC_END = SoundEventImpl.get("minecraft:music.end");
@ -1613,7 +1633,7 @@ interface SoundEvents {
SoundEvent MUSIC_OVERWORLD_SWAMP = SoundEventImpl.get("minecraft:music.overworld.swamp"); SoundEvent MUSIC_OVERWORLD_SWAMP = SoundEventImpl.get("minecraft:music.overworld.swamp");
SoundEvent MUSIC_OVERWORLD_JUNGLE_AND_FOREST = SoundEventImpl.get("minecraft:music.overworld.jungle_and_forest"); SoundEvent MUSIC_OVERWORLD_FOREST = SoundEventImpl.get("minecraft:music.overworld.forest");
SoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = SoundEventImpl.get("minecraft:music.overworld.old_growth_taiga"); SoundEvent MUSIC_OVERWORLD_OLD_GROWTH_TAIGA = SoundEventImpl.get("minecraft:music.overworld.old_growth_taiga");
@ -1633,6 +1653,18 @@ interface SoundEvents {
SoundEvent MUSIC_NETHER_WARPED_FOREST = SoundEventImpl.get("minecraft:music.nether.warped_forest"); SoundEvent MUSIC_NETHER_WARPED_FOREST = SoundEventImpl.get("minecraft:music.nether.warped_forest");
SoundEvent MUSIC_OVERWORLD_FLOWER_FOREST = SoundEventImpl.get("minecraft:music.overworld.flower_forest");
SoundEvent MUSIC_OVERWORLD_DESERT = SoundEventImpl.get("minecraft:music.overworld.desert");
SoundEvent MUSIC_OVERWORLD_BADLANDS = SoundEventImpl.get("minecraft:music.overworld.badlands");
SoundEvent MUSIC_OVERWORLD_JUNGLE = SoundEventImpl.get("minecraft:music.overworld.jungle");
SoundEvent MUSIC_OVERWORLD_SPARSE_JUNGLE = SoundEventImpl.get("minecraft:music.overworld.sparse_jungle");
SoundEvent MUSIC_OVERWORLD_BAMBOO_JUNGLE = SoundEventImpl.get("minecraft:music.overworld.bamboo_jungle");
SoundEvent MUSIC_UNDER_WATER = SoundEventImpl.get("minecraft:music.under_water"); SoundEvent MUSIC_UNDER_WATER = SoundEventImpl.get("minecraft:music.under_water");
SoundEvent BLOCK_NETHER_BRICKS_BREAK = SoundEventImpl.get("minecraft:block.nether_bricks.break"); SoundEvent BLOCK_NETHER_BRICKS_BREAK = SoundEventImpl.get("minecraft:block.nether_bricks.break");
@ -2449,6 +2481,12 @@ interface SoundEvents {
SoundEvent ENTITY_SNIFFER_HAPPY = SoundEventImpl.get("minecraft:entity.sniffer.happy"); SoundEvent ENTITY_SNIFFER_HAPPY = SoundEventImpl.get("minecraft:entity.sniffer.happy");
SoundEvent BLOCK_SNIFFER_EGG_PLOP = SoundEventImpl.get("minecraft:block.sniffer_egg.plop");
SoundEvent BLOCK_SNIFFER_EGG_CRACK = SoundEventImpl.get("minecraft:block.sniffer_egg.crack");
SoundEvent BLOCK_SNIFFER_EGG_HATCH = SoundEventImpl.get("minecraft:block.sniffer_egg.hatch");
SoundEvent ENTITY_SNOWBALL_THROW = SoundEventImpl.get("minecraft:entity.snowball.throw"); SoundEvent ENTITY_SNOWBALL_THROW = SoundEventImpl.get("minecraft:entity.snowball.throw");
SoundEvent BLOCK_SNOW_BREAK = SoundEventImpl.get("minecraft:block.snow.break"); SoundEvent BLOCK_SNOW_BREAK = SoundEventImpl.get("minecraft:block.snow.break");
@ -2753,6 +2791,8 @@ interface SoundEvents {
SoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = SoundEventImpl.get("minecraft:entity.warden.tendril_clicks"); SoundEvent ENTITY_WARDEN_TENDRIL_CLICKS = SoundEventImpl.get("minecraft:entity.warden.tendril_clicks");
SoundEvent BLOCK_SIGN_WAXED_INTERACT_FAIL = SoundEventImpl.get("minecraft:block.sign.waxed_interact_fail");
SoundEvent BLOCK_WATER_AMBIENT = SoundEventImpl.get("minecraft:block.water.ambient"); SoundEvent BLOCK_WATER_AMBIENT = SoundEventImpl.get("minecraft:block.water.ambient");
SoundEvent WEATHER_RAIN = SoundEventImpl.get("minecraft:weather.rain"); SoundEvent WEATHER_RAIN = SoundEventImpl.get("minecraft:weather.rain");

View File

@ -45,8 +45,8 @@ public final class MinecraftServer {
public static final ComponentLogger LOGGER = ComponentLogger.logger(MinecraftServer.class); public static final ComponentLogger LOGGER = ComponentLogger.logger(MinecraftServer.class);
public static final String VERSION_NAME = "1.19.4"; public static final String VERSION_NAME = "1.20.1";
public static final int PROTOCOL_VERSION = 762; public static final int PROTOCOL_VERSION = 763;
// Threads // Threads
public static final String THREAD_NAME_BENCHMARK = "Ms-Benchmark"; public static final String THREAD_NAME_BENCHMARK = "Ms-Benchmark";

View File

@ -158,6 +158,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
private final PlayerSettings settings; private final PlayerSettings settings;
private float exp; private float exp;
private int level; private int level;
private int portalCooldown = 0;
protected PlayerInventory inventory; protected PlayerInventory inventory;
private Inventory openInventory; private Inventory openInventory;
@ -281,7 +282,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
final JoinGamePacket joinGamePacket = new JoinGamePacket(getEntityId(), false, gameMode, null, final JoinGamePacket joinGamePacket = new JoinGamePacket(getEntityId(), false, gameMode, null,
List.of(dimensionType.getName().asString()), NBT.Compound(registry), dimensionType.toString(), dimensionType.getName().asString(), List.of(dimensionType.getName().asString()), NBT.Compound(registry), dimensionType.toString(), dimensionType.getName().asString(),
0, 0, MinecraftServer.getChunkViewDistance(), MinecraftServer.getChunkViewDistance(), 0, 0, MinecraftServer.getChunkViewDistance(), MinecraftServer.getChunkViewDistance(),
false, true, false, levelFlat, deathLocation); false, true, false, levelFlat, deathLocation, portalCooldown);
sendPacket(joinGamePacket); sendPacket(joinGamePacket);
// Server brand name // Server brand name
@ -449,7 +450,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
// #buildDeathScreenText can return null, check here // #buildDeathScreenText can return null, check here
if (deathText != null) { if (deathText != null) {
sendPacket(new DeathCombatEventPacket(getEntityId(), -1, deathText)); sendPacket(new DeathCombatEventPacket(getEntityId(), deathText));
} }
// #buildDeathMessage can return null, check here // #buildDeathMessage can return null, check here
@ -477,7 +478,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
refreshHealth(); refreshHealth();
sendPacket(new RespawnPacket(getDimensionType().toString(), getDimensionType().getName().asString(), sendPacket(new RespawnPacket(getDimensionType().toString(), getDimensionType().getName().asString(),
0, gameMode, gameMode, false, levelFlat, true, deathLocation)); 0, gameMode, gameMode, false, levelFlat, true, deathLocation, portalCooldown));
PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(this); PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(this);
EventDispatcher.call(respawnEvent); EventDispatcher.call(respawnEvent);
@ -1009,7 +1010,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
final PlayerInfoUpdatePacket addPlayerPacket = getAddPlayerToList(); final PlayerInfoUpdatePacket addPlayerPacket = getAddPlayerToList();
RespawnPacket respawnPacket = new RespawnPacket(getDimensionType().toString(), getDimensionType().getName().asString(), RespawnPacket respawnPacket = new RespawnPacket(getDimensionType().toString(), getDimensionType().getName().asString(),
0, gameMode, gameMode, false, levelFlat, true, deathLocation); 0, gameMode, gameMode, false, levelFlat, true, deathLocation, portalCooldown);
sendPacket(removePlayerPacket); sendPacket(removePlayerPacket);
sendPacket(destroyEntitiesPacket); sendPacket(destroyEntitiesPacket);
@ -1249,6 +1250,14 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
sendPacket(new SetExperiencePacket(exp, level, 0)); sendPacket(new SetExperiencePacket(exp, level, 0));
} }
public int getPortalCooldown() {
return portalCooldown;
}
public void setPortalCooldown(int portalCooldown) {
this.portalCooldown = portalCooldown;
}
/** /**
* Gets the player connection. * Gets the player connection.
* <p> * <p>
@ -1389,7 +1398,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
"The dimension needs to be different than the current one!"); "The dimension needs to be different than the current one!");
this.dimensionType = dimensionType; this.dimensionType = dimensionType;
sendPacket(new RespawnPacket(dimensionType.toString(), getDimensionType().getName().asString(), sendPacket(new RespawnPacket(dimensionType.toString(), getDimensionType().getName().asString(),
0, gameMode, gameMode, false, levelFlat, true, deathLocation)); 0, gameMode, gameMode, false, levelFlat, true, deathLocation, portalCooldown));
refreshClientStateAfterRespawn(); refreshClientStateAfterRespawn();
} }

View File

@ -246,10 +246,11 @@ public class DynamicChunk extends Chunk {
emptyBlockMask.set(index); emptyBlockMask.set(index);
} }
} }
return new LightData(true, return new LightData(
skyMask, blockMask, skyMask, blockMask,
emptySkyMask, emptyBlockMask, emptySkyMask, emptyBlockMask,
skyLights, blockLights); skyLights, blockLights
);
} }
@Override @Override

View File

@ -195,10 +195,11 @@ public class LightingChunk extends DynamicChunk {
sendNeighbours = false; sendNeighbours = false;
} }
return new LightData(true, return new LightData(
skyMask, blockMask, skyMask, blockMask,
emptySkyMask, emptyBlockMask, emptySkyMask, emptyBlockMask,
skyLights, blockLights); skyLights, blockLights
);
} }
private static final Set<LightingChunk> sendQueue = ConcurrentHashMap.newKeySet(); private static final Set<LightingChunk> sendQueue = ConcurrentHashMap.newKeySet();

View File

@ -7,11 +7,13 @@ import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
import static net.minestom.server.network.NetworkBuffer.BLOCK_POSITION; import static net.minestom.server.network.NetworkBuffer.*;
import static net.minestom.server.network.NetworkBuffer.STRING;
public record ClientUpdateSignPacket(@NotNull Point blockPosition, public record ClientUpdateSignPacket(
@NotNull List<String> lines) implements ClientPacket { @NotNull Point blockPosition,
boolean isFrontText,
@NotNull List<String> lines
) implements ClientPacket {
public ClientUpdateSignPacket { public ClientUpdateSignPacket {
lines = List.copyOf(lines); lines = List.copyOf(lines);
if (lines.size() != 4) { if (lines.size() != 4) {
@ -25,12 +27,13 @@ public record ClientUpdateSignPacket(@NotNull Point blockPosition,
} }
public ClientUpdateSignPacket(@NotNull NetworkBuffer reader) { public ClientUpdateSignPacket(@NotNull NetworkBuffer reader) {
this(reader.read(BLOCK_POSITION), readLines(reader)); this(reader.read(BLOCK_POSITION), reader.read(BOOLEAN), readLines(reader));
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(BLOCK_POSITION, blockPosition); writer.write(BLOCK_POSITION, blockPosition);
writer.write(BOOLEAN, isFrontText);
writer.write(STRING, lines.get(0)); writer.write(STRING, lines.get(0));
writer.write(STRING, lines.get(1)); writer.write(STRING, lines.get(1));
writer.write(STRING, lines.get(2)); writer.write(STRING, lines.get(2));

View File

@ -13,16 +13,14 @@ import java.util.function.UnaryOperator;
import static net.minestom.server.network.NetworkBuffer.*; import static net.minestom.server.network.NetworkBuffer.*;
public record DeathCombatEventPacket(int playerId, int entityId, public record DeathCombatEventPacket(int playerId, @NotNull Component message) implements ComponentHoldingServerPacket {
@NotNull Component message) implements ComponentHoldingServerPacket {
public DeathCombatEventPacket(@NotNull NetworkBuffer reader) { public DeathCombatEventPacket(@NotNull NetworkBuffer reader) {
this(reader.read(VAR_INT), reader.read(INT), reader.read(COMPONENT)); this(reader.read(VAR_INT), reader.read(COMPONENT));
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(VAR_INT, playerId); writer.write(VAR_INT, playerId);
writer.write(INT, entityId);
writer.write(COMPONENT, message); writer.write(COMPONENT, message);
} }
@ -38,6 +36,6 @@ public record DeathCombatEventPacket(int playerId, int entityId,
@Override @Override
public @NotNull ServerPacket copyWithOperator(@NotNull UnaryOperator<Component> operator) { public @NotNull ServerPacket copyWithOperator(@NotNull UnaryOperator<Component> operator) {
return new DeathCombatEventPacket(this.playerId, this.entityId, operator.apply(this.message)); return new DeathCombatEventPacket(this.playerId, operator.apply(this.message));
} }
} }

View File

@ -5,18 +5,16 @@ import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import static net.minestom.server.network.NetworkBuffer.INT;
import static net.minestom.server.network.NetworkBuffer.VAR_INT; import static net.minestom.server.network.NetworkBuffer.VAR_INT;
public record EndCombatEventPacket(int duration, int entityId) implements ServerPacket { public record EndCombatEventPacket(int duration) implements ServerPacket {
public EndCombatEventPacket(@NotNull NetworkBuffer reader) { public EndCombatEventPacket(@NotNull NetworkBuffer reader) {
this(reader.read(VAR_INT), reader.read(INT)); this(reader.read(VAR_INT));
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(VAR_INT, duration); writer.write(VAR_INT, duration);
writer.write(INT, entityId);
} }
@Override @Override

View File

@ -17,7 +17,7 @@ public record JoinGamePacket(int entityId, boolean isHardcore, GameMode gameMode
List<String> worlds, NBTCompound dimensionCodec, String dimensionType, String world, List<String> worlds, NBTCompound dimensionCodec, String dimensionType, String world,
long hashedSeed, int maxPlayers, int viewDistance, int simulationDistance, long hashedSeed, int maxPlayers, int viewDistance, int simulationDistance,
boolean reducedDebugInfo, boolean enableRespawnScreen, boolean isDebug, boolean isFlat, boolean reducedDebugInfo, boolean enableRespawnScreen, boolean isDebug, boolean isFlat,
DeathLocation deathLocation) implements ServerPacket { DeathLocation deathLocation, int portalCooldown) implements ServerPacket {
public JoinGamePacket { public JoinGamePacket {
worlds = List.copyOf(worlds); worlds = List.copyOf(worlds);
} }
@ -27,7 +27,7 @@ public record JoinGamePacket(int entityId, boolean isHardcore, GameMode gameMode
reader.readCollection(STRING), (NBTCompound) reader.read(NBT), reader.read(STRING), reader.read(STRING), reader.readCollection(STRING), (NBTCompound) reader.read(NBT), reader.read(STRING), reader.read(STRING),
reader.read(LONG), reader.read(VAR_INT), reader.read(VAR_INT), reader.read(VAR_INT), reader.read(LONG), reader.read(VAR_INT), reader.read(VAR_INT), reader.read(VAR_INT),
reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN),
reader.read(DEATH_LOCATION)); reader.read(DEATH_LOCATION), reader.read(VAR_INT));
} }
@Override @Override
@ -58,6 +58,8 @@ public record JoinGamePacket(int entityId, boolean isHardcore, GameMode gameMode
writer.write(BOOLEAN, isFlat); writer.write(BOOLEAN, isFlat);
writer.write(DEATH_LOCATION, deathLocation); writer.write(DEATH_LOCATION, deathLocation);
writer.write(VAR_INT, portalCooldown);
} }
@Override @Override

View File

@ -7,24 +7,19 @@ import org.jetbrains.annotations.NotNull;
import static net.minestom.server.network.NetworkBuffer.*; import static net.minestom.server.network.NetworkBuffer.*;
public record MultiBlockChangePacket(long chunkSectionPosition, public record MultiBlockChangePacket(long chunkSectionPosition, long[] blocks) implements ServerPacket {
boolean suppressLightUpdates,
long[] blocks) implements ServerPacket {
public MultiBlockChangePacket(int chunkX, int section, int chunkZ, public MultiBlockChangePacket(int chunkX, int section, int chunkZ,
boolean suppressLightUpdates,
long[] blocks) { long[] blocks) {
this(((long) (chunkX & 0x3FFFFF) << 42) | (section & 0xFFFFF) | ((long) (chunkZ & 0x3FFFFF) << 20), this(((long) (chunkX & 0x3FFFFF) << 42) | (section & 0xFFFFF) | ((long) (chunkZ & 0x3FFFFF) << 20), blocks);
suppressLightUpdates, blocks);
} }
public MultiBlockChangePacket(@NotNull NetworkBuffer reader) { public MultiBlockChangePacket(@NotNull NetworkBuffer reader) {
this(reader.read(LONG), reader.read(BOOLEAN), reader.read(VAR_LONG_ARRAY)); this(reader.read(LONG), reader.read(VAR_LONG_ARRAY));
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(LONG, chunkSectionPosition); writer.write(LONG, chunkSectionPosition);
writer.write(BOOLEAN, suppressLightUpdates);
writer.write(VAR_LONG_ARRAY, blocks); writer.write(VAR_LONG_ARRAY, blocks);
} }

View File

@ -7,15 +7,17 @@ import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import static net.minestom.server.network.NetworkBuffer.BLOCK_POSITION; import static net.minestom.server.network.NetworkBuffer.BLOCK_POSITION;
import static net.minestom.server.network.NetworkBuffer.BOOLEAN;
public record OpenSignEditorPacket(@NotNull Point position) implements ServerPacket { public record OpenSignEditorPacket(@NotNull Point position, boolean isFrontText) implements ServerPacket {
public OpenSignEditorPacket(@NotNull NetworkBuffer reader) { public OpenSignEditorPacket(@NotNull NetworkBuffer reader) {
this(reader.read(BLOCK_POSITION)); this(reader.read(BLOCK_POSITION), reader.read(BOOLEAN));
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(BLOCK_POSITION, position); writer.write(BLOCK_POSITION, position);
writer.write(BOOLEAN, isFrontText);
} }
@Override @Override

View File

@ -12,11 +12,14 @@ import static net.minestom.server.network.NetworkBuffer.*;
public record RespawnPacket(String dimensionType, String worldName, public record RespawnPacket(String dimensionType, String worldName,
long hashedSeed, GameMode gameMode, GameMode previousGameMode, long hashedSeed, GameMode gameMode, GameMode previousGameMode,
boolean isDebug, boolean isFlat, boolean copyMeta, boolean isDebug, boolean isFlat, boolean copyMeta,
DeathLocation deathLocation) implements ServerPacket { DeathLocation deathLocation, int portalCooldown) implements ServerPacket {
public RespawnPacket(@NotNull NetworkBuffer reader) { public RespawnPacket(@NotNull NetworkBuffer reader) {
this(reader.read(STRING), reader.read(STRING), this(reader.read(STRING), reader.read(STRING),
reader.read(LONG), GameMode.fromId(reader.read(BYTE)), GameMode.fromId(reader.read(BYTE)), reader.read(LONG), GameMode.fromId(reader.read(BYTE)),
reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(BOOLEAN), reader.read(DEATH_LOCATION)); GameMode.fromId(reader.read(BYTE)),
reader.read(BOOLEAN), reader.read(BOOLEAN),
reader.read(BOOLEAN), reader.read(DEATH_LOCATION),
reader.read(VAR_INT));
} }
@Override @Override
@ -30,6 +33,7 @@ public record RespawnPacket(String dimensionType, String worldName,
writer.write(BOOLEAN, isFlat); writer.write(BOOLEAN, isFlat);
writer.write(BOOLEAN, copyMeta); writer.write(BOOLEAN, copyMeta);
writer.write(DEATH_LOCATION, deathLocation); writer.write(DEATH_LOCATION, deathLocation);
writer.write(VAR_INT, portalCooldown);
} }
@Override @Override

View File

@ -8,22 +8,22 @@ import java.util.List;
import static net.minestom.server.network.NetworkBuffer.*; import static net.minestom.server.network.NetworkBuffer.*;
public record LightData(boolean trustEdges, public record LightData(
@NotNull BitSet skyMask, @NotNull BitSet blockMask, @NotNull BitSet skyMask, @NotNull BitSet blockMask,
@NotNull BitSet emptySkyMask, @NotNull BitSet emptyBlockMask, @NotNull BitSet emptySkyMask, @NotNull BitSet emptyBlockMask,
@NotNull List<byte[]> skyLight, @NotNull List<byte[]> skyLight,
@NotNull List<byte[]> blockLight) implements NetworkBuffer.Writer { @NotNull List<byte[]> blockLight
) implements NetworkBuffer.Writer {
public LightData(@NotNull NetworkBuffer reader) { public LightData(@NotNull NetworkBuffer reader) {
this(reader.read(BOOLEAN), this(
BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)),
BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)), BitSet.valueOf(reader.read(LONG_ARRAY)),
reader.readCollection(BYTE_ARRAY), reader.readCollection(BYTE_ARRAY)); reader.readCollection(BYTE_ARRAY), reader.readCollection(BYTE_ARRAY)
);
} }
@Override @Override
public void write(@NotNull NetworkBuffer writer) { public void write(@NotNull NetworkBuffer writer) {
writer.write(BOOLEAN, trustEdges);
writer.write(LONG_ARRAY, skyMask.toLongArray()); writer.write(LONG_ARRAY, skyMask.toLongArray());
writer.write(LONG_ARRAY, blockMask.toLongArray()); writer.write(LONG_ARRAY, blockMask.toLongArray());

View File

@ -90,7 +90,7 @@ public class PacketWriteReadTest {
SERVER_PACKETS.add(new CloseWindowPacket((byte) 2)); SERVER_PACKETS.add(new CloseWindowPacket((byte) 2));
SERVER_PACKETS.add(new CollectItemPacket(5, 5, 5)); SERVER_PACKETS.add(new CollectItemPacket(5, 5, 5));
SERVER_PACKETS.add(new CraftRecipeResponse((byte) 2, "recipe")); SERVER_PACKETS.add(new CraftRecipeResponse((byte) 2, "recipe"));
SERVER_PACKETS.add(new DeathCombatEventPacket(5, 5, COMPONENT)); SERVER_PACKETS.add(new DeathCombatEventPacket(5, COMPONENT));
SERVER_PACKETS.add(new DeclareRecipesPacket( SERVER_PACKETS.add(new DeclareRecipesPacket(
List.of(new DeclareRecipesPacket.DeclaredShapelessCraftingRecipe( List.of(new DeclareRecipesPacket.DeclaredShapelessCraftingRecipe(
"minecraft:sticks", "minecraft:sticks",
@ -112,7 +112,7 @@ public class PacketWriteReadTest {
SERVER_PACKETS.add(new DisconnectPacket(COMPONENT)); SERVER_PACKETS.add(new DisconnectPacket(COMPONENT));
SERVER_PACKETS.add(new DisplayScoreboardPacket((byte) 5, "scoreboard")); SERVER_PACKETS.add(new DisplayScoreboardPacket((byte) 5, "scoreboard"));
SERVER_PACKETS.add(new EffectPacket(5, VEC, 5, false)); SERVER_PACKETS.add(new EffectPacket(5, VEC, 5, false));
SERVER_PACKETS.add(new EndCombatEventPacket(5, 5)); SERVER_PACKETS.add(new EndCombatEventPacket(5));
SERVER_PACKETS.add(new EnterCombatEventPacket()); SERVER_PACKETS.add(new EnterCombatEventPacket());
SERVER_PACKETS.add(new EntityAnimationPacket(5, EntityAnimationPacket.Animation.TAKE_DAMAGE)); SERVER_PACKETS.add(new EntityAnimationPacket(5, EntityAnimationPacket.Animation.TAKE_DAMAGE));
SERVER_PACKETS.add(new EntityEquipmentPacket(6, Map.of(EquipmentSlot.MAIN_HAND, ItemStack.of(Material.DIAMOND_SWORD)))); SERVER_PACKETS.add(new EntityEquipmentPacket(6, Map.of(EquipmentSlot.MAIN_HAND, ItemStack.of(Material.DIAMOND_SWORD))));