Skip to content

Commit 9ec0b19

Browse files
authored
Re-add random tree generator (#2943)
* Re-add random tree generator * Apply PR feedback
1 parent 1d951d2 commit 9ec0b19

File tree

15 files changed

+140
-0
lines changed

15 files changed

+140
-0
lines changed

worldedit-bukkit/adapters/adapter-1.21.11/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_11/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7171
import com.sk89q.worldedit.world.generation.StructureType;
7272
import com.sk89q.worldedit.world.generation.TreeType;
73+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7374
import com.sk89q.worldedit.world.item.ItemType;
7475
import com.sk89q.worldedit.world.registry.BlockMaterial;
7576
import net.minecraft.SharedConstants;
@@ -978,6 +979,7 @@ public void initializeRegistries() {
978979
}
979980
}
980981
}
982+
WorldEditTreeTypes.init();
981983

982984
// BiomeCategories
983985
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/adapters/adapter-1.21.4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_4/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7171
import com.sk89q.worldedit.world.generation.StructureType;
7272
import com.sk89q.worldedit.world.generation.TreeType;
73+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7374
import com.sk89q.worldedit.world.item.ItemType;
7475
import com.sk89q.worldedit.world.registry.BlockMaterial;
7576
import net.minecraft.SharedConstants;
@@ -942,6 +943,7 @@ public void initializeRegistries() {
942943
}
943944
}
944945
}
946+
WorldEditTreeTypes.init();
945947

946948
// BiomeCategories
947949
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/adapters/adapter-1.21.5/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_5/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7171
import com.sk89q.worldedit.world.generation.StructureType;
7272
import com.sk89q.worldedit.world.generation.TreeType;
73+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7374
import com.sk89q.worldedit.world.item.ItemType;
7475
import com.sk89q.worldedit.world.registry.BlockMaterial;
7576
import net.minecraft.SharedConstants;
@@ -940,6 +941,7 @@ public void initializeRegistries() {
940941
}
941942
}
942943
}
944+
WorldEditTreeTypes.init();
943945

944946
// BiomeCategories
945947
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/adapters/adapter-1.21.6/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_6/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7171
import com.sk89q.worldedit.world.generation.StructureType;
7272
import com.sk89q.worldedit.world.generation.TreeType;
73+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7374
import com.sk89q.worldedit.world.item.ItemType;
7475
import com.sk89q.worldedit.world.registry.BlockMaterial;
7576
import net.minecraft.SharedConstants;
@@ -977,6 +978,7 @@ public void initializeRegistries() {
977978
}
978979
}
979980
}
981+
WorldEditTreeTypes.init();
980982

981983
// BiomeCategories
982984
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/adapters/adapter-1.21.9/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v1_21_9/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7171
import com.sk89q.worldedit.world.generation.StructureType;
7272
import com.sk89q.worldedit.world.generation.TreeType;
73+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7374
import com.sk89q.worldedit.world.item.ItemType;
7475
import com.sk89q.worldedit.world.registry.BlockMaterial;
7576
import net.minecraft.SharedConstants;
@@ -975,6 +976,7 @@ public void initializeRegistries() {
975976
}
976977
}
977978
}
979+
WorldEditTreeTypes.init();
978980

979981
// BiomeCategories
980982
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
7070
import com.sk89q.worldedit.world.generation.StructureType;
7171
import com.sk89q.worldedit.world.generation.TreeType;
72+
import com.sk89q.worldedit.world.generation.WorldEditTreeTypes;
7273
import com.sk89q.worldedit.world.item.ItemType;
7374
import com.sk89q.worldedit.world.registry.BlockMaterial;
7475
import io.papermc.paper.world.PaperWorldLoader;
@@ -968,6 +969,7 @@ public void initializeRegistries() {
968969
}
969970
}
970971
}
972+
WorldEditTreeTypes.init();
971973

972974
// BiomeCategories
973975
Registry<Biome> biomeRegistry = server.registryAccess().lookupOrThrow(Registries.BIOME);

worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.sk89q.worldedit.world.block.BlockStateHolder;
5151
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
5252
import com.sk89q.worldedit.world.generation.StructureType;
53+
import com.sk89q.worldedit.world.generation.WorldEditTreeGeneration;
5354
import com.sk89q.worldedit.world.weather.WeatherType;
5455
import com.sk89q.worldedit.world.weather.WeatherTypes;
5556
import io.papermc.lib.PaperLib;
@@ -318,6 +319,10 @@ public boolean generateTree(TreeGenerator.TreeType type, EditSession editSession
318319

319320
@Override
320321
public boolean generateTree(com.sk89q.worldedit.world.generation.TreeType type, EditSession editSession, BlockVector3 position) throws MaxChangedBlocksException {
322+
Boolean customResult = WorldEditTreeGeneration.handleWorldEditTrees(this, type, editSession, position);
323+
if (customResult != null) {
324+
return customResult;
325+
}
321326
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
322327
if (adapter != null) {
323328
return adapter.generateTree(type, getWorld(), editSession, position);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* WorldEdit, a Minecraft world manipulation toolkit
3+
* Copyright (C) sk89q <http://www.sk89q.com>
4+
* Copyright (C) WorldEdit team and contributors
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
18+
*/
19+
20+
package com.sk89q.worldedit.world.generation;
21+
22+
import com.google.common.collect.Iterables;
23+
import com.sk89q.worldedit.EditSession;
24+
import com.sk89q.worldedit.MaxChangedBlocksException;
25+
import com.sk89q.worldedit.math.BlockVector3;
26+
import com.sk89q.worldedit.world.World;
27+
28+
import java.util.Collection;
29+
import java.util.concurrent.ThreadLocalRandom;
30+
import javax.annotation.Nullable;
31+
32+
public final class WorldEditTreeGeneration {
33+
34+
private WorldEditTreeGeneration() {
35+
}
36+
37+
@SuppressWarnings("deprecation")
38+
@Nullable
39+
public static Boolean handleWorldEditTrees(World world, TreeType type, EditSession editSession, BlockVector3 position)
40+
throws MaxChangedBlocksException {
41+
if (type == WorldEditTreeTypes.RANDOM) {
42+
Collection<TreeType> treeTypes = TreeType.REGISTRY.values();
43+
TreeType randomType = Iterables.get(treeTypes, ThreadLocalRandom.current().nextInt(treeTypes.size()));
44+
return world.generateTree(randomType, editSession, position);
45+
}
46+
47+
if (type == WorldEditTreeTypes.PINE) {
48+
// TODO Move this into this file once the legacy system is stripped away
49+
return com.sk89q.worldedit.util.TreeGenerator.TreeType.PINE.generate(editSession, position);
50+
}
51+
52+
return null;
53+
}
54+
55+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* WorldEdit, a Minecraft world manipulation toolkit
3+
* Copyright (C) sk89q <http://www.sk89q.com>
4+
* Copyright (C) WorldEdit team and contributors
5+
*
6+
* This program is free software: you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation, either version 3 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
18+
*/
19+
20+
package com.sk89q.worldedit.world.generation;
21+
22+
/**
23+
* This class holds custom trees added by WorldEdit.
24+
*/
25+
public final class WorldEditTreeTypes {
26+
27+
public static final TreeType RANDOM = create("random");
28+
public static final TreeType PINE = create("pine");
29+
30+
private WorldEditTreeTypes() {
31+
}
32+
33+
public static void init() {
34+
register(RANDOM);
35+
register(PINE);
36+
}
37+
38+
private static TreeType create(String id) {
39+
return new TreeType("worldedit:" + id);
40+
}
41+
42+
private static void register(TreeType type) {
43+
if (TreeType.REGISTRY.get(type.id()) == null) {
44+
TreeType.REGISTRY.register(type.id(), type);
45+
}
46+
}
47+
}

worldedit-fabric/src/main/java/com/sk89q/worldedit/fabric/FabricWorld.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import com.sk89q.worldedit.world.generation.ConfiguredFeatureType;
6565
import com.sk89q.worldedit.world.generation.StructureType;
6666
import com.sk89q.worldedit.world.generation.TreeType;
67+
import com.sk89q.worldedit.world.generation.WorldEditTreeGeneration;
6768
import com.sk89q.worldedit.world.item.ItemTypes;
6869
import com.sk89q.worldedit.world.weather.WeatherType;
6970
import com.sk89q.worldedit.world.weather.WeatherTypes;
@@ -486,6 +487,10 @@ public boolean generateTree(com.sk89q.worldedit.util.TreeGenerator.TreeType type
486487

487488
@Override
488489
public boolean generateTree(TreeType type, EditSession editSession, BlockVector3 position) throws MaxChangedBlocksException {
490+
Boolean customResult = WorldEditTreeGeneration.handleWorldEditTrees(this, type, editSession, position);
491+
if (customResult != null) {
492+
return customResult;
493+
}
489494
ServerLevel world = (ServerLevel) getWorld();
490495
PlacedFeature generator = world.registryAccess().lookupOrThrow(Registries.PLACED_FEATURE).getValue(Identifier.tryParse(type.id()));
491496
ServerChunkCache chunkManager = world.getChunkSource();

0 commit comments

Comments
 (0)