moved miners dream to seperate mod

new portal gun draft
fixed scorched guns mixin
sodium compat layer
This commit is contained in:
craisinlord committed 2026-09-29 23:37:11 -05:00
1 parent 23599c4c59
commit c7cb48edfb
193 files changed
+6528 -2821

No files matched your search

@@ -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"));
@@ -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;
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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();
}
}
}
}
@@ -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);
}
}
@@ -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"
]
}