Skip to content

Commit 4cb05bb

Browse files
committed
[NeoForge] Pre 3
1 parent d5e65c4 commit 4cb05bb

9 files changed

Lines changed: 53 additions & 207 deletions

File tree

gradle/libs.versions.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ errorprone = "2.48.0"
1515

1616
fabric-api = "0.143.14+26.1"
1717

18-
neogradle = "7.1.20"
19-
neoforge-minecraft = "1.21.11"
18+
neogradle = "7.1.21"
19+
neoforge-minecraft = "26.1"
2020

2121
sponge-minecraft = "1.21.11"
2222
# https://repo.spongepowered.org/service/rest/repository/browse/maven-public/org/spongepowered/spongeapi/
@@ -98,7 +98,7 @@ fabric-minecraft = "com.mojang:minecraft:26.1-pre-3"
9898
fabric-loader = "net.fabricmc:fabric-loader:0.18.4"
9999
fabric-permissions-api = "me.lucko:fabric-permissions-api:0.6.1"
100100

101-
neoforge = "net.neoforged:neoforge:21.11.38-beta"
101+
neoforge = "net.neoforged:neoforge:26.1.0.0-alpha.15+pre-3"
102102

103103
# Mojang-provided libraries, CHECK AGAINST MINECRAFT for versions
104104
guava = "com.google.guava:guava:33.5.0-jre!!"

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/NeoForgeFakePlayer.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package com.sk89q.worldedit.neoforge;
2121

2222
import com.mojang.authlib.GameProfile;
23-
import net.minecraft.network.chat.Component;
2423
import net.minecraft.server.level.ClientInformation;
2524
import net.minecraft.server.level.ParticleStatus;
2625
import net.minecraft.server.level.ServerLevel;
@@ -56,9 +55,4 @@ public void awardStat(Stat<?> stat, int incrementer) {
5655
@Override
5756
public void awardStat(Stat<?> stat) {
5857
}
59-
60-
@Override
61-
public void displayClientMessage(Component message, boolean actionBar) {
62-
super.displayClientMessage(message, actionBar);
63-
}
6458
}

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/NeoForgePlatform.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package com.sk89q.worldedit.neoforge;
2121

22-
import com.google.common.collect.Iterables;
2322
import com.google.common.collect.Sets;
2423
import com.sk89q.worldedit.WorldEdit;
2524
import com.sk89q.worldedit.command.util.PermissionCondition;
@@ -29,7 +28,6 @@
2928
import com.sk89q.worldedit.extension.platform.Capability;
3029
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
3130
import com.sk89q.worldedit.extension.platform.Preference;
32-
import com.sk89q.worldedit.neoforge.internal.ExtendedChunk;
3331
import com.sk89q.worldedit.util.SideEffect;
3432
import com.sk89q.worldedit.util.io.ResourceLoader;
3533
import com.sk89q.worldedit.world.DataFixer;
@@ -44,7 +42,6 @@
4442
import net.minecraft.server.level.ServerLevel;
4543
import net.minecraft.server.level.ServerPlayer;
4644
import net.minecraft.server.players.PlayerList;
47-
import net.minecraft.world.level.chunk.LevelChunk;
4845
import net.minecraft.world.level.storage.ServerLevelData;
4946
import net.neoforged.neoforge.server.ServerLifecycleHooks;
5047
import org.enginehub.piston.Command;
@@ -222,23 +219,17 @@ public Map<Capability, Preference> getCapabilities() {
222219
return capabilities;
223220
}
224221

225-
private static final Set<SideEffect> SUPPORTED_SIDE_EFFECTS_NO_MIXIN = Sets.immutableEnumSet(
222+
private static final Set<SideEffect> SUPPORTED_SIDE_EFFECTS = Sets.immutableEnumSet(
226223
SideEffect.VALIDATION,
227224
SideEffect.ENTITY_AI,
228225
SideEffect.LIGHTING,
229226
SideEffect.NEIGHBORS,
230-
SideEffect.EVENTS
231-
);
232-
233-
private static final Set<SideEffect> SUPPORTED_SIDE_EFFECTS = Sets.immutableEnumSet(
234-
Iterables.concat(SUPPORTED_SIDE_EFFECTS_NO_MIXIN, Collections.singleton(SideEffect.UPDATE))
227+
SideEffect.UPDATE
235228
);
236229

237230
@Override
238231
public Set<SideEffect> getSupportedSideEffects() {
239-
return ExtendedChunk.class.isAssignableFrom(LevelChunk.class)
240-
? SUPPORTED_SIDE_EFFECTS
241-
: SUPPORTED_SIDE_EFFECTS_NO_MIXIN;
232+
return SUPPORTED_SIDE_EFFECTS;
242233
}
243234

244235
@Override

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/NeoForgeWorld.java

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,13 @@
9797
import net.minecraft.world.level.chunk.PalettedContainer;
9898
import net.minecraft.world.level.chunk.status.ChunkStatus;
9999
import net.minecraft.world.level.dimension.LevelStem;
100-
import net.minecraft.world.level.levelgen.WorldOptions;
101100
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
102101
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
103102
import net.minecraft.world.level.levelgen.structure.BoundingBox;
104103
import net.minecraft.world.level.levelgen.structure.Structure;
105104
import net.minecraft.world.level.levelgen.structure.StructureStart;
106-
import net.minecraft.world.level.storage.LevelData;
105+
import net.minecraft.world.level.saveddata.WeatherData;
107106
import net.minecraft.world.level.storage.LevelStorageSource;
108-
import net.minecraft.world.level.storage.PrimaryLevelData;
109107
import net.minecraft.world.level.storage.ServerLevelData;
110108
import net.minecraft.world.level.storage.TagValueOutput;
111109
import net.minecraft.world.phys.AABB;
@@ -122,7 +120,6 @@
122120
import java.util.Map;
123121
import java.util.Objects;
124122
import java.util.Optional;
125-
import java.util.OptionalLong;
126123
import java.util.Set;
127124
import java.util.concurrent.CompletableFuture;
128125
import java.util.concurrent.ExecutionException;
@@ -313,6 +310,10 @@ public boolean canPlaceAt(BlockVector3 position, BlockState blockState) {
313310

314311
@Override
315312
public boolean regenerate(Region region, Extent extent, RegenOptions options) {
313+
if (options.getSeed().isPresent()) {
314+
throw new UnsupportedOperationException("26.1+ worldgen does not support overriding the seed for regen");
315+
}
316+
316317
try {
317318
doRegen(region, extent, options);
318319
} catch (Exception e) {
@@ -327,15 +328,6 @@ private void doRegen(Region region, Extent extent, RegenOptions options) throws
327328
LevelStorageSource levelStorage = LevelStorageSource.createDefault(tempDir);
328329
try (LevelStorageSource.LevelStorageAccess session = levelStorage.createAccess("WorldEditTempGen")) {
329330
ServerLevel originalWorld = getWorld();
330-
PrimaryLevelData levelProperties = (PrimaryLevelData) originalWorld.getServer()
331-
.getWorldData().overworldData();
332-
WorldOptions originalOpts = levelProperties.worldGenOptions();
333-
334-
long seed = options.getSeed().orElse(originalWorld.getSeed());
335-
336-
levelProperties.worldOptions = options.getSeed().isPresent()
337-
? originalOpts.withSeed(OptionalLong.of(seed))
338-
: originalOpts;
339331

340332
ResourceKey<Level> worldRegKey = originalWorld.dimension();
341333
try (ServerLevel serverWorld = new ServerLevel(
@@ -347,19 +339,16 @@ private void doRegen(Region region, Extent extent, RegenOptions options) throws
347339
originalWorld.getChunkSource().getGenerator()
348340
),
349341
originalWorld.isDebug(),
350-
seed,
342+
originalWorld.getSeed(),
351343
// No spawners are needed for this world.
352344
ImmutableList.of(),
353345
// This controls ticking, we don't need it so set it to false.
354-
false,
355-
originalWorld.getRandomSequences()
346+
false
356347
)) {
357348
regenForWorld(region, extent, serverWorld, options);
358349

359350
// drive the server executor until all tasks are popped off
360351
originalWorld.getServer().managedBlock(() -> originalWorld.getServer().getPendingTasksCount() == 0);
361-
} finally {
362-
levelProperties.worldOptions = originalOpts;
363352
}
364353
} finally {
365354
SafeFiles.tryHardToDeleteDir(tempDir);
@@ -392,7 +381,7 @@ private void regenForWorld(Region region, Extent extent, ServerLevel serverWorld
392381

393382
for (BlockVector3 vec : region) {
394383
BlockPos pos = NeoForgeAdapter.toBlockPos(vec);
395-
ChunkAccess chunk = chunks.get(new ChunkPos(pos));
384+
ChunkAccess chunk = chunks.get(ChunkPos.containing(pos));
396385
BlockStateHolder<?> state = NeoForgeAdapter.adapt(chunk.getBlockState(pos));
397386
BlockEntity blockEntity = chunk.getBlockEntity(pos);
398387
if (blockEntity != null) {
@@ -516,7 +505,7 @@ public boolean generateStructure(StructureType type, EditSession editSession, Bl
516505
ServerChunkCache chunkManager = world.getChunkSource();
517506
try (NeoForgeServerLevelDelegateProxy.LevelAndProxy levelProxy =
518507
NeoForgeServerLevelDelegateProxy.newInstance(editSession, world)) {
519-
ChunkPos chunkPos = new ChunkPos(new BlockPos(position.x(), position.y(), position.z()));
508+
ChunkPos chunkPos = ChunkPos.containing(new BlockPos(position.x(), position.y(), position.z()));
520509
StructureStart structureStart = structure.generate(
521510
structureRegistry.wrapAsHolder(structure), world.dimension(), world.registryAccess(),
522511
chunkManager.getGenerator(), chunkManager.getGenerator().getBiomeSource(), chunkManager.randomState(),
@@ -583,26 +572,26 @@ public void fixLighting(Iterable<BlockVector2> chunks) {
583572

584573
@Override
585574
public WeatherType getWeather() {
586-
LevelData info = getWorld().getLevelData();
587-
if (info.isThundering()) {
575+
WeatherData weatherData = getWorld().getServer().getWeatherData();
576+
if (weatherData.isThundering()) {
588577
return WeatherTypes.THUNDER_STORM;
589578
}
590-
if (info.isRaining()) {
579+
if (weatherData.isRaining()) {
591580
return WeatherTypes.RAIN;
592581
}
593582
return WeatherTypes.CLEAR;
594583
}
595584

596585
@Override
597586
public long getRemainingWeatherDuration() {
598-
ServerLevelData info = (ServerLevelData) getWorld().getLevelData();
599-
if (info.isThundering()) {
600-
return info.getThunderTime();
587+
WeatherData weatherData = getWorld().getServer().getWeatherData();
588+
if (weatherData.isThundering()) {
589+
return weatherData.getThunderTime();
601590
}
602-
if (info.isRaining()) {
603-
return info.getRainTime();
591+
if (weatherData.isRaining()) {
592+
return weatherData.getRainTime();
604593
}
605-
return info.getClearWeatherTime();
594+
return weatherData.getClearWeatherTime();
606595
}
607596

608597
@Override
@@ -612,19 +601,19 @@ public void setWeather(WeatherType weatherType) {
612601

613602
@Override
614603
public void setWeather(WeatherType weatherType, long duration) {
615-
ServerLevelData info = (ServerLevelData) getWorld().getLevelData();
604+
WeatherData weatherData = getWorld().getServer().getWeatherData();
616605
if (weatherType == WeatherTypes.THUNDER_STORM) {
617-
info.setClearWeatherTime(0);
618-
info.setThundering(true);
619-
info.setThunderTime((int) duration);
606+
weatherData.setClearWeatherTime(0);
607+
weatherData.setThundering(true);
608+
weatherData.setThunderTime((int) duration);
620609
} else if (weatherType == WeatherTypes.RAIN) {
621-
info.setClearWeatherTime(0);
622-
info.setRaining(true);
623-
info.setRainTime((int) duration);
610+
weatherData.setClearWeatherTime(0);
611+
weatherData.setRaining(true);
612+
weatherData.setRainTime((int) duration);
624613
} else if (weatherType == WeatherTypes.CLEAR) {
625-
info.setRaining(false);
626-
info.setThundering(false);
627-
info.setClearWeatherTime((int) duration);
614+
weatherData.setRaining(false);
615+
weatherData.setThundering(false);
616+
weatherData.setClearWeatherTime((int) duration);
628617
}
629618
}
630619

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/internal/ExtendedChunk.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/internal/NeoForgeTransmogrifier.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,18 @@ public static Property<?> transmogToWorldEditProperty(net.minecraft.world.level.
7575
return PROPERTY_CACHE.getUnchecked(property);
7676
}
7777

78-
public static Map<Property<?>, Object> transmogToWorldEditProperties(BlockType block, Map<net.minecraft.world.level.block.state.properties.Property<?>, Comparable<?>> mcProps) {
78+
public static Map<Property<?>, Object> transmogToWorldEditProperties(BlockType block, net.minecraft.world.level.block.state.BlockState blockState) {
7979
Map<Property<?>, Object> props = new TreeMap<>(Comparator.comparing(Property::name));
80-
for (Map.Entry<net.minecraft.world.level.block.state.properties.Property<?>, Comparable<?>> prop : mcProps.entrySet()) {
81-
Object value = prop.getValue();
82-
if (prop.getKey() instanceof net.minecraft.world.level.block.state.properties.EnumProperty) {
83-
if (prop.getKey().getValueClass() == net.minecraft.core.Direction.class) {
80+
for (net.minecraft.world.level.block.state.properties.Property<?> property : blockState.getProperties()) {
81+
Object value = blockState.getValue(property);
82+
if (property instanceof net.minecraft.world.level.block.state.properties.EnumProperty) {
83+
if (property.getValueClass() == net.minecraft.core.Direction.class) {
8484
value = NeoForgeAdapter.adaptEnumFacing((net.minecraft.core.Direction) value);
8585
} else {
8686
value = ((StringRepresentable) value).getSerializedName();
8787
}
8888
}
89-
props.put(block.getProperty(prop.getKey().getName()), value);
89+
props.put(block.getProperty(property.getName()), value);
9090
}
9191
return props;
9292
}
@@ -127,7 +127,7 @@ public static net.minecraft.world.level.block.state.BlockState transmogToMinecra
127127

128128
public static BlockState transmogToWorldEdit(net.minecraft.world.level.block.state.BlockState blockState) {
129129
BlockType blockType = NeoForgeAdapter.adapt(blockState.getBlock());
130-
return blockType.getState(transmogToWorldEditProperties(blockType, blockState.getValues()));
130+
return blockType.getState(transmogToWorldEditProperties(blockType, blockState));
131131
}
132132

133133
private NeoForgeTransmogrifier() {

worldedit-neoforge/src/main/java/com/sk89q/worldedit/neoforge/internal/NeoForgeWorldNativeAccess.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@
4242
import javax.annotation.Nullable;
4343

4444
public class NeoForgeWorldNativeAccess implements WorldNativeAccess<LevelChunk, BlockState, BlockPos> {
45-
private static final int UPDATE = 1;
46-
private static final int NOTIFY = 2;
47-
4845
private final WeakReference<ServerLevel> world;
4946
private SideEffectSet sideEffectSet;
5047

@@ -82,12 +79,14 @@ public BlockState getBlockState(LevelChunk chunk, BlockPos position) {
8279
@Nullable
8380
@Override
8481
public BlockState setBlockState(LevelChunk chunk, BlockPos position, BlockState state) {
85-
if (chunk instanceof ExtendedChunk extendedChunk) {
86-
return extendedChunk.setBlockState(
87-
position, state, 0, sideEffectSet.shouldApply(SideEffect.UPDATE)
88-
);
82+
int flags = 0;
83+
if (sideEffectSet != null) {
84+
if (!sideEffectSet.shouldApply(SideEffect.UPDATE)) {
85+
// We don't skip block entity side-effects as that's likely to cause problems.
86+
flags |= Block.UPDATE_SKIP_ON_PLACE | Block.UPDATE_SKIP_SHAPE_UPDATE_ON_WIRE;
87+
}
8988
}
90-
return chunk.setBlockState(position, state, 0);
89+
return chunk.setBlockState(position, state, flags);
9190
}
9291

9392
@Override
@@ -122,7 +121,7 @@ public boolean updateTileEntity(BlockPos position, LinCompoundTag tag) {
122121
@Override
123122
public void notifyBlockUpdate(LevelChunk chunk, BlockPos position, BlockState oldState, BlockState newState) {
124123
if (chunk.getSections()[getWorld().getSectionIndex(position.getY())] != null) {
125-
getWorld().sendBlockUpdated(position, oldState, newState, UPDATE | NOTIFY);
124+
getWorld().sendBlockUpdated(position, oldState, newState, Block.UPDATE_NEIGHBORS | Block.UPDATE_CLIENTS);
126125
}
127126
}
128127

@@ -163,9 +162,10 @@ public void updateBlock(BlockPos pos, BlockState oldState, BlockState newState)
163162
@Override
164163
public void updateNeighbors(BlockPos pos, BlockState oldState, BlockState newState, int recursionLimit) {
165164
ServerLevel world = getWorld();
166-
oldState.updateIndirectNeighbourShapes(world, pos, NOTIFY, recursionLimit);
167-
newState.updateNeighbourShapes(world, pos, NOTIFY, recursionLimit);
168-
newState.updateIndirectNeighbourShapes(world, pos, NOTIFY, recursionLimit);
165+
oldState.affectNeighborsAfterRemoval(world, pos, false);
166+
oldState.updateIndirectNeighbourShapes(world, pos, Block.UPDATE_CLIENTS, recursionLimit);
167+
newState.updateNeighbourShapes(world, pos, Block.UPDATE_CLIENTS, recursionLimit);
168+
newState.updateIndirectNeighbourShapes(world, pos, Block.UPDATE_CLIENTS, recursionLimit);
169169
}
170170

171171
@Override

0 commit comments

Comments
 (0)