Merge branch 'version/7.2.x'

This commit is contained in:
Madeline Miller 2023-12-11 20:58:23 +10:00
commit ebf355f8fb
No known key found for this signature in database
GPG Key ID: B8EA2E5693115D81
29 changed files with 4623 additions and 38 deletions

View File

@ -51,12 +51,12 @@ dependencies {
implementation("me.champeau.gradle:japicmp-gradle-plugin:0.4.0")
implementation("com.github.johnrengelman:shadow:8.1.1")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.32.0")
implementation("org.spongepowered:spongegradle-plugin-development:2.1.1")
implementation("org.spongepowered:vanillagradle:0.2.1-20230603.203956-54")
implementation("net.minecraftforge.gradle:ForgeGradle:6.0.13")
implementation("org.spongepowered:spongegradle-plugin-development:2.2.0")
implementation("org.spongepowered:vanillagradle:0.2.1-20231105.223944-69")
implementation("net.minecraftforge.gradle:ForgeGradle:6.0.16")
implementation("net.fabricmc:fabric-loom:$loomVersion")
implementation("net.fabricmc:sponge-mixin:$mixinVersion")
implementation("org.enginehub.gradle:gradle-codecov-plugin:0.2.0")
implementation("io.papermc.paperweight.userdev:io.papermc.paperweight.userdev.gradle.plugin:1.5.5")
implementation("io.papermc.paperweight.userdev:io.papermc.paperweight.userdev.gradle.plugin:1.5.9")
implementation("org.spongepowered:mixingradle:0.7.38")
}

View File

@ -4,5 +4,5 @@ version=7.3.0-SNAPSHOT
org.gradle.jvmargs=-Xmx2G
org.gradle.parallel=true
loom.version=1.3.9
loom.version=1.4.4
mixin.version=0.12.5+mixin.0.8.5

Binary file not shown.

View File

@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

29
gradlew vendored
View File

@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -133,10 +131,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

View File

@ -2,7 +2,7 @@ rootProject.name = "worldedit"
include("worldedit-libs")
listOf("1.17.1", "1.18.2", "1.19.4", "1.20", "1.20.2").forEach {
listOf("1.17.1", "1.18.2", "1.19.4", "1.20", "1.20.2", "1.20.4").forEach {
include("worldedit-bukkit:adapters:adapter-$it")
}

View File

@ -4,5 +4,5 @@ applyPaperweightAdapterConfiguration()
dependencies {
// https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/dev-bundle/
the<PaperweightUserDependenciesExtension>().paperDevBundle("1.20.2-R0.1-20230924.232656-10")
the<PaperweightUserDependenciesExtension>().paperDevBundle("1.20.2-R0.1-20231119.012505-100")
}

View File

@ -0,0 +1,8 @@
import io.papermc.paperweight.userdev.PaperweightUserDependenciesExtension
applyPaperweightAdapterConfiguration()
dependencies {
// https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/dev-bundle/
the<PaperweightUserDependenciesExtension>().paperDevBundle("1.20.4-R0.1-20231207.202833-1")
}

View File

@ -0,0 +1,98 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit.bukkit.adapter.impl.v1_20_R3;
import com.mojang.authlib.GameProfile;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ClientInformation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.stats.Stat;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.player.ChatVisiblity;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.phys.Vec3;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import java.util.OptionalInt;
import java.util.UUID;
class PaperweightFakePlayer extends ServerPlayer {
private static final GameProfile FAKE_WORLDEDIT_PROFILE = new GameProfile(UUID.nameUUIDFromBytes("worldedit".getBytes()), "[WorldEdit]");
private static final Vec3 ORIGIN = new Vec3(0.0D, 0.0D, 0.0D);
private static final ClientInformation FAKE_CLIENT_INFO = new ClientInformation(
"en_US", 16, ChatVisiblity.FULL, true, 0, HumanoidArm.LEFT, false, false
);
PaperweightFakePlayer(ServerLevel world) {
super(world.getServer(), world, FAKE_WORLDEDIT_PROFILE, FAKE_CLIENT_INFO);
}
@Override
public Vec3 position() {
return ORIGIN;
}
@Override
public void tick() {
}
@Override
public void die(DamageSource damagesource) {
}
@Override
public Entity changeDimension(ServerLevel worldserver, TeleportCause cause) {
return this;
}
@Override
public OptionalInt openMenu(MenuProvider factory) {
return OptionalInt.empty();
}
@Override
public void updateOptions(ClientInformation clientOptions) {
}
@Override
public void displayClientMessage(Component message, boolean actionBar) {
}
@Override
public void awardStat(Stat<?> stat, int amount) {
}
@Override
public void awardStat(Stat<?> stat) {
}
@Override
public boolean isInvulnerableTo(DamageSource damageSource) {
return true;
}
@Override
public void openTextEdit(SignBlockEntity sign, boolean front) {
}
}

View File

@ -0,0 +1,150 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit.bukkit.adapter.impl.v1_20_R3;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.util.concurrency.LazyReference;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.entity.EntityTypes;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import org.enginehub.linbus.tree.LinCompoundTag;
import org.jetbrains.annotations.Nullable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PaperweightServerLevelDelegateProxy implements InvocationHandler {
private final EditSession editSession;
private final ServerLevel serverLevel;
private final PaperweightAdapter adapter;
private PaperweightServerLevelDelegateProxy(EditSession editSession, ServerLevel serverLevel, PaperweightAdapter adapter) {
this.editSession = editSession;
this.serverLevel = serverLevel;
this.adapter = adapter;
}
public static WorldGenLevel newInstance(EditSession editSession, ServerLevel serverLevel, PaperweightAdapter adapter) {
return (WorldGenLevel) Proxy.newProxyInstance(
serverLevel.getClass().getClassLoader(),
serverLevel.getClass().getInterfaces(),
new PaperweightServerLevelDelegateProxy(editSession, serverLevel, adapter)
);
}
@Nullable
private BlockEntity getBlockEntity(BlockPos blockPos) {
BlockEntity tileEntity = this.serverLevel.getChunkAt(blockPos).getBlockEntity(blockPos);
if (tileEntity == null) {
return null;
}
BlockEntity newEntity = tileEntity.getType().create(blockPos, getBlockState(blockPos));
newEntity.load((CompoundTag) adapter.fromNative(this.editSession.getFullBlock(BlockVector3.at(blockPos.getX(), blockPos.getY(), blockPos.getZ())).getNbtReference().getValue()));
return newEntity;
}
private BlockState getBlockState(BlockPos blockPos) {
return adapter.adapt(this.editSession.getBlock(BlockVector3.at(blockPos.getX(), blockPos.getY(), blockPos.getZ())));
}
private boolean setBlock(BlockPos blockPos, BlockState blockState) {
try {
return editSession.setBlock(BlockVector3.at(blockPos.getX(), blockPos.getY(), blockPos.getZ()), adapter.adapt(blockState));
} catch (MaxChangedBlocksException e) {
throw new RuntimeException(e);
}
}
private boolean removeBlock(BlockPos blockPos, boolean bl) {
try {
return editSession.setBlock(BlockVector3.at(blockPos.getX(), blockPos.getY(), blockPos.getZ()), BlockTypes.AIR.getDefaultState());
} catch (MaxChangedBlocksException e) {
throw new RuntimeException(e);
}
}
private boolean addEntity(Entity entity) {
Vec3 pos = entity.getPosition(0.0f);
Location location = new Location(BukkitAdapter.adapt(serverLevel.getWorld()), pos.x(), pos.y(), pos.z());
ResourceLocation id = serverLevel.registryAccess().registryOrThrow(Registries.ENTITY_TYPE).getKey(entity.getType());
CompoundTag tag = new CompoundTag();
entity.saveWithoutId(tag);
BaseEntity baseEntity = new BaseEntity(EntityTypes.get(id.toString()), LazyReference.from(() -> (LinCompoundTag) adapter.toNative(tag)));
return editSession.createEntity(location, baseEntity) != null;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
switch (method.getName()) {
case "a_", "getBlockState", "addFreshEntityWithPassengers" -> {
if (args.length == 1 && args[0] instanceof BlockPos blockPos) {
// getBlockState
return getBlockState(blockPos);
} else if (args.length >= 1 && args[0] instanceof Entity entity) {
// addFreshEntityWithPassengers
return addEntity(entity);
}
}
case "c_", "getBlockEntity" -> {
if (args.length == 1 && args[0] instanceof BlockPos blockPos) {
// getBlockEntity
return getBlockEntity(blockPos);
}
}
case "a", "setBlock", "removeBlock", "destroyBlock" -> {
if (args.length >= 2 && args[0] instanceof BlockPos blockPos && args[1] instanceof BlockState blockState) {
// setBlock
return setBlock(blockPos, blockState);
} else if (args.length >= 2 && args[0] instanceof BlockPos blockPos && args[1] instanceof Boolean bl) {
// removeBlock (and also matches destroyBlock)
return removeBlock(blockPos, bl);
}
}
case "j", "addEntity" -> {
if (args.length >= 1 && args[0] instanceof Entity entity) {
return addEntity(entity);
}
}
default -> { }
}
return method.invoke(this.serverLevel, args);
}
}

View File

@ -0,0 +1,188 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit.bukkit.adapter.impl.v1_20_R3;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.internal.block.BlockStateIdAccess;
import com.sk89q.worldedit.internal.wna.WorldNativeAccess;
import com.sk89q.worldedit.util.SideEffect;
import com.sk89q.worldedit.util.SideEffectSet;
import com.sk89q.worldedit.world.block.BlockState;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.Tag;
import net.minecraft.server.level.FullChunkStatus;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.chunk.LevelChunk;
import org.bukkit.craftbukkit.v1_20_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_20_R3.block.data.CraftBlockData;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.enginehub.linbus.tree.LinCompoundTag;
import java.lang.ref.WeakReference;
import java.util.Objects;
import javax.annotation.Nullable;
public class PaperweightWorldNativeAccess implements WorldNativeAccess<LevelChunk, net.minecraft.world.level.block.state.BlockState, BlockPos> {
private static final int UPDATE = 1;
private static final int NOTIFY = 2;
private final PaperweightAdapter adapter;
private final WeakReference<ServerLevel> world;
private SideEffectSet sideEffectSet;
public PaperweightWorldNativeAccess(PaperweightAdapter adapter, WeakReference<ServerLevel> world) {
this.adapter = adapter;
this.world = world;
}
private ServerLevel getWorld() {
return Objects.requireNonNull(world.get(), "The reference to the world was lost");
}
@Override
public void setCurrentSideEffectSet(SideEffectSet sideEffectSet) {
this.sideEffectSet = sideEffectSet;
}
@Override
public LevelChunk getChunk(int x, int z) {
return getWorld().getChunk(x, z);
}
@Override
public net.minecraft.world.level.block.state.BlockState toNative(BlockState state) {
int stateId = BlockStateIdAccess.getBlockStateId(state);
return BlockStateIdAccess.isValidInternalId(stateId)
? Block.stateById(stateId)
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
}
@Override
public net.minecraft.world.level.block.state.BlockState getBlockState(LevelChunk chunk, BlockPos position) {
return chunk.getBlockState(position);
}
@Nullable
@Override
public net.minecraft.world.level.block.state.BlockState setBlockState(LevelChunk chunk, BlockPos position, net.minecraft.world.level.block.state.BlockState state) {
return chunk.setBlockState(position, state, false, this.sideEffectSet.shouldApply(SideEffect.UPDATE));
}
@Override
public net.minecraft.world.level.block.state.BlockState getValidBlockForPosition(net.minecraft.world.level.block.state.BlockState block, BlockPos position) {
return Block.updateFromNeighbourShapes(block, getWorld(), position);
}
@Override
public BlockPos getPosition(int x, int y, int z) {
return new BlockPos(x, y, z);
}
@Override
public void updateLightingForBlock(BlockPos position) {
getWorld().getChunkSource().getLightEngine().checkBlock(position);
}
@Override
public boolean updateTileEntity(BlockPos position, LinCompoundTag tag) {
// We will assume that the tile entity was created for us
BlockEntity tileEntity = getWorld().getBlockEntity(position);
if (tileEntity == null) {
return false;
}
Tag nativeTag = adapter.fromNative(tag);
PaperweightAdapter.readTagIntoTileEntity((net.minecraft.nbt.CompoundTag) nativeTag, tileEntity);
return true;
}
@Override
public void notifyBlockUpdate(LevelChunk chunk, BlockPos position, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState) {
if (chunk.getSections()[getWorld().getSectionIndex(position.getY())] != null) {
getWorld().sendBlockUpdated(position, oldState, newState, UPDATE | NOTIFY);
}
}
@Override
public boolean isChunkTicking(LevelChunk chunk) {
return chunk.getFullStatus().isOrAfter(FullChunkStatus.BLOCK_TICKING);
}
@Override
public void markBlockChanged(LevelChunk chunk, BlockPos position) {
if (chunk.getSections()[getWorld().getSectionIndex(position.getY())] != null) {
getWorld().getChunkSource().blockChanged(position);
}
}
@Override
public void notifyNeighbors(BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState) {
ServerLevel world = getWorld();
if (sideEffectSet.shouldApply(SideEffect.EVENTS)) {
world.updateNeighborsAt(pos, oldState.getBlock());
} else {
// When we don't want events, manually run the physics without them.
Block block = oldState.getBlock();
fireNeighborChanged(pos, world, block, pos.west());
fireNeighborChanged(pos, world, block, pos.east());
fireNeighborChanged(pos, world, block, pos.below());
fireNeighborChanged(pos, world, block, pos.above());
fireNeighborChanged(pos, world, block, pos.north());
fireNeighborChanged(pos, world, block, pos.south());
}
if (newState.hasAnalogOutputSignal()) {
world.updateNeighbourForOutputSignal(pos, newState.getBlock());
}
}
@Override
public void updateBlock(BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState) {
ServerLevel world = getWorld();
newState.onPlace(world, pos, oldState, false);
}
// Not sure why neighborChanged is deprecated
@SuppressWarnings("deprecation")
private void fireNeighborChanged(BlockPos pos, ServerLevel world, Block block, BlockPos neighborPos) {
world.getBlockState(neighborPos).neighborChanged(world, neighborPos, block, pos, false);
}
@Override
public void updateNeighbors(BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState, int recursionLimit) {
ServerLevel world = getWorld();
oldState.updateIndirectNeighbourShapes(world, pos, NOTIFY, recursionLimit);
if (sideEffectSet.shouldApply(SideEffect.EVENTS)) {
CraftWorld craftWorld = world.getWorld();
BlockPhysicsEvent event = new BlockPhysicsEvent(craftWorld.getBlockAt(pos.getX(), pos.getY(), pos.getZ()), CraftBlockData.fromData(newState));
world.getCraftServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
}
newState.updateNeighbourShapes(world, pos, NOTIFY, recursionLimit);
newState.updateIndirectNeighbourShapes(world, pos, NOTIFY, recursionLimit);
}
@Override
public void onBlockStateChange(BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState) {
getWorld().onBlockStateChange(pos, oldState, newState);
}
}

View File

@ -4,5 +4,5 @@ applyPaperweightAdapterConfiguration()
dependencies {
// https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/dev-bundle/
the<PaperweightUserDependenciesExtension>().paperDevBundle("1.20.1-R0.1-20230816.041652-110")
the<PaperweightUserDependenciesExtension>().paperDevBundle("1.20.1-R0.1-20230921.165944-178")
}

View File

@ -121,7 +121,9 @@ public abstract class LocalConfiguration {
BlockTypes.YELLOW_BED,
BlockTypes.POWERED_RAIL,
BlockTypes.DETECTOR_RAIL,
// Keep grass for <1.20.3 compat
BlockTypes.GRASS,
BlockTypes.SHORT_GRASS,
BlockTypes.DEAD_BUSH,
BlockTypes.MOVING_PISTON,
BlockTypes.PISTON_HEAD,

View File

@ -88,7 +88,11 @@ public class MultiStageReorder extends AbstractBufferingExtent implements Reorde
priorityMap.put(BlockTypes.RED_BED, PlacementPriority.LAST);
priorityMap.put(BlockTypes.WHITE_BED, PlacementPriority.LAST);
priorityMap.put(BlockTypes.YELLOW_BED, PlacementPriority.LAST);
priorityMap.put(BlockTypes.GRASS, PlacementPriority.LAST);
// Keep "grass" for <1.20.3 compat
@SuppressWarnings("deprecation")
BlockType grass = BlockTypes.GRASS;
priorityMap.put(grass, PlacementPriority.LAST);
priorityMap.put(BlockTypes.SHORT_GRASS, PlacementPriority.LAST);
priorityMap.put(BlockTypes.TALL_GRASS, PlacementPriority.LAST);
priorityMap.put(BlockTypes.ROSE_BUSH, PlacementPriority.LAST);
priorityMap.put(BlockTypes.DANDELION, PlacementPriority.LAST);

View File

@ -24,6 +24,7 @@ import com.sk89q.worldedit.extent.AbstractDelegateExtent;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockType;
@ -76,4 +77,14 @@ public class DataValidatorExtent extends AbstractDelegateExtent {
return super.setBlock(location, block);
}
@Override
public boolean setBiome(BlockVector3 location, BiomeType biome) {
final int y = location.getBlockY();
if (y < minY || y > maxY) {
return false;
}
return super.setBiome(location, biome);
}
}

View File

@ -26,6 +26,7 @@ import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes;
/**
@ -95,7 +96,12 @@ public class FloraGenerator implements RegionFunction {
*/
public static Pattern getTemperatePattern() {
RandomPattern pattern = new RandomPattern();
pattern.add(BlockTypes.GRASS.getDefaultState(), 300);
BlockType grass = BlockTypes.SHORT_GRASS;
if (grass == null) {
// Fallback for <1.20.3 compat
grass = BlockTypes.GRASS;
}
pattern.add(grass.getDefaultState(), 300);
pattern.add(BlockTypes.POPPY.getDefaultState(), 5);
pattern.add(BlockTypes.DANDELION.getDefaultState(), 5);
return pattern;

View File

@ -47,6 +47,7 @@ public final class BlockCategories {
public static final BlockCategory BIG_DRIPLEAF_PLACEABLE = get("minecraft:big_dripleaf_placeable");
public static final BlockCategory BIRCH_LOGS = get("minecraft:birch_logs");
public static final BlockCategory BUTTONS = get("minecraft:buttons");
public static final BlockCategory CAMEL_SAND_STEP_SOUND_BLOCKS = get("minecraft:camel_sand_step_sound_blocks");
public static final BlockCategory CAMPFIRES = get("minecraft:campfires");
public static final BlockCategory CANDLE_CAKES = get("minecraft:candle_cakes");
public static final BlockCategory CANDLES = get("minecraft:candles");
@ -59,6 +60,7 @@ public final class BlockCategories {
public static final BlockCategory COAL_ORES = get("minecraft:coal_ores");
public static final BlockCategory COMBINATION_STEP_SOUND_BLOCKS = get("minecraft:combination_step_sound_blocks");
public static final BlockCategory COMPLETES_FIND_TREE_TUTORIAL = get("minecraft:completes_find_tree_tutorial");
public static final BlockCategory CONCRETE_POWDER = get("minecraft:concrete_powder");
public static final BlockCategory CONVERTABLE_TO_MUD = get("minecraft:convertable_to_mud");
public static final BlockCategory COPPER_ORES = get("minecraft:copper_ores");
public static final BlockCategory CORAL_BLOCKS = get("minecraft:coral_blocks");

View File

@ -212,6 +212,7 @@ public final class BlockTypes {
@Nullable public static final BlockType CHEST = get("minecraft:chest");
@Nullable public static final BlockType CHIPPED_ANVIL = get("minecraft:chipped_anvil");
@Nullable public static final BlockType CHISELED_BOOKSHELF = get("minecraft:chiseled_bookshelf");
@Nullable public static final BlockType CHISELED_COPPER = get("minecraft:chiseled_copper");
@Nullable public static final BlockType CHISELED_DEEPSLATE = get("minecraft:chiseled_deepslate");
@Nullable public static final BlockType CHISELED_NETHER_BRICKS = get("minecraft:chiseled_nether_bricks");
@Nullable public static final BlockType CHISELED_POLISHED_BLACKSTONE = get("minecraft:chiseled_polished_blackstone");
@ -219,6 +220,8 @@ public final class BlockTypes {
@Nullable public static final BlockType CHISELED_RED_SANDSTONE = get("minecraft:chiseled_red_sandstone");
@Nullable public static final BlockType CHISELED_SANDSTONE = get("minecraft:chiseled_sandstone");
@Nullable public static final BlockType CHISELED_STONE_BRICKS = get("minecraft:chiseled_stone_bricks");
@Nullable public static final BlockType CHISELED_TUFF = get("minecraft:chiseled_tuff");
@Nullable public static final BlockType CHISELED_TUFF_BRICKS = get("minecraft:chiseled_tuff_bricks");
@Nullable public static final BlockType CHORUS_FLOWER = get("minecraft:chorus_flower");
@Nullable public static final BlockType CHORUS_PLANT = get("minecraft:chorus_plant");
@Nullable public static final BlockType CLAY = get("minecraft:clay");
@ -240,13 +243,18 @@ public final class BlockTypes {
@Nullable public static final BlockType COMPOSTER = get("minecraft:composter");
@Nullable public static final BlockType CONDUIT = get("minecraft:conduit");
@Nullable public static final BlockType COPPER_BLOCK = get("minecraft:copper_block");
@Nullable public static final BlockType COPPER_BULB = get("minecraft:copper_bulb");
@Nullable public static final BlockType COPPER_DOOR = get("minecraft:copper_door");
@Nullable public static final BlockType COPPER_GRATE = get("minecraft:copper_grate");
@Nullable public static final BlockType COPPER_ORE = get("minecraft:copper_ore");
@Nullable public static final BlockType COPPER_TRAPDOOR = get("minecraft:copper_trapdoor");
@Nullable public static final BlockType CORNFLOWER = get("minecraft:cornflower");
@Nullable public static final BlockType CRACKED_DEEPSLATE_BRICKS = get("minecraft:cracked_deepslate_bricks");
@Nullable public static final BlockType CRACKED_DEEPSLATE_TILES = get("minecraft:cracked_deepslate_tiles");
@Nullable public static final BlockType CRACKED_NETHER_BRICKS = get("minecraft:cracked_nether_bricks");
@Nullable public static final BlockType CRACKED_POLISHED_BLACKSTONE_BRICKS = get("minecraft:cracked_polished_blackstone_bricks");
@Nullable public static final BlockType CRACKED_STONE_BRICKS = get("minecraft:cracked_stone_bricks");
@Nullable public static final BlockType CRAFTER = get("minecraft:crafter");
@Nullable public static final BlockType CRAFTING_TABLE = get("minecraft:crafting_table");
@Nullable public static final BlockType CREEPER_HEAD = get("minecraft:creeper_head");
@Nullable public static final BlockType CREEPER_WALL_HEAD = get("minecraft:creeper_wall_head");
@ -381,7 +389,12 @@ public final class BlockTypes {
@Nullable public static final BlockType END_STONE_BRICK_WALL = get("minecraft:end_stone_brick_wall");
@Nullable public static final BlockType END_STONE_BRICKS = get("minecraft:end_stone_bricks");
@Nullable public static final BlockType ENDER_CHEST = get("minecraft:ender_chest");
@Nullable public static final BlockType EXPOSED_CHISELED_COPPER = get("minecraft:exposed_chiseled_copper");
@Nullable public static final BlockType EXPOSED_COPPER = get("minecraft:exposed_copper");
@Nullable public static final BlockType EXPOSED_COPPER_BULB = get("minecraft:exposed_copper_bulb");
@Nullable public static final BlockType EXPOSED_COPPER_DOOR = get("minecraft:exposed_copper_door");
@Nullable public static final BlockType EXPOSED_COPPER_GRATE = get("minecraft:exposed_copper_grate");
@Nullable public static final BlockType EXPOSED_COPPER_TRAPDOOR = get("minecraft:exposed_copper_trapdoor");
@Nullable public static final BlockType EXPOSED_CUT_COPPER = get("minecraft:exposed_cut_copper");
@Nullable public static final BlockType EXPOSED_CUT_COPPER_SLAB = get("minecraft:exposed_cut_copper_slab");
@Nullable public static final BlockType EXPOSED_CUT_COPPER_STAIRS = get("minecraft:exposed_cut_copper_stairs");
@ -410,7 +423,7 @@ public final class BlockTypes {
@Nullable public static final BlockType GRANITE_SLAB = get("minecraft:granite_slab");
@Nullable public static final BlockType GRANITE_STAIRS = get("minecraft:granite_stairs");
@Nullable public static final BlockType GRANITE_WALL = get("minecraft:granite_wall");
@Nullable public static final BlockType GRASS = get("minecraft:grass");
@Deprecated @Nullable public static final BlockType GRASS = get("minecraft:grass");
@Nullable public static final BlockType GRASS_BLOCK = get("minecraft:grass_block");
@Deprecated @Nullable public static final BlockType GRASS_PATH = get("minecraft:grass_path");
@Nullable public static final BlockType GRAVEL = get("minecraft:gravel");
@ -653,7 +666,12 @@ public final class BlockTypes {
@Nullable public static final BlockType ORANGE_WALL_BANNER = get("minecraft:orange_wall_banner");
@Nullable public static final BlockType ORANGE_WOOL = get("minecraft:orange_wool");
@Nullable public static final BlockType OXEYE_DAISY = get("minecraft:oxeye_daisy");
@Nullable public static final BlockType OXIDIZED_CHISELED_COPPER = get("minecraft:oxidized_chiseled_copper");
@Nullable public static final BlockType OXIDIZED_COPPER = get("minecraft:oxidized_copper");
@Nullable public static final BlockType OXIDIZED_COPPER_BULB = get("minecraft:oxidized_copper_bulb");
@Nullable public static final BlockType OXIDIZED_COPPER_DOOR = get("minecraft:oxidized_copper_door");
@Nullable public static final BlockType OXIDIZED_COPPER_GRATE = get("minecraft:oxidized_copper_grate");
@Nullable public static final BlockType OXIDIZED_COPPER_TRAPDOOR = get("minecraft:oxidized_copper_trapdoor");
@Nullable public static final BlockType OXIDIZED_CUT_COPPER = get("minecraft:oxidized_cut_copper");
@Nullable public static final BlockType OXIDIZED_CUT_COPPER_SLAB = get("minecraft:oxidized_cut_copper_slab");
@Nullable public static final BlockType OXIDIZED_CUT_COPPER_STAIRS = get("minecraft:oxidized_cut_copper_stairs");
@ -712,6 +730,10 @@ public final class BlockTypes {
@Nullable public static final BlockType POLISHED_GRANITE = get("minecraft:polished_granite");
@Nullable public static final BlockType POLISHED_GRANITE_SLAB = get("minecraft:polished_granite_slab");
@Nullable public static final BlockType POLISHED_GRANITE_STAIRS = get("minecraft:polished_granite_stairs");
@Nullable public static final BlockType POLISHED_TUFF = get("minecraft:polished_tuff");
@Nullable public static final BlockType POLISHED_TUFF_SLAB = get("minecraft:polished_tuff_slab");
@Nullable public static final BlockType POLISHED_TUFF_STAIRS = get("minecraft:polished_tuff_stairs");
@Nullable public static final BlockType POLISHED_TUFF_WALL = get("minecraft:polished_tuff_wall");
@Nullable public static final BlockType POPPY = get("minecraft:poppy");
@Nullable public static final BlockType POTATOES = get("minecraft:potatoes");
@Nullable public static final BlockType POTTED_ACACIA_SAPLING = get("minecraft:potted_acacia_sapling");
@ -839,6 +861,7 @@ public final class BlockTypes {
@Nullable public static final BlockType SEA_LANTERN = get("minecraft:sea_lantern");
@Nullable public static final BlockType SEA_PICKLE = get("minecraft:sea_pickle");
@Nullable public static final BlockType SEAGRASS = get("minecraft:seagrass");
@Nullable public static final BlockType SHORT_GRASS = get("minecraft:short_grass");
@Nullable public static final BlockType SHROOMLIGHT = get("minecraft:shroomlight");
@Nullable public static final BlockType SHULKER_BOX = get("minecraft:shulker_box");
@Deprecated @Nullable public static final BlockType SIGN = get("minecraft:sign");
@ -940,6 +963,7 @@ public final class BlockTypes {
@Nullable public static final BlockType TORCHFLOWER = get("minecraft:torchflower");
@Nullable public static final BlockType TORCHFLOWER_CROP = get("minecraft:torchflower_crop");
@Nullable public static final BlockType TRAPPED_CHEST = get("minecraft:trapped_chest");
@Nullable public static final BlockType TRIAL_SPAWNER = get("minecraft:trial_spawner");
@Nullable public static final BlockType TRIPWIRE = get("minecraft:tripwire");
@Nullable public static final BlockType TRIPWIRE_HOOK = get("minecraft:tripwire_hook");
@Nullable public static final BlockType TUBE_CORAL = get("minecraft:tube_coral");
@ -947,6 +971,13 @@ public final class BlockTypes {
@Nullable public static final BlockType TUBE_CORAL_FAN = get("minecraft:tube_coral_fan");
@Nullable public static final BlockType TUBE_CORAL_WALL_FAN = get("minecraft:tube_coral_wall_fan");
@Nullable public static final BlockType TUFF = get("minecraft:tuff");
@Nullable public static final BlockType TUFF_BRICK_SLAB = get("minecraft:tuff_brick_slab");
@Nullable public static final BlockType TUFF_BRICK_STAIRS = get("minecraft:tuff_brick_stairs");
@Nullable public static final BlockType TUFF_BRICK_WALL = get("minecraft:tuff_brick_wall");
@Nullable public static final BlockType TUFF_BRICKS = get("minecraft:tuff_bricks");
@Nullable public static final BlockType TUFF_SLAB = get("minecraft:tuff_slab");
@Nullable public static final BlockType TUFF_STAIRS = get("minecraft:tuff_stairs");
@Nullable public static final BlockType TUFF_WALL = get("minecraft:tuff_wall");
@Nullable public static final BlockType TURTLE_EGG = get("minecraft:turtle_egg");
@Nullable public static final BlockType TWISTING_VINES = get("minecraft:twisting_vines");
@Nullable public static final BlockType TWISTING_VINES_PLANT = get("minecraft:twisting_vines_plant");
@ -976,23 +1007,48 @@ public final class BlockTypes {
@Nullable public static final BlockType WARPED_WART_BLOCK = get("minecraft:warped_wart_block");
@Nullable public static final BlockType WATER = get("minecraft:water");
@Nullable public static final BlockType WATER_CAULDRON = get("minecraft:water_cauldron");
@Nullable public static final BlockType WAXED_CHISELED_COPPER = get("minecraft:waxed_chiseled_copper");
@Nullable public static final BlockType WAXED_COPPER_BLOCK = get("minecraft:waxed_copper_block");
@Nullable public static final BlockType WAXED_COPPER_BULB = get("minecraft:waxed_copper_bulb");
@Nullable public static final BlockType WAXED_COPPER_DOOR = get("minecraft:waxed_copper_door");
@Nullable public static final BlockType WAXED_COPPER_GRATE = get("minecraft:waxed_copper_grate");
@Nullable public static final BlockType WAXED_COPPER_TRAPDOOR = get("minecraft:waxed_copper_trapdoor");
@Nullable public static final BlockType WAXED_CUT_COPPER = get("minecraft:waxed_cut_copper");
@Nullable public static final BlockType WAXED_CUT_COPPER_SLAB = get("minecraft:waxed_cut_copper_slab");
@Nullable public static final BlockType WAXED_CUT_COPPER_STAIRS = get("minecraft:waxed_cut_copper_stairs");
@Nullable public static final BlockType WAXED_EXPOSED_CHISELED_COPPER = get("minecraft:waxed_exposed_chiseled_copper");
@Nullable public static final BlockType WAXED_EXPOSED_COPPER = get("minecraft:waxed_exposed_copper");
@Nullable public static final BlockType WAXED_EXPOSED_COPPER_BULB = get("minecraft:waxed_exposed_copper_bulb");
@Nullable public static final BlockType WAXED_EXPOSED_COPPER_DOOR = get("minecraft:waxed_exposed_copper_door");
@Nullable public static final BlockType WAXED_EXPOSED_COPPER_GRATE = get("minecraft:waxed_exposed_copper_grate");
@Nullable public static final BlockType WAXED_EXPOSED_COPPER_TRAPDOOR = get("minecraft:waxed_exposed_copper_trapdoor");
@Nullable public static final BlockType WAXED_EXPOSED_CUT_COPPER = get("minecraft:waxed_exposed_cut_copper");
@Nullable public static final BlockType WAXED_EXPOSED_CUT_COPPER_SLAB = get("minecraft:waxed_exposed_cut_copper_slab");
@Nullable public static final BlockType WAXED_EXPOSED_CUT_COPPER_STAIRS = get("minecraft:waxed_exposed_cut_copper_stairs");
@Nullable public static final BlockType WAXED_OXIDIZED_CHISELED_COPPER = get("minecraft:waxed_oxidized_chiseled_copper");
@Nullable public static final BlockType WAXED_OXIDIZED_COPPER = get("minecraft:waxed_oxidized_copper");
@Nullable public static final BlockType WAXED_OXIDIZED_COPPER_BULB = get("minecraft:waxed_oxidized_copper_bulb");
@Nullable public static final BlockType WAXED_OXIDIZED_COPPER_DOOR = get("minecraft:waxed_oxidized_copper_door");
@Nullable public static final BlockType WAXED_OXIDIZED_COPPER_GRATE = get("minecraft:waxed_oxidized_copper_grate");
@Nullable public static final BlockType WAXED_OXIDIZED_COPPER_TRAPDOOR = get("minecraft:waxed_oxidized_copper_trapdoor");
@Nullable public static final BlockType WAXED_OXIDIZED_CUT_COPPER = get("minecraft:waxed_oxidized_cut_copper");
@Nullable public static final BlockType WAXED_OXIDIZED_CUT_COPPER_SLAB = get("minecraft:waxed_oxidized_cut_copper_slab");
@Nullable public static final BlockType WAXED_OXIDIZED_CUT_COPPER_STAIRS = get("minecraft:waxed_oxidized_cut_copper_stairs");
@Nullable public static final BlockType WAXED_WEATHERED_CHISELED_COPPER = get("minecraft:waxed_weathered_chiseled_copper");
@Nullable public static final BlockType WAXED_WEATHERED_COPPER = get("minecraft:waxed_weathered_copper");
@Nullable public static final BlockType WAXED_WEATHERED_COPPER_BULB = get("minecraft:waxed_weathered_copper_bulb");
@Nullable public static final BlockType WAXED_WEATHERED_COPPER_DOOR = get("minecraft:waxed_weathered_copper_door");
@Nullable public static final BlockType WAXED_WEATHERED_COPPER_GRATE = get("minecraft:waxed_weathered_copper_grate");
@Nullable public static final BlockType WAXED_WEATHERED_COPPER_TRAPDOOR = get("minecraft:waxed_weathered_copper_trapdoor");
@Nullable public static final BlockType WAXED_WEATHERED_CUT_COPPER = get("minecraft:waxed_weathered_cut_copper");
@Nullable public static final BlockType WAXED_WEATHERED_CUT_COPPER_SLAB = get("minecraft:waxed_weathered_cut_copper_slab");
@Nullable public static final BlockType WAXED_WEATHERED_CUT_COPPER_STAIRS = get("minecraft:waxed_weathered_cut_copper_stairs");
@Nullable public static final BlockType WEATHERED_CHISELED_COPPER = get("minecraft:weathered_chiseled_copper");
@Nullable public static final BlockType WEATHERED_COPPER = get("minecraft:weathered_copper");
@Nullable public static final BlockType WEATHERED_COPPER_BULB = get("minecraft:weathered_copper_bulb");
@Nullable public static final BlockType WEATHERED_COPPER_DOOR = get("minecraft:weathered_copper_door");
@Nullable public static final BlockType WEATHERED_COPPER_GRATE = get("minecraft:weathered_copper_grate");
@Nullable public static final BlockType WEATHERED_COPPER_TRAPDOOR = get("minecraft:weathered_copper_trapdoor");
@Nullable public static final BlockType WEATHERED_CUT_COPPER = get("minecraft:weathered_cut_copper");
@Nullable public static final BlockType WEATHERED_CUT_COPPER_SLAB = get("minecraft:weathered_cut_copper_slab");
@Nullable public static final BlockType WEATHERED_CUT_COPPER_STAIRS = get("minecraft:weathered_cut_copper_stairs");

View File

@ -38,6 +38,7 @@ public final class EntityTypes {
@Nullable public static final EntityType BLAZE = get("minecraft:blaze");
@Nullable public static final EntityType BLOCK_DISPLAY = get("minecraft:block_display");
@Nullable public static final EntityType BOAT = get("minecraft:boat");
@Nullable public static final EntityType BREEZE = get("minecraft:breeze");
@Nullable public static final EntityType CAMEL = get("minecraft:camel");
@Nullable public static final EntityType CAT = get("minecraft:cat");
@Nullable public static final EntityType CAVE_SPIDER = get("minecraft:cave_spider");
@ -142,6 +143,7 @@ public final class EntityTypes {
@Nullable public static final EntityType VINDICATOR = get("minecraft:vindicator");
@Nullable public static final EntityType WANDERING_TRADER = get("minecraft:wandering_trader");
@Nullable public static final EntityType WARDEN = get("minecraft:warden");
@Nullable public static final EntityType WIND_CHARGE = get("minecraft:wind_charge");
@Nullable public static final EntityType WITCH = get("minecraft:witch");
@Nullable public static final EntityType WITHER = get("minecraft:wither");
@Nullable public static final EntityType WITHER_SKELETON = get("minecraft:wither_skeleton");

View File

@ -168,6 +168,7 @@ public final class ItemTypes {
@Nullable public static final ItemType BRAIN_CORAL_BLOCK = get("minecraft:brain_coral_block");
@Nullable public static final ItemType BRAIN_CORAL_FAN = get("minecraft:brain_coral_fan");
@Nullable public static final ItemType BREAD = get("minecraft:bread");
@Nullable public static final ItemType BREEZE_SPAWN_EGG = get("minecraft:breeze_spawn_egg");
@Nullable public static final ItemType BREWER_POTTERY_SHERD = get("minecraft:brewer_pottery_sherd");
@Nullable public static final ItemType BREWING_STAND = get("minecraft:brewing_stand");
@Nullable public static final ItemType BRICK = get("minecraft:brick");
@ -243,6 +244,7 @@ public final class ItemTypes {
@Nullable public static final ItemType CHICKEN_SPAWN_EGG = get("minecraft:chicken_spawn_egg");
@Nullable public static final ItemType CHIPPED_ANVIL = get("minecraft:chipped_anvil");
@Nullable public static final ItemType CHISELED_BOOKSHELF = get("minecraft:chiseled_bookshelf");
@Nullable public static final ItemType CHISELED_COPPER = get("minecraft:chiseled_copper");
@Nullable public static final ItemType CHISELED_DEEPSLATE = get("minecraft:chiseled_deepslate");
@Nullable public static final ItemType CHISELED_NETHER_BRICKS = get("minecraft:chiseled_nether_bricks");
@Nullable public static final ItemType CHISELED_POLISHED_BLACKSTONE = get("minecraft:chiseled_polished_blackstone");
@ -250,6 +252,8 @@ public final class ItemTypes {
@Nullable public static final ItemType CHISELED_RED_SANDSTONE = get("minecraft:chiseled_red_sandstone");
@Nullable public static final ItemType CHISELED_SANDSTONE = get("minecraft:chiseled_sandstone");
@Nullable public static final ItemType CHISELED_STONE_BRICKS = get("minecraft:chiseled_stone_bricks");
@Nullable public static final ItemType CHISELED_TUFF = get("minecraft:chiseled_tuff");
@Nullable public static final ItemType CHISELED_TUFF_BRICKS = get("minecraft:chiseled_tuff_bricks");
@Nullable public static final ItemType CHORUS_FLOWER = get("minecraft:chorus_flower");
@Nullable public static final ItemType CHORUS_FRUIT = get("minecraft:chorus_fruit");
@Nullable public static final ItemType CHORUS_PLANT = get("minecraft:chorus_plant");
@ -289,8 +293,12 @@ public final class ItemTypes {
@Nullable public static final ItemType COOKED_SALMON = get("minecraft:cooked_salmon");
@Nullable public static final ItemType COOKIE = get("minecraft:cookie");
@Nullable public static final ItemType COPPER_BLOCK = get("minecraft:copper_block");
@Nullable public static final ItemType COPPER_BULB = get("minecraft:copper_bulb");
@Nullable public static final ItemType COPPER_DOOR = get("minecraft:copper_door");
@Nullable public static final ItemType COPPER_GRATE = get("minecraft:copper_grate");
@Nullable public static final ItemType COPPER_INGOT = get("minecraft:copper_ingot");
@Nullable public static final ItemType COPPER_ORE = get("minecraft:copper_ore");
@Nullable public static final ItemType COPPER_TRAPDOOR = get("minecraft:copper_trapdoor");
@Nullable public static final ItemType CORNFLOWER = get("minecraft:cornflower");
@Nullable public static final ItemType COW_SPAWN_EGG = get("minecraft:cow_spawn_egg");
@Nullable public static final ItemType CRACKED_DEEPSLATE_BRICKS = get("minecraft:cracked_deepslate_bricks");
@ -298,6 +306,7 @@ public final class ItemTypes {
@Nullable public static final ItemType CRACKED_NETHER_BRICKS = get("minecraft:cracked_nether_bricks");
@Nullable public static final ItemType CRACKED_POLISHED_BLACKSTONE_BRICKS = get("minecraft:cracked_polished_blackstone_bricks");
@Nullable public static final ItemType CRACKED_STONE_BRICKS = get("minecraft:cracked_stone_bricks");
@Nullable public static final ItemType CRAFTER = get("minecraft:crafter");
@Nullable public static final ItemType CRAFTING_TABLE = get("minecraft:crafting_table");
@Nullable public static final ItemType CREEPER_BANNER_PATTERN = get("minecraft:creeper_banner_pattern");
@Nullable public static final ItemType CREEPER_HEAD = get("minecraft:creeper_head");
@ -460,7 +469,12 @@ public final class ItemTypes {
@Nullable public static final ItemType EVOKER_SPAWN_EGG = get("minecraft:evoker_spawn_egg");
@Nullable public static final ItemType EXPERIENCE_BOTTLE = get("minecraft:experience_bottle");
@Nullable public static final ItemType EXPLORER_POTTERY_SHERD = get("minecraft:explorer_pottery_sherd");
@Nullable public static final ItemType EXPOSED_CHISELED_COPPER = get("minecraft:exposed_chiseled_copper");
@Nullable public static final ItemType EXPOSED_COPPER = get("minecraft:exposed_copper");
@Nullable public static final ItemType EXPOSED_COPPER_BULB = get("minecraft:exposed_copper_bulb");
@Nullable public static final ItemType EXPOSED_COPPER_DOOR = get("minecraft:exposed_copper_door");
@Nullable public static final ItemType EXPOSED_COPPER_GRATE = get("minecraft:exposed_copper_grate");
@Nullable public static final ItemType EXPOSED_COPPER_TRAPDOOR = get("minecraft:exposed_copper_trapdoor");
@Nullable public static final ItemType EXPOSED_CUT_COPPER = get("minecraft:exposed_cut_copper");
@Nullable public static final ItemType EXPOSED_CUT_COPPER_SLAB = get("minecraft:exposed_cut_copper_slab");
@Nullable public static final ItemType EXPOSED_CUT_COPPER_STAIRS = get("minecraft:exposed_cut_copper_stairs");
@ -527,7 +541,7 @@ public final class ItemTypes {
@Nullable public static final ItemType GRANITE_SLAB = get("minecraft:granite_slab");
@Nullable public static final ItemType GRANITE_STAIRS = get("minecraft:granite_stairs");
@Nullable public static final ItemType GRANITE_WALL = get("minecraft:granite_wall");
@Nullable public static final ItemType GRASS = get("minecraft:grass");
@Deprecated @Nullable public static final ItemType GRASS = get("minecraft:grass");
@Nullable public static final ItemType GRASS_BLOCK = get("minecraft:grass_block");
@Deprecated @Nullable public static final ItemType GRASS_PATH = get("minecraft:grass_path");
@Nullable public static final ItemType GRAVEL = get("minecraft:gravel");
@ -843,7 +857,12 @@ public final class ItemTypes {
@Nullable public static final ItemType ORANGE_TULIP = get("minecraft:orange_tulip");
@Nullable public static final ItemType ORANGE_WOOL = get("minecraft:orange_wool");
@Nullable public static final ItemType OXEYE_DAISY = get("minecraft:oxeye_daisy");
@Nullable public static final ItemType OXIDIZED_CHISELED_COPPER = get("minecraft:oxidized_chiseled_copper");
@Nullable public static final ItemType OXIDIZED_COPPER = get("minecraft:oxidized_copper");
@Nullable public static final ItemType OXIDIZED_COPPER_BULB = get("minecraft:oxidized_copper_bulb");
@Nullable public static final ItemType OXIDIZED_COPPER_DOOR = get("minecraft:oxidized_copper_door");
@Nullable public static final ItemType OXIDIZED_COPPER_GRATE = get("minecraft:oxidized_copper_grate");
@Nullable public static final ItemType OXIDIZED_COPPER_TRAPDOOR = get("minecraft:oxidized_copper_trapdoor");
@Nullable public static final ItemType OXIDIZED_CUT_COPPER = get("minecraft:oxidized_cut_copper");
@Nullable public static final ItemType OXIDIZED_CUT_COPPER_SLAB = get("minecraft:oxidized_cut_copper_slab");
@Nullable public static final ItemType OXIDIZED_CUT_COPPER_STAIRS = get("minecraft:oxidized_cut_copper_stairs");
@ -912,6 +931,10 @@ public final class ItemTypes {
@Nullable public static final ItemType POLISHED_GRANITE = get("minecraft:polished_granite");
@Nullable public static final ItemType POLISHED_GRANITE_SLAB = get("minecraft:polished_granite_slab");
@Nullable public static final ItemType POLISHED_GRANITE_STAIRS = get("minecraft:polished_granite_stairs");
@Nullable public static final ItemType POLISHED_TUFF = get("minecraft:polished_tuff");
@Nullable public static final ItemType POLISHED_TUFF_SLAB = get("minecraft:polished_tuff_slab");
@Nullable public static final ItemType POLISHED_TUFF_STAIRS = get("minecraft:polished_tuff_stairs");
@Nullable public static final ItemType POLISHED_TUFF_WALL = get("minecraft:polished_tuff_wall");
@Nullable public static final ItemType POPPED_CHORUS_FRUIT = get("minecraft:popped_chorus_fruit");
@Nullable public static final ItemType POPPY = get("minecraft:poppy");
@Nullable public static final ItemType PORKCHOP = get("minecraft:porkchop");
@ -1038,6 +1061,7 @@ public final class ItemTypes {
@Nullable public static final ItemType SHEEP_SPAWN_EGG = get("minecraft:sheep_spawn_egg");
@Nullable public static final ItemType SHELTER_POTTERY_SHERD = get("minecraft:shelter_pottery_sherd");
@Nullable public static final ItemType SHIELD = get("minecraft:shield");
@Nullable public static final ItemType SHORT_GRASS = get("minecraft:short_grass");
@Nullable public static final ItemType SHROOMLIGHT = get("minecraft:shroomlight");
@Nullable public static final ItemType SHULKER_BOX = get("minecraft:shulker_box");
@Nullable public static final ItemType SHULKER_SHELL = get("minecraft:shulker_shell");
@ -1175,6 +1199,8 @@ public final class ItemTypes {
@Nullable public static final ItemType TOTEM_OF_UNDYING = get("minecraft:totem_of_undying");
@Nullable public static final ItemType TRADER_LLAMA_SPAWN_EGG = get("minecraft:trader_llama_spawn_egg");
@Nullable public static final ItemType TRAPPED_CHEST = get("minecraft:trapped_chest");
@Nullable public static final ItemType TRIAL_KEY = get("minecraft:trial_key");
@Nullable public static final ItemType TRIAL_SPAWNER = get("minecraft:trial_spawner");
@Nullable public static final ItemType TRIDENT = get("minecraft:trident");
@Nullable public static final ItemType TRIPWIRE_HOOK = get("minecraft:tripwire_hook");
@Nullable public static final ItemType TROPICAL_FISH = get("minecraft:tropical_fish");
@ -1184,6 +1210,13 @@ public final class ItemTypes {
@Nullable public static final ItemType TUBE_CORAL_BLOCK = get("minecraft:tube_coral_block");
@Nullable public static final ItemType TUBE_CORAL_FAN = get("minecraft:tube_coral_fan");
@Nullable public static final ItemType TUFF = get("minecraft:tuff");
@Nullable public static final ItemType TUFF_BRICK_SLAB = get("minecraft:tuff_brick_slab");
@Nullable public static final ItemType TUFF_BRICK_STAIRS = get("minecraft:tuff_brick_stairs");
@Nullable public static final ItemType TUFF_BRICK_WALL = get("minecraft:tuff_brick_wall");
@Nullable public static final ItemType TUFF_BRICKS = get("minecraft:tuff_bricks");
@Nullable public static final ItemType TUFF_SLAB = get("minecraft:tuff_slab");
@Nullable public static final ItemType TUFF_STAIRS = get("minecraft:tuff_stairs");
@Nullable public static final ItemType TUFF_WALL = get("minecraft:tuff_wall");
@Nullable public static final ItemType TURTLE_EGG = get("minecraft:turtle_egg");
@Nullable public static final ItemType TURTLE_HELMET = get("minecraft:turtle_helmet");
@Nullable public static final ItemType TURTLE_SPAWN_EGG = get("minecraft:turtle_spawn_egg");
@ -1216,24 +1249,49 @@ public final class ItemTypes {
@Nullable public static final ItemType WARPED_TRAPDOOR = get("minecraft:warped_trapdoor");
@Nullable public static final ItemType WARPED_WART_BLOCK = get("minecraft:warped_wart_block");
@Nullable public static final ItemType WATER_BUCKET = get("minecraft:water_bucket");
@Nullable public static final ItemType WAXED_CHISELED_COPPER = get("minecraft:waxed_chiseled_copper");
@Nullable public static final ItemType WAXED_COPPER_BLOCK = get("minecraft:waxed_copper_block");
@Nullable public static final ItemType WAXED_COPPER_BULB = get("minecraft:waxed_copper_bulb");
@Nullable public static final ItemType WAXED_COPPER_DOOR = get("minecraft:waxed_copper_door");
@Nullable public static final ItemType WAXED_COPPER_GRATE = get("minecraft:waxed_copper_grate");
@Nullable public static final ItemType WAXED_COPPER_TRAPDOOR = get("minecraft:waxed_copper_trapdoor");
@Nullable public static final ItemType WAXED_CUT_COPPER = get("minecraft:waxed_cut_copper");
@Nullable public static final ItemType WAXED_CUT_COPPER_SLAB = get("minecraft:waxed_cut_copper_slab");
@Nullable public static final ItemType WAXED_CUT_COPPER_STAIRS = get("minecraft:waxed_cut_copper_stairs");
@Nullable public static final ItemType WAXED_EXPOSED_CHISELED_COPPER = get("minecraft:waxed_exposed_chiseled_copper");
@Nullable public static final ItemType WAXED_EXPOSED_COPPER = get("minecraft:waxed_exposed_copper");
@Nullable public static final ItemType WAXED_EXPOSED_COPPER_BULB = get("minecraft:waxed_exposed_copper_bulb");
@Nullable public static final ItemType WAXED_EXPOSED_COPPER_DOOR = get("minecraft:waxed_exposed_copper_door");
@Nullable public static final ItemType WAXED_EXPOSED_COPPER_GRATE = get("minecraft:waxed_exposed_copper_grate");
@Nullable public static final ItemType WAXED_EXPOSED_COPPER_TRAPDOOR = get("minecraft:waxed_exposed_copper_trapdoor");
@Nullable public static final ItemType WAXED_EXPOSED_CUT_COPPER = get("minecraft:waxed_exposed_cut_copper");
@Nullable public static final ItemType WAXED_EXPOSED_CUT_COPPER_SLAB = get("minecraft:waxed_exposed_cut_copper_slab");
@Nullable public static final ItemType WAXED_EXPOSED_CUT_COPPER_STAIRS = get("minecraft:waxed_exposed_cut_copper_stairs");
@Nullable public static final ItemType WAXED_OXIDIZED_CHISELED_COPPER = get("minecraft:waxed_oxidized_chiseled_copper");
@Nullable public static final ItemType WAXED_OXIDIZED_COPPER = get("minecraft:waxed_oxidized_copper");
@Nullable public static final ItemType WAXED_OXIDIZED_COPPER_BULB = get("minecraft:waxed_oxidized_copper_bulb");
@Nullable public static final ItemType WAXED_OXIDIZED_COPPER_DOOR = get("minecraft:waxed_oxidized_copper_door");
@Nullable public static final ItemType WAXED_OXIDIZED_COPPER_GRATE = get("minecraft:waxed_oxidized_copper_grate");
@Nullable public static final ItemType WAXED_OXIDIZED_COPPER_TRAPDOOR = get("minecraft:waxed_oxidized_copper_trapdoor");
@Nullable public static final ItemType WAXED_OXIDIZED_CUT_COPPER = get("minecraft:waxed_oxidized_cut_copper");
@Nullable public static final ItemType WAXED_OXIDIZED_CUT_COPPER_SLAB = get("minecraft:waxed_oxidized_cut_copper_slab");
@Nullable public static final ItemType WAXED_OXIDIZED_CUT_COPPER_STAIRS = get("minecraft:waxed_oxidized_cut_copper_stairs");
@Nullable public static final ItemType WAXED_WEATHERED_CHISELED_COPPER = get("minecraft:waxed_weathered_chiseled_copper");
@Nullable public static final ItemType WAXED_WEATHERED_COPPER = get("minecraft:waxed_weathered_copper");
@Nullable public static final ItemType WAXED_WEATHERED_COPPER_BULB = get("minecraft:waxed_weathered_copper_bulb");
@Nullable public static final ItemType WAXED_WEATHERED_COPPER_DOOR = get("minecraft:waxed_weathered_copper_door");
@Nullable public static final ItemType WAXED_WEATHERED_COPPER_GRATE = get("minecraft:waxed_weathered_copper_grate");
@Nullable public static final ItemType WAXED_WEATHERED_COPPER_TRAPDOOR = get("minecraft:waxed_weathered_copper_trapdoor");
@Nullable public static final ItemType WAXED_WEATHERED_CUT_COPPER = get("minecraft:waxed_weathered_cut_copper");
@Nullable public static final ItemType WAXED_WEATHERED_CUT_COPPER_SLAB = get("minecraft:waxed_weathered_cut_copper_slab");
@Nullable public static final ItemType WAXED_WEATHERED_CUT_COPPER_STAIRS = get("minecraft:waxed_weathered_cut_copper_stairs");
@Nullable public static final ItemType WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE = get("minecraft:wayfinder_armor_trim_smithing_template");
@Nullable public static final ItemType WEATHERED_CHISELED_COPPER = get("minecraft:weathered_chiseled_copper");
@Nullable public static final ItemType WEATHERED_COPPER = get("minecraft:weathered_copper");
@Nullable public static final ItemType WEATHERED_COPPER_BULB = get("minecraft:weathered_copper_bulb");
@Nullable public static final ItemType WEATHERED_COPPER_DOOR = get("minecraft:weathered_copper_door");
@Nullable public static final ItemType WEATHERED_COPPER_GRATE = get("minecraft:weathered_copper_grate");
@Nullable public static final ItemType WEATHERED_COPPER_TRAPDOOR = get("minecraft:weathered_copper_trapdoor");
@Nullable public static final ItemType WEATHERED_CUT_COPPER = get("minecraft:weathered_cut_copper");
@Nullable public static final ItemType WEATHERED_CUT_COPPER_SLAB = get("minecraft:weathered_cut_copper_slab");
@Nullable public static final ItemType WEATHERED_CUT_COPPER_STAIRS = get("minecraft:weathered_cut_copper_stairs");

View File

@ -22,8 +22,8 @@ applyShadowConfiguration()
apply(plugin = "fabric-loom")
apply(plugin = "java-library")
val minecraftVersion = "1.20.2"
val loaderVersion = "0.14.22"
val minecraftVersion = "1.20.4"
val loaderVersion = "0.15.1"
val fabricApiConfiguration: Configuration = configurations.create("fabricApi")
@ -64,7 +64,7 @@ dependencies {
.toSet()
// [2] Request the matching dependency from fabric-loom
for (wantedDependency in wantedDependencies) {
val dep = project.the<FabricApiExtension>().module(wantedDependency, "0.89.1+1.20.2")
val dep = project.the<FabricApiExtension>().module(wantedDependency, "0.91.1+1.20.4")
"include"(dep)
"modImplementation"(dep)
}

View File

@ -666,8 +666,8 @@ public class FabricWorld extends AbstractWorld {
public List<? extends Entity> getEntities(Region region) {
final Level world = getWorld();
AABB box = new AABB(
FabricAdapter.toBlockPos(region.getMinimumPoint()),
FabricAdapter.toBlockPos(region.getMaximumPoint().add(BlockVector3.ONE))
FabricAdapter.toVec3(region.getMinimumPoint()),
FabricAdapter.toVec3(region.getMaximumPoint().add(BlockVector3.ONE))
);
List<net.minecraft.world.entity.Entity> nmsEntities = world.getEntities(
(net.minecraft.world.entity.Entity) null,

View File

@ -36,7 +36,7 @@ import java.nio.file.Path;
public abstract class MixinMinecraftServer implements Watchdog, ExtendedMinecraftServer {
@Shadow
private long nextTickTime;
private long nextTickTimeNanos;
@Final
@Shadow
protected LevelStorageSource.LevelStorageAccess storageSource;
@ -44,7 +44,7 @@ public abstract class MixinMinecraftServer implements Watchdog, ExtendedMinecraf
@Unique
@Override
public void tick() {
nextTickTime = Util.getMillis();
nextTickTimeNanos = Util.getNanos();
}
@Unique

View File

@ -12,11 +12,11 @@ plugins {
applyPlatformAndCoreConfiguration(javaRelease = 17)
applyShadowConfiguration()
val minecraftVersion = "1.20.2"
val minecraftVersion = "1.20.4"
val nextMajorMinecraftVersion: String = minecraftVersion.split('.').let { (useless, major) ->
"$useless.${major.toInt() + 1}"
}
val forgeVersion = "48.0.20"
val forgeVersion = "49.0.3"
val apiClasspath = configurations.create("apiClasspath") {
isCanBeResolved = true

View File

@ -33,6 +33,6 @@ class ForgeWatchdog implements Watchdog {
@Override
public void tick() {
server.nextTickTime = Util.getMillis();
server.nextTickTimeNanos = Util.getNanos();
}
}

View File

@ -653,8 +653,8 @@ public class ForgeWorld extends AbstractWorld {
public List<? extends Entity> getEntities(Region region) {
final ServerLevel world = getWorld();
AABB box = new AABB(
ForgeAdapter.toBlockPos(region.getMinimumPoint()),
ForgeAdapter.toBlockPos(region.getMaximumPoint().add(BlockVector3.ONE))
ForgeAdapter.toVec3(region.getMinimumPoint()),
ForgeAdapter.toVec3(region.getMaximumPoint().add(BlockVector3.ONE))
);
List<net.minecraft.world.entity.Entity> nmsEntities = world.getEntities(
(net.minecraft.world.entity.Entity) null,

View File

@ -1,4 +1,4 @@
public net.minecraft.server.MinecraftServer f_129726_ # nextTickTime
public net.minecraft.server.MinecraftServer f_302313_ # nextTickTimeNanos
# For regen
public net.minecraft.server.MinecraftServer f_129744_ # storageSource