moved miners dream to seperate mod
new portal gun draft fixed scorched guns mixin sodium compat layer
This commit is contained in:
1 parent
23599c4c59
commit
c7cb48edfb
193 files changed
+6528
-2821
No files matched your search
+1
-1
@@ -110,7 +110,7 @@ public final class AntarchyConfigCatalog {
|
||||
|| name.startsWith("nightmareSword") || name.startsWith("basiliskDagger")
|
||||
|| name.startsWith("squidzooka") || name.equals("invertProjectilesFromInvertedPlayers")
|
||||
|| name.startsWith("gravityGun") || name.startsWith("critterCage")
|
||||
|| name.startsWith("minersDream") || name.equals("potentNyxiteInvertedDurationSeconds")
|
||||
|| name.equals("potentNyxiteInvertedDurationSeconds")
|
||||
|| name.equals("corneaEarNightVisionSeconds") || name.startsWith("american")
|
||||
|| name.startsWith("mogglesVision") || name.equals("ductTapeRepairPercentPerUse")
|
||||
|| name.startsWith("fallenKingCrown");
|
||||
|
||||
@@ -163,11 +163,6 @@ public final class AntarchySettings {
|
||||
private static double gravityGunMaxHoldDistance = 10.0D;
|
||||
private static double critterCageMaxCapturableWidth = 1.65D;
|
||||
private static double critterCageMaxCapturableHeight = 1.65D;
|
||||
private static boolean minersDreamEnabled = true;
|
||||
private static int minersDreamMinimumRange = 48;
|
||||
private static int minersDreamMaximumRange = 96;
|
||||
private static int minersDreamTorchSpacing = 10;
|
||||
private static int minersDreamBlocksPerTick = 150;
|
||||
private static double lucidAttackRange = 9.0D;
|
||||
private static double lucidPearlInvertedDurationSeconds = 6.0D;
|
||||
private static int corneaEarNightVisionSeconds = 15;
|
||||
@@ -1189,26 +1184,6 @@ public final class AntarchySettings {
|
||||
return critterCageMaxCapturableHeight;
|
||||
}
|
||||
|
||||
public static boolean minersDreamEnabled() {
|
||||
return minersDreamEnabled;
|
||||
}
|
||||
|
||||
public static int minersDreamMinimumRange() {
|
||||
return minersDreamMinimumRange;
|
||||
}
|
||||
|
||||
public static int minersDreamMaximumRange() {
|
||||
return minersDreamMaximumRange;
|
||||
}
|
||||
|
||||
public static int minersDreamTorchSpacing() {
|
||||
return minersDreamTorchSpacing;
|
||||
}
|
||||
|
||||
public static int minersDreamBlocksPerTick() {
|
||||
return minersDreamBlocksPerTick;
|
||||
}
|
||||
|
||||
public static void setDisableInfinityBookPortalCreation(boolean value) {
|
||||
disableInfinityBookPortalCreation = value;
|
||||
}
|
||||
@@ -1731,26 +1706,6 @@ public final class AntarchySettings {
|
||||
critterCageMaxCapturableHeight = value;
|
||||
}
|
||||
|
||||
public static void setMinersDreamEnabled(boolean value) {
|
||||
minersDreamEnabled = value;
|
||||
}
|
||||
|
||||
public static void setMinersDreamMinimumRange(int value) {
|
||||
minersDreamMinimumRange = value;
|
||||
}
|
||||
|
||||
public static void setMinersDreamMaximumRange(int value) {
|
||||
minersDreamMaximumRange = value;
|
||||
}
|
||||
|
||||
public static void setMinersDreamTorchSpacing(int value) {
|
||||
minersDreamTorchSpacing = value;
|
||||
}
|
||||
|
||||
public static void setMinersDreamBlocksPerTick(int value) {
|
||||
minersDreamBlocksPerTick = value;
|
||||
}
|
||||
|
||||
public static double lucidAttackRange() {
|
||||
return lucidAttackRange;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,6 @@ public final class AntarchyTags {
|
||||
public static final TagKey<Block> CAVARYN_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("cavaryn_portal_frames"));
|
||||
public static final TagKey<Block> RAINBOW_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("rainbow_portal_frames"));
|
||||
public static final TagKey<Block> ROLLY_CAVERN_CARVEABLE = TagKey.create(Registries.BLOCK, id("rolly_cavern_carveable"));
|
||||
public static final TagKey<Block> MINERS_DREAM_CARVABLE = TagKey.create(Registries.BLOCK, id("miners_dream_carvable"));
|
||||
public static final TagKey<Block> BLUESTONE_COMPONENTS = TagKey.create(Registries.BLOCK, id("bluestone_components"));
|
||||
public static final TagKey<Block> BLUESTONE_CONNECTABLE = TagKey.create(Registries.BLOCK, id("bluestone_connectable"));
|
||||
public static final TagKey<Block> ANTIMETAL_INVERSION_BLOCKS = TagKey.create(Registries.BLOCK, id("antimetal_inversion_blocks"));
|
||||
|
||||
+5
@@ -19,6 +19,7 @@ import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.inventory.HopperMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.ChestBlock;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
|
||||
@@ -118,6 +119,10 @@ public class UpperBlockEntity extends RandomizableContainerBlockEntity {
|
||||
}
|
||||
|
||||
private static Container getContainerAt(ServerLevel level, BlockPos pos) {
|
||||
BlockState state = level.getBlockState(pos);
|
||||
if (state.getBlock() instanceof ChestBlock chestBlock) {
|
||||
return ChestBlock.getContainer(chestBlock, state, level, pos, false);
|
||||
}
|
||||
BlockEntity blockEntity = level.getBlockEntity(pos);
|
||||
return blockEntity instanceof Container container ? container : null;
|
||||
}
|
||||
|
||||
-173
@@ -1,173 +0,0 @@
|
||||
package com.craisinlord.antarchy.content.item;
|
||||
|
||||
import com.craisinlord.antarchy.content.AntarchyTags;
|
||||
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
public final class MinersDreamCaveGenerator {
|
||||
private static final double MIN_HORIZONTAL_RADIUS = 2.0D;
|
||||
private static final double MAX_HORIZONTAL_RADIUS = 5.0D;
|
||||
private static final double MIN_VERTICAL_RADIUS = 1.5D;
|
||||
private static final double MAX_VERTICAL_RADIUS = 4.0D;
|
||||
private static final double MAX_VERTICAL_DEVIATION = 8.0D;
|
||||
private static final double SOFT_VERTICAL_DEVIATION = 4.0D;
|
||||
private static final int WORLD_MARGIN = 3;
|
||||
|
||||
private MinersDreamCaveGenerator() {
|
||||
}
|
||||
|
||||
public record CaveNode(BlockPos center, double horizontalRadius, double verticalRadius) {
|
||||
}
|
||||
|
||||
public record CaveGenerationResult(List<CaveNode> nodes, Set<Integer> torchCheckpoints) {
|
||||
}
|
||||
|
||||
public static CaveGenerationResult generate(BlockPos start, Direction initialDirection, int length,
|
||||
int torchSpacing, int minBuildHeight, int maxBuildHeight, RandomSource random) {
|
||||
List<CaveNode> nodes = new ArrayList<>(length);
|
||||
Set<Integer> torchCheckpoints = new HashSet<>();
|
||||
|
||||
double x = start.getX() + 0.5D;
|
||||
double y = start.getY() + 0.5D;
|
||||
double z = start.getZ() + 0.5D;
|
||||
double startY = y;
|
||||
|
||||
double headingX = initialDirection.getStepX();
|
||||
double headingZ = initialDirection.getStepZ();
|
||||
if (headingX == 0.0D && headingZ == 0.0D) {
|
||||
headingX = 1.0D;
|
||||
}
|
||||
|
||||
double verticalVelocity = 0.0D;
|
||||
double horizontalRadius = 3.0D;
|
||||
double verticalRadius = 2.0D;
|
||||
int minY = minBuildHeight + WORLD_MARGIN;
|
||||
int maxY = maxBuildHeight - WORLD_MARGIN;
|
||||
|
||||
int spacing = Math.max(4, torchSpacing);
|
||||
int traveledSinceTorch = 0;
|
||||
int nextTorchDistance = spacing + random.nextInt(5) - 2;
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
BlockPos center = BlockPos.containing(x, Mth.clamp(y, minY, maxY), z);
|
||||
nodes.add(new CaveNode(center, horizontalRadius, verticalRadius));
|
||||
|
||||
traveledSinceTorch++;
|
||||
if (traveledSinceTorch >= Math.max(1, nextTorchDistance)) {
|
||||
torchCheckpoints.add(i);
|
||||
traveledSinceTorch = 0;
|
||||
nextTorchDistance = spacing + random.nextInt(5) - 2;
|
||||
}
|
||||
|
||||
double turnDegrees = random.nextGaussian() * 8.0D;
|
||||
if (random.nextFloat() < 0.1F) {
|
||||
turnDegrees = random.nextGaussian() * 15.0D;
|
||||
}
|
||||
turnDegrees = Mth.clamp(turnDegrees, -25.0D, 25.0D);
|
||||
double turnRadians = Math.toRadians(turnDegrees);
|
||||
double cos = Math.cos(turnRadians);
|
||||
double sin = Math.sin(turnRadians);
|
||||
double newHeadingX = headingX * cos - headingZ * sin;
|
||||
double newHeadingZ = headingX * sin + headingZ * cos;
|
||||
double headingLength = Math.sqrt(newHeadingX * newHeadingX + newHeadingZ * newHeadingZ);
|
||||
headingX = newHeadingX / headingLength;
|
||||
headingZ = newHeadingZ / headingLength;
|
||||
|
||||
verticalVelocity += random.nextGaussian() * 0.15D;
|
||||
double deviation = y - startY;
|
||||
verticalVelocity -= deviation * 0.06D;
|
||||
if (deviation > SOFT_VERTICAL_DEVIATION) {
|
||||
verticalVelocity -= 0.08D;
|
||||
} else if (deviation < -SOFT_VERTICAL_DEVIATION) {
|
||||
verticalVelocity += 0.08D;
|
||||
}
|
||||
verticalVelocity = Mth.clamp(verticalVelocity, -0.6D, 0.6D);
|
||||
|
||||
x += headingX;
|
||||
z += headingZ;
|
||||
y = Mth.clamp(y + verticalVelocity, startY - MAX_VERTICAL_DEVIATION, startY + MAX_VERTICAL_DEVIATION);
|
||||
|
||||
horizontalRadius = Mth.clamp(horizontalRadius + random.nextGaussian() * 0.15D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS);
|
||||
verticalRadius = Mth.clamp(verticalRadius + random.nextGaussian() * 0.12D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS);
|
||||
if (random.nextFloat() < 0.05F) {
|
||||
horizontalRadius = Mth.clamp(horizontalRadius + 0.6D, MIN_HORIZONTAL_RADIUS, MAX_HORIZONTAL_RADIUS);
|
||||
verticalRadius = Mth.clamp(verticalRadius + 0.5D, MIN_VERTICAL_RADIUS, MAX_VERTICAL_RADIUS);
|
||||
}
|
||||
}
|
||||
|
||||
return new CaveGenerationResult(nodes, torchCheckpoints);
|
||||
}
|
||||
|
||||
public static void collectNodeCandidates(ServerLevel level, CaveNode node, LongOpenHashSet visited, RandomSource random, List<BlockPos> out) {
|
||||
BlockPos center = node.center();
|
||||
int hr = Mth.ceil(node.horizontalRadius());
|
||||
double upExtent = node.verticalRadius() * 1.25D;
|
||||
double downExtent = node.verticalRadius() * 0.65D;
|
||||
int upR = Mth.ceil(upExtent);
|
||||
int downR = Mth.ceil(downExtent);
|
||||
int minBuildHeight = level.getMinBuildHeight();
|
||||
int maxBuildHeight = level.getMaxBuildHeight();
|
||||
|
||||
for (int dy = -downR; dy <= upR; dy++) {
|
||||
double vExtent = dy >= 0 ? upExtent : downExtent;
|
||||
if (vExtent <= 0.0D) {
|
||||
continue;
|
||||
}
|
||||
double vTerm = (dy * dy) / (vExtent * vExtent);
|
||||
if (vTerm > 1.05D) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int dx = -hr; dx <= hr; dx++) {
|
||||
double hxTerm = (dx * dx) / (node.horizontalRadius() * node.horizontalRadius());
|
||||
for (int dz = -hr; dz <= hr; dz++) {
|
||||
double hzTerm = (dz * dz) / (node.horizontalRadius() * node.horizontalRadius());
|
||||
double distance = hxTerm + vTerm + hzTerm;
|
||||
if (distance > 1.0D) {
|
||||
continue;
|
||||
}
|
||||
if (distance > 0.7D) {
|
||||
double edgeChance = (1.0D - distance) / 0.3D * 0.85D;
|
||||
if (random.nextFloat() > edgeChance) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
BlockPos pos = center.offset(dx, dy, dz);
|
||||
if (pos.getY() < minBuildHeight || pos.getY() >= maxBuildHeight) {
|
||||
continue;
|
||||
}
|
||||
|
||||
long packed = pos.asLong();
|
||||
if (visited.contains(packed)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
BlockState state = level.getBlockState(pos);
|
||||
if (!state.is(AntarchyTags.Blocks.MINERS_DREAM_CARVABLE)) {
|
||||
continue;
|
||||
}
|
||||
if (level.getBlockEntity(pos) != null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
visited.add(packed);
|
||||
out.add(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isChunkLoaded(ServerLevel level, BlockPos pos) {
|
||||
return level.isLoaded(pos);
|
||||
}
|
||||
}
|
||||
-152
@@ -1,152 +0,0 @@
|
||||
package com.craisinlord.antarchy.content.item;
|
||||
|
||||
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.BlockParticleOption;
|
||||
import net.minecraft.core.particles.DustParticleOptions;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public final class MinersDreamExcavation {
|
||||
private static final Vector3f TRIFFID_GOO_COLOR = new Vector3f(0.35F, 0.85F, 0.4F);
|
||||
private static final int SLICES_BETWEEN_RUMBLE = 4;
|
||||
|
||||
private final UUID owner;
|
||||
private final ResourceKey<Level> dimension;
|
||||
private final List<MinersDreamCaveGenerator.CaveNode> nodes;
|
||||
private final Set<Integer> torchCheckpoints;
|
||||
private final LongOpenHashSet visited = new LongOpenHashSet();
|
||||
|
||||
private int nodeIndex = 0;
|
||||
private List<BlockPos> currentNodePositions = null;
|
||||
private int positionCursor = 0;
|
||||
private int slicesSinceRumble = 0;
|
||||
private boolean finished = false;
|
||||
|
||||
public MinersDreamExcavation(UUID owner, ResourceKey<Level> dimension, List<MinersDreamCaveGenerator.CaveNode> nodes, Set<Integer> torchCheckpoints) {
|
||||
this.owner = owner;
|
||||
this.dimension = dimension;
|
||||
this.nodes = nodes;
|
||||
this.torchCheckpoints = torchCheckpoints;
|
||||
}
|
||||
|
||||
public UUID owner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public ResourceKey<Level> dimension() {
|
||||
return dimension;
|
||||
}
|
||||
|
||||
public boolean isFinished() {
|
||||
return finished;
|
||||
}
|
||||
|
||||
public void tick(ServerLevel level, int blockBudget) {
|
||||
RandomSource random = level.getRandom();
|
||||
int remaining = blockBudget;
|
||||
|
||||
while (remaining > 0 && !finished) {
|
||||
if (currentNodePositions == null) {
|
||||
if (nodeIndex >= nodes.size()) {
|
||||
finished = true;
|
||||
playCompletionSound(level);
|
||||
return;
|
||||
}
|
||||
|
||||
MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex);
|
||||
if (!MinersDreamCaveGenerator.isChunkLoaded(level, node.center())) {
|
||||
advanceNode(level, node);
|
||||
continue;
|
||||
}
|
||||
|
||||
currentNodePositions = new ArrayList<>();
|
||||
MinersDreamCaveGenerator.collectNodeCandidates(level, node, visited, random, currentNodePositions);
|
||||
positionCursor = 0;
|
||||
}
|
||||
|
||||
if (currentNodePositions.isEmpty()) {
|
||||
MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex);
|
||||
advanceNode(level, node);
|
||||
continue;
|
||||
}
|
||||
|
||||
int endIndex = Math.min(currentNodePositions.size(), positionCursor + remaining);
|
||||
for (; positionCursor < endIndex; positionCursor++) {
|
||||
BlockPos pos = currentNodePositions.get(positionCursor);
|
||||
BlockState removedState = level.getBlockState(pos);
|
||||
if (removedState.isAir()) {
|
||||
continue;
|
||||
}
|
||||
level.setBlock(pos, Blocks.AIR.defaultBlockState(), 3);
|
||||
remaining--;
|
||||
if (random.nextFloat() < 0.12F) {
|
||||
spawnBreakParticles(level, pos, removedState, random);
|
||||
}
|
||||
}
|
||||
|
||||
if (positionCursor >= currentNodePositions.size()) {
|
||||
MinersDreamCaveGenerator.CaveNode node = nodes.get(nodeIndex);
|
||||
advanceNode(level, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void advanceNode(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) {
|
||||
RandomSource random = level.getRandom();
|
||||
spawnFrontDust(level, node, random);
|
||||
slicesSinceRumble++;
|
||||
if (slicesSinceRumble >= SLICES_BETWEEN_RUMBLE) {
|
||||
slicesSinceRumble = 0;
|
||||
playRumble(level, node);
|
||||
}
|
||||
|
||||
if (torchCheckpoints.contains(nodeIndex)) {
|
||||
MinersDreamTorchPlacer.tryPlaceTorch(level, node.center(), random);
|
||||
}
|
||||
|
||||
currentNodePositions = null;
|
||||
positionCursor = 0;
|
||||
nodeIndex++;
|
||||
}
|
||||
|
||||
private void spawnBreakParticles(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) {
|
||||
level.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, state),
|
||||
pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 2, 0.25D, 0.25D, 0.25D, 0.02D);
|
||||
if (random.nextFloat() < 0.2F) {
|
||||
level.sendParticles(new DustParticleOptions(TRIFFID_GOO_COLOR, 1.0F),
|
||||
pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, 1, 0.2D, 0.2D, 0.2D, 0.0D);
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnFrontDust(ServerLevel level, MinersDreamCaveGenerator.CaveNode node, RandomSource random) {
|
||||
BlockPos center = node.center();
|
||||
level.sendParticles(ParticleTypes.CLOUD, center.getX() + 0.5D, center.getY() + 0.5D, center.getZ() + 0.5D,
|
||||
3, node.horizontalRadius() * 0.4D, node.verticalRadius() * 0.3D, node.horizontalRadius() * 0.4D, 0.01D);
|
||||
}
|
||||
|
||||
private void playRumble(ServerLevel level, MinersDreamCaveGenerator.CaveNode node) {
|
||||
BlockPos center = node.center();
|
||||
level.playSound(null, center, SoundEvents.STONE_BREAK, SoundSource.BLOCKS, 0.5F, 0.7F);
|
||||
}
|
||||
|
||||
private void playCompletionSound(ServerLevel level) {
|
||||
if (nodes.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
BlockPos center = nodes.get(nodes.size() - 1).center();
|
||||
level.playSound(null, center, SoundEvents.BEACON_ACTIVATE, SoundSource.PLAYERS, 0.4F, 1.4F);
|
||||
}
|
||||
}
|
||||
-81
@@ -1,81 +0,0 @@
|
||||
package com.craisinlord.antarchy.content.item;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.RandomSource;
|
||||
|
||||
public final class MinersDreamExcavationManager {
|
||||
private static final int MAX_ACTIVE_TASKS = 8;
|
||||
private static final int SAFE_MIN_RANGE = 8;
|
||||
private static final int SAFE_MAX_RANGE = 256;
|
||||
private static final Map<UUID, MinersDreamExcavation> ACTIVE = new ConcurrentHashMap<>();
|
||||
|
||||
private MinersDreamExcavationManager() {
|
||||
}
|
||||
|
||||
public static boolean hasActiveExcavation(UUID owner) {
|
||||
return ACTIVE.containsKey(owner);
|
||||
}
|
||||
|
||||
public static MinersDreamExcavation tryStart(ServerLevel level, UUID owner, BlockPos startPos, Direction direction) {
|
||||
if (ACTIVE.containsKey(owner) || ACTIVE.size() >= MAX_ACTIVE_TASKS) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int minRange = Mth.clamp(AntarchySettings.minersDreamMinimumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE);
|
||||
int maxRange = Mth.clamp(AntarchySettings.minersDreamMaximumRange(), SAFE_MIN_RANGE, SAFE_MAX_RANGE);
|
||||
if (minRange > maxRange) {
|
||||
int swap = minRange;
|
||||
minRange = maxRange;
|
||||
maxRange = swap;
|
||||
}
|
||||
|
||||
RandomSource random = level.getRandom();
|
||||
int length = minRange == maxRange ? minRange : minRange + random.nextInt(maxRange - minRange + 1);
|
||||
|
||||
MinersDreamCaveGenerator.CaveGenerationResult result = MinersDreamCaveGenerator.generate(
|
||||
startPos,
|
||||
direction,
|
||||
length,
|
||||
AntarchySettings.minersDreamTorchSpacing(),
|
||||
level.getMinBuildHeight(),
|
||||
level.getMaxBuildHeight(),
|
||||
random
|
||||
);
|
||||
|
||||
if (result.nodes().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
MinersDreamExcavation excavation = new MinersDreamExcavation(owner, level.dimension(), result.nodes(), result.torchCheckpoints());
|
||||
ACTIVE.put(owner, excavation);
|
||||
return excavation;
|
||||
}
|
||||
|
||||
public static void tick(ServerLevel level) {
|
||||
if (ACTIVE.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int budget = Math.max(1, AntarchySettings.minersDreamBlocksPerTick());
|
||||
Iterator<Map.Entry<UUID, MinersDreamExcavation>> iterator = ACTIVE.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
MinersDreamExcavation excavation = iterator.next().getValue();
|
||||
if (!excavation.dimension().equals(level.dimension())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
excavation.tick(level, budget);
|
||||
if (excavation.isFinished()) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
-79
@@ -1,79 +0,0 @@
|
||||
package com.craisinlord.antarchy.content.item;
|
||||
|
||||
import com.craisinlord.antarchy.config.AntarchySettings;
|
||||
import java.util.List;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.context.UseOnContext;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
public final class MinersDreamItem extends Item {
|
||||
public MinersDreamItem(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult useOn(UseOnContext context) {
|
||||
Level level = context.getLevel();
|
||||
Player player = context.getPlayer();
|
||||
if (player == null) {
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
|
||||
if (!AntarchySettings.minersDreamEnabled()) {
|
||||
if (!level.isClientSide()) {
|
||||
player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_disabled"), true);
|
||||
}
|
||||
return InteractionResult.FAIL;
|
||||
}
|
||||
|
||||
if (level.isClientSide()) {
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
|
||||
ServerLevel serverLevel = (ServerLevel) level;
|
||||
BlockPos clickedPos = context.getClickedPos();
|
||||
Direction clickedFace = context.getClickedFace();
|
||||
Direction travelDirection = clickedFace.getAxis().isHorizontal() ? clickedFace : player.getDirection();
|
||||
BlockPos startPos = clickedPos.relative(travelDirection);
|
||||
|
||||
if (!serverLevel.isInWorldBounds(startPos) || !MinersDreamCaveGenerator.isChunkLoaded(serverLevel, startPos)) {
|
||||
return InteractionResult.FAIL;
|
||||
}
|
||||
|
||||
if (MinersDreamExcavationManager.hasActiveExcavation(player.getUUID())) {
|
||||
player.displayClientMessage(Component.translatable("message.antarchy.miners_dream_busy"), true);
|
||||
return InteractionResult.FAIL;
|
||||
}
|
||||
|
||||
MinersDreamExcavation excavation = MinersDreamExcavationManager.tryStart(serverLevel, player.getUUID(), startPos, travelDirection);
|
||||
if (excavation == null) {
|
||||
return InteractionResult.FAIL;
|
||||
}
|
||||
|
||||
serverLevel.playSound(null, clickedPos, SoundEvents.TNT_PRIMED, SoundSource.PLAYERS, 0.8F, 1.1F);
|
||||
|
||||
if (!player.getAbilities().instabuild) {
|
||||
context.getItemInHand().shrink(1);
|
||||
}
|
||||
|
||||
return InteractionResult.CONSUME;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendHoverText(ItemStack stack, Level level, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
|
||||
tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line1").withStyle(ChatFormatting.GRAY));
|
||||
tooltipComponents.add(Component.translatable("tooltip.antarchy.miners_dream.line2").withStyle(ChatFormatting.GRAY));
|
||||
super.appendHoverText(stack, level, tooltipComponents, tooltipFlag);
|
||||
}
|
||||
}
|
||||
-89
@@ -1,89 +0,0 @@
|
||||
package com.craisinlord.antarchy.content.item;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
|
||||
public final class MinersDreamTorchPlacer {
|
||||
private MinersDreamTorchPlacer() {
|
||||
}
|
||||
|
||||
public static void tryPlaceTorch(ServerLevel level, BlockPos center, RandomSource random) {
|
||||
BlockPos floorSpot = findFloorSpot(level, center);
|
||||
boolean floorFirst = random.nextBoolean();
|
||||
|
||||
if (floorFirst) {
|
||||
if (floorSpot != null && placeFloorTorch(level, floorSpot)) {
|
||||
return;
|
||||
}
|
||||
placeWallTorch(level, center, random);
|
||||
return;
|
||||
}
|
||||
|
||||
if (placeWallTorch(level, center, random)) {
|
||||
return;
|
||||
}
|
||||
if (floorSpot != null) {
|
||||
placeFloorTorch(level, floorSpot);
|
||||
}
|
||||
}
|
||||
|
||||
private static BlockPos findFloorSpot(ServerLevel level, BlockPos center) {
|
||||
for (int dy = -2; dy <= 1; dy++) {
|
||||
BlockPos candidate = center.offset(0, dy, 0);
|
||||
if (!isOpenForTorch(level, candidate)) {
|
||||
continue;
|
||||
}
|
||||
BlockState below = level.getBlockState(candidate.below());
|
||||
if (below.isFaceSturdy(level, candidate.below(), Direction.UP)) {
|
||||
return candidate;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean placeFloorTorch(ServerLevel level, BlockPos pos) {
|
||||
if (!isOpenForTorch(level, pos)) {
|
||||
return false;
|
||||
}
|
||||
BlockState state = Blocks.TORCH.defaultBlockState();
|
||||
if (!state.canSurvive(level, pos)) {
|
||||
return false;
|
||||
}
|
||||
level.setBlock(pos, state, 3);
|
||||
level.playSound(null, pos, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F);
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean placeWallTorch(ServerLevel level, BlockPos center, RandomSource random) {
|
||||
List<Direction> order = Direction.Plane.HORIZONTAL.shuffledCopy(random);
|
||||
for (int dy = -1; dy <= 1; dy++) {
|
||||
BlockPos candidate = center.offset(0, dy, 0);
|
||||
if (!isOpenForTorch(level, candidate)) {
|
||||
continue;
|
||||
}
|
||||
for (Direction wallSide : order) {
|
||||
Direction facing = wallSide.getOpposite();
|
||||
BlockState state = Blocks.WALL_TORCH.defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_FACING, facing);
|
||||
if (!state.canSurvive(level, candidate)) {
|
||||
continue;
|
||||
}
|
||||
level.setBlock(candidate, state, 3);
|
||||
level.playSound(null, candidate, state.getSoundType().getPlaceSound(), SoundSource.BLOCKS, 1.0F, 1.0F);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isOpenForTorch(ServerLevel level, BlockPos pos) {
|
||||
BlockState state = level.getBlockState(pos);
|
||||
return (state.isAir() || state.canBeReplaced()) && level.getFluidState(pos).isEmpty();
|
||||
}
|
||||
}
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Rechtsklicke mit einer Glasflasche auf eine Reverie, um sie einzufangen.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Rechtsklick, um die Reverie freizulassen.",
|
||||
"item.antarchy.gravity_gun": "Gravitationskanone",
|
||||
"item.antarchy.miners_dream": "Traum des Bergmanns",
|
||||
"tooltip.antarchy.miners_dream.line1": "Rechtsklick, um eine gewundene Höhle zu graben.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Lässt wertvolle Blöcke unberührt.",
|
||||
"message.antarchy.miners_dream_disabled": "Der Traum des Bergmanns ist deaktiviert.",
|
||||
"message.antarchy.miners_dream_busy": "Dein vorheriger Traum entfaltet sich noch.",
|
||||
"item.antarchy.diamond_minecart": "Die Diamantlore",
|
||||
"item.antarchy.cogwheel_pet": "Zahnrad-Haustier",
|
||||
"item.antarchy.fire_dragon_pet": "Feuerdrachen-Haustier",
|
||||
|
||||
@@ -632,11 +632,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.release": "Right click to release the Reverie.",
|
||||
"item.antarchy.gravity_gun": "Gravity Gun",
|
||||
"item.antarchy.portal_gun": "Portal Gun",
|
||||
"item.antarchy.miners_dream": "Miner's Dream",
|
||||
"tooltip.antarchy.miners_dream.line1": "Use to carve a winding cave.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Leaves valuable blocks untouched.",
|
||||
"message.antarchy.miners_dream_disabled": "The Miner's Dream is disabled.",
|
||||
"message.antarchy.miners_dream_busy": "Your previous dream is still unfolding.",
|
||||
"item.antarchy.diamond_minecart": "The Diamond Minecart",
|
||||
"item.antarchy.cogwheel_pet": "Cogwheel Pet",
|
||||
"item.antarchy.fire_dragon_pet": "Fire Dragon Pet",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Haz clic derecho en una Reverie con una botella de cristal para guardarla.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Clic derecho para liberar a la Reverie.",
|
||||
"item.antarchy.gravity_gun": "Pistola gravitatoria",
|
||||
"item.antarchy.miners_dream": "Sueño del minero",
|
||||
"tooltip.antarchy.miners_dream.line1": "Clic derecho para excavar una cueva sinuosa.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Deja intactos los bloques valiosos.",
|
||||
"message.antarchy.miners_dream_disabled": "El Sueño del minero está desactivado.",
|
||||
"message.antarchy.miners_dream_busy": "Tu sueño anterior todavía se está desarrollando.",
|
||||
"item.antarchy.diamond_minecart": "La vagoneta de diamante",
|
||||
"item.antarchy.cogwheel_pet": "Mascota engranaje",
|
||||
"item.antarchy.fire_dragon_pet": "Mascota de dragón de fuego",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Faites un clic droit sur une Reverie avec une fiole en verre pour la capturer.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Clic droit pour libérer la Reverie.",
|
||||
"item.antarchy.gravity_gun": "Canon à gravité",
|
||||
"item.antarchy.miners_dream": "Rêve du mineur",
|
||||
"tooltip.antarchy.miners_dream.line1": "Clic droit pour creuser une grotte sinueuse.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Laisse les blocs précieux intacts.",
|
||||
"message.antarchy.miners_dream_disabled": "Le Rêve du mineur est désactivé.",
|
||||
"message.antarchy.miners_dream_busy": "Votre rêve précédent est encore en train de se déployer.",
|
||||
"item.antarchy.diamond_minecart": "Le wagonnet de diamant",
|
||||
"item.antarchy.cogwheel_pet": "Familier engrenage",
|
||||
"item.antarchy.fire_dragon_pet": "Familier dragon de feu",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Fai clic destro su una Reverie con una bottiglia di vetro per catturarla.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Fai clic destro per liberare la Reverie.",
|
||||
"item.antarchy.gravity_gun": "Cannone gravitazionale",
|
||||
"item.antarchy.miners_dream": "Sogno del minatore",
|
||||
"tooltip.antarchy.miners_dream.line1": "Fai clic destro per scavare una grotta tortuosa.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Lascia intatti i blocchi preziosi.",
|
||||
"message.antarchy.miners_dream_disabled": "Il Sogno del minatore è disattivato.",
|
||||
"message.antarchy.miners_dream_busy": "Il tuo sogno precedente si sta ancora dispiegando.",
|
||||
"item.antarchy.diamond_minecart": "Il carrello di diamante",
|
||||
"item.antarchy.cogwheel_pet": "Famiglio ingranaggio",
|
||||
"item.antarchy.fire_dragon_pet": "Famiglio drago di fuoco",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "ガラス瓶を持ってレヴェリーを右クリックすると収納できます。",
|
||||
"tooltip.antarchy.reverie_bottle.release": "右クリックでレヴェリーを解放します。",
|
||||
"item.antarchy.gravity_gun": "重力銃",
|
||||
"item.antarchy.miners_dream": "採掘者の夢",
|
||||
"tooltip.antarchy.miners_dream.line1": "右クリックで曲がりくねった洞窟を掘ります。",
|
||||
"tooltip.antarchy.miners_dream.line2": "貴重なブロックはそのまま残します。",
|
||||
"message.antarchy.miners_dream_disabled": "採掘者の夢は無効になっています。",
|
||||
"message.antarchy.miners_dream_busy": "前の夢はまだ展開中です。",
|
||||
"item.antarchy.diamond_minecart": "ダイヤモンドのトロッコ",
|
||||
"item.antarchy.cogwheel_pet": "歯車ペット",
|
||||
"item.antarchy.fire_dragon_pet": "ファイアドラゴンのペット",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "유리병으로 레버리를 우클릭하여 담습니다.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "우클릭하여 레버리를 풀어줍니다.",
|
||||
"item.antarchy.gravity_gun": "중력총",
|
||||
"item.antarchy.miners_dream": "광부의 꿈",
|
||||
"tooltip.antarchy.miners_dream.line1": "우클릭하여 구불구불한 동굴을 뚫습니다.",
|
||||
"tooltip.antarchy.miners_dream.line2": "귀중한 블록은 건드리지 않습니다.",
|
||||
"message.antarchy.miners_dream_disabled": "광부의 꿈이 비활성화되어 있습니다.",
|
||||
"message.antarchy.miners_dream_busy": "이전 꿈이 아직 펼쳐지고 있습니다.",
|
||||
"item.antarchy.diamond_minecart": "다이아몬드 광산 수레",
|
||||
"item.antarchy.cogwheel_pet": "톱니바퀴 펫",
|
||||
"item.antarchy.fire_dragon_pet": "화염 드래곤 펫",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Clique com o botão direito em uma Reverie com um frasco de vidro para guardá-la.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Clique com o botão direito para soltar a Reverie.",
|
||||
"item.antarchy.gravity_gun": "Arma Gravitacional",
|
||||
"item.antarchy.miners_dream": "Sonho do Minerador",
|
||||
"tooltip.antarchy.miners_dream.line1": "Clique com o botão direito para escavar uma caverna sinuosa.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Deixa blocos valiosos intactos.",
|
||||
"message.antarchy.miners_dream_disabled": "O Sonho do Minerador está desativado.",
|
||||
"message.antarchy.miners_dream_busy": "Seu sonho anterior ainda está se desenrolando.",
|
||||
"item.antarchy.diamond_minecart": "O Carrinho de Diamante",
|
||||
"item.antarchy.cogwheel_pet": "Mascote de Engrenagem",
|
||||
"item.antarchy.fire_dragon_pet": "Mascote de Dragão de Fogo",
|
||||
|
||||
@@ -387,11 +387,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "Нажмите ПКМ стеклянной бутылочкой по грёзе, чтобы поймать её.",
|
||||
"tooltip.antarchy.reverie_bottle.release": "Нажмите ПКМ, чтобы выпустить грёзу.",
|
||||
"item.antarchy.gravity_gun": "Гравитационная пушка",
|
||||
"item.antarchy.miners_dream": "Мечта шахтёра",
|
||||
"tooltip.antarchy.miners_dream.line1": "Нажмите ПКМ, чтобы вырезать извилистую пещеру.",
|
||||
"tooltip.antarchy.miners_dream.line2": "Оставляет ценные блоки нетронутыми.",
|
||||
"message.antarchy.miners_dream_disabled": "Мечта шахтёра отключена.",
|
||||
"message.antarchy.miners_dream_busy": "Ваша предыдущая мечта всё ещё воплощается.",
|
||||
"item.antarchy.diamond_minecart": "Алмазная вагонетка",
|
||||
"item.antarchy.cogwheel_pet": "Шестерёнка-питомец",
|
||||
"item.antarchy.fire_dragon_pet": "Огненный дракон-питомец",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右键雷弗里即可将其收纳。",
|
||||
"tooltip.antarchy.reverie_bottle.release": "右键释放雷弗里。",
|
||||
"item.antarchy.gravity_gun": "重力枪",
|
||||
"item.antarchy.miners_dream": "矿工之梦",
|
||||
"tooltip.antarchy.miners_dream.line1": "右键挖出一条蜿蜒洞穴。",
|
||||
"tooltip.antarchy.miners_dream.line2": "不会破坏贵重方块。",
|
||||
"message.antarchy.miners_dream_disabled": "矿工之梦已禁用。",
|
||||
"message.antarchy.miners_dream_busy": "你之前的梦仍在展开。",
|
||||
"item.antarchy.diamond_minecart": "钻石矿车",
|
||||
"item.antarchy.cogwheel_pet": "齿轮宠物",
|
||||
"item.antarchy.fire_dragon_pet": "火龙宠物",
|
||||
|
||||
@@ -411,11 +411,6 @@
|
||||
"tooltip.antarchy.reverie_bottle.capture": "手持玻璃瓶右鍵雷弗裡即可將其收納。",
|
||||
"tooltip.antarchy.reverie_bottle.release": "右鍵釋放雷弗裡。",
|
||||
"item.antarchy.gravity_gun": "重力槍",
|
||||
"item.antarchy.miners_dream": "礦工之夢",
|
||||
"tooltip.antarchy.miners_dream.line1": "右鍵挖出一條蜿蜒洞穴。",
|
||||
"tooltip.antarchy.miners_dream.line2": "不會破壞貴重方塊。",
|
||||
"message.antarchy.miners_dream_disabled": "礦工之夢已禁用。",
|
||||
"message.antarchy.miners_dream_busy": "你之前的夢仍在展開。",
|
||||
"item.antarchy.diamond_minecart": "鑽石礦車",
|
||||
"item.antarchy.cogwheel_pet": "齒輪寵物",
|
||||
"item.antarchy.fire_dragon_pet": "火龍寵物",
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "antarchy:item/miners_dream"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 425 B |
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"GGG",
|
||||
"RDR",
|
||||
"TTT"
|
||||
],
|
||||
"key": {
|
||||
"G": { "item": "antarchy:triffid_goo" },
|
||||
"R": { "item": "minecraft:redstone_block" },
|
||||
"D": { "item": "minecraft:diamond_pickaxe" },
|
||||
"T": { "item": "minecraft:tnt" }
|
||||
},
|
||||
"result": {
|
||||
"id": "antarchy:miners_dream",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"category": "misc",
|
||||
"pattern": [
|
||||
"GGG",
|
||||
"RDR",
|
||||
"TTT"
|
||||
],
|
||||
"key": {
|
||||
"G": { "item": "antarchy:triffid_goo" },
|
||||
"R": { "item": "minecraft:redstone_block" },
|
||||
"D": { "item": "minecraft:diamond_pickaxe" },
|
||||
"T": { "item": "minecraft:tnt" }
|
||||
},
|
||||
"result": {
|
||||
"item": "antarchy:miners_dream",
|
||||
"count": 1
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#minecraft:base_stone_overworld",
|
||||
"#minecraft:base_stone_nether",
|
||||
"minecraft:stone",
|
||||
"minecraft:deepslate",
|
||||
"minecraft:granite",
|
||||
"minecraft:diorite",
|
||||
"minecraft:andesite",
|
||||
"minecraft:tuff",
|
||||
"minecraft:calcite",
|
||||
"minecraft:netherrack",
|
||||
"minecraft:blackstone",
|
||||
"minecraft:basalt",
|
||||
"minecraft:smooth_basalt",
|
||||
"minecraft:end_stone",
|
||||
"minecraft:dirt",
|
||||
"minecraft:coarse_dirt",
|
||||
"minecraft:rooted_dirt",
|
||||
"minecraft:podzol",
|
||||
"minecraft:mycelium",
|
||||
"minecraft:gravel",
|
||||
"minecraft:sand",
|
||||
"minecraft:red_sand",
|
||||
"minecraft:sandstone",
|
||||
"minecraft:red_sandstone",
|
||||
"minecraft:clay",
|
||||
"minecraft:soul_sand",
|
||||
"minecraft:soul_soil",
|
||||
"antarchy:nyxite",
|
||||
"antarchy:pale_nyxite",
|
||||
"antarchy:dream_sand",
|
||||
"antarchy:dream_sandstone"
|
||||
]
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#minecraft:base_stone_overworld",
|
||||
"#minecraft:base_stone_nether",
|
||||
"minecraft:stone",
|
||||
"minecraft:deepslate",
|
||||
"minecraft:granite",
|
||||
"minecraft:diorite",
|
||||
"minecraft:andesite",
|
||||
"minecraft:tuff",
|
||||
"minecraft:calcite",
|
||||
"minecraft:netherrack",
|
||||
"minecraft:blackstone",
|
||||
"minecraft:basalt",
|
||||
"minecraft:smooth_basalt",
|
||||
"minecraft:end_stone",
|
||||
"minecraft:dirt",
|
||||
"minecraft:coarse_dirt",
|
||||
"minecraft:rooted_dirt",
|
||||
"minecraft:podzol",
|
||||
"minecraft:mycelium",
|
||||
"minecraft:gravel",
|
||||
"minecraft:sand",
|
||||
"minecraft:red_sand",
|
||||
"minecraft:sandstone",
|
||||
"minecraft:red_sandstone",
|
||||
"minecraft:clay",
|
||||
"minecraft:soul_sand",
|
||||
"minecraft:soul_soil",
|
||||
"antarchy:nyxite",
|
||||
"antarchy:pale_nyxite",
|
||||
"antarchy:dream_sand",
|
||||
"antarchy:dream_sandstone"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user