Skip to content

Commit 90f7169

Browse files
robotgryphonBuildTools
andcommitted
Added Poison Effect Upon leaving room's area (#534)
* Fixed CompactStructureGenerator Should now properly remove MachineVoidAir * Added Config for damaging players outside of machine related to MachineVoidAir Co-authored-by: BuildTools <[email protected]>
1 parent 7c3dadd commit 90f7169

File tree

8 files changed

+84
-8
lines changed

8 files changed

+84
-8
lines changed

src/datagen/java/dev/compactmods/machines/datagen/LevelBiomeGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.google.gson.JsonObject;
99
import com.mojang.serialization.JsonOps;
1010
import dev.compactmods.machines.CompactMachines;
11+
import dev.compactmods.machines.core.Registration;
1112
import net.minecraft.core.Holder;
1213
import net.minecraft.core.Registry;
1314
import net.minecraft.core.RegistryAccess;
@@ -18,7 +19,6 @@
1819
import net.minecraft.world.level.biome.BiomeGenerationSettings;
1920
import net.minecraft.world.level.biome.BiomeSpecialEffects;
2021
import net.minecraft.world.level.biome.MobSpawnSettings;
21-
import net.minecraft.world.level.block.Blocks;
2222
import net.minecraft.world.level.chunk.ChunkGenerator;
2323
import net.minecraft.world.level.dimension.DimensionType;
2424
import net.minecraft.world.level.dimension.LevelStem;
@@ -93,7 +93,7 @@ private void writeDimensions(HashMap<ResourceLocation, Biome> biomes, HashMap<Re
9393
var flatSettings = new FlatLevelGeneratorSettings(Optional.empty(), BuiltinRegistries.BIOME);
9494

9595
flatSettings.setBiome(Holder.direct(biomes.get(COMPACT_BIOME)));
96-
flatSettings.getLayersInfo().add(new FlatLayerInfo(1, Blocks.AIR));
96+
flatSettings.getLayersInfo().add(new FlatLayerInfo(dimTypes.get(COMPACT_LEVEL).height(), Registration.BLOCK_MACHINE_VOID_AIR.get()));
9797
flatSettings.updateLayers();
9898

9999
var stem = new LevelStem(Holder.direct(dimTypes.get(COMPACT_LEVEL)), new FlatLevelSource(ssreg, flatSettings));

src/datagen/java/dev/compactmods/machines/datagen/lang/EnglishLangGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import dev.compactmods.machines.core.Tunnels;
1010
import dev.compactmods.machines.room.RoomSize;
1111
import dev.compactmods.machines.upgrade.MachineRoomUpgrades;
12+
import dev.compactmods.machines.wall.MachineVoidAir;
1213
import net.minecraft.data.DataGenerator;
1314
import net.minecraft.world.item.Item;
1415
import net.minecraftforge.registries.RegistryObject;
@@ -120,6 +121,7 @@ protected void addTranslations() {
120121
add("jei.compactmachines.machines", "Machines are used to make pocket dimensions. Craft a machine and place it in world, then use a Personal Shrinking Device to go inside.");
121122
add("jei.compactmachines.shrinking_device", "Use the Personal Shrinking Device (PSD) on a machine in order to enter a compact space. " +
122123
"You can also right click it in the overworld for more info.");
124+
add("death.attack." + MachineVoidAir.DAMAGE_SOURCE.msgId, "%1$s failed to enter the void");
123125
}
124126

125127
@Override

src/main/java/dev/compactmods/machines/config/ServerConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public class ServerConfig {
2222

2323
private static ForgeConfigSpec.IntValue CHANGE_ROOM_UPGRADES;
2424

25+
private static ForgeConfigSpec.BooleanValue ALLOWED_OUTSIDE_MACHINE;
26+
2527
static {
2628
generateConfig();
2729
}
@@ -51,6 +53,11 @@ private static void generateConfig() {
5153
.comment("The Y-dimension to spawn machine floors at.")
5254
.defineInRange("floor", 40, 10, 200);
5355

56+
ALLOWED_OUTSIDE_MACHINE = builder
57+
.comment("Specify if we want to damage player's that managed to escape the boundries")
58+
.comment("default: false")
59+
.define("allowOutside", false);
60+
5461
builder.pop();
5562

5663
builder
@@ -76,6 +83,7 @@ private static void generateConfig() {
7683
.comment("Command level required for changing room upgrades.")
7784
.defineInRange("upgrades", Commands.LEVEL_GAMEMASTERS, Commands.LEVEL_ALL, Commands.LEVEL_OWNERS);
7885

86+
7987
builder.pop(2);
8088

8189
CONFIG = builder.build();
@@ -94,4 +102,8 @@ public static int changeRoomSpawn() {
94102
}
95103

96104
public static int changeUpgrades() { return CHANGE_ROOM_UPGRADES.get(); }
105+
106+
public static Boolean isAllowedOutsideOfMachine() {
107+
return ALLOWED_OUTSIDE_MACHINE.get();
108+
}
97109
}

src/main/java/dev/compactmods/machines/core/Registration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import dev.compactmods.machines.item.PersonalShrinkingDevice;
55
import dev.compactmods.machines.machine.CompactMachineBlock;
66
import dev.compactmods.machines.machine.CompactMachineBlockEntity;
7+
import dev.compactmods.machines.wall.BreakableWallBlock;
8+
import dev.compactmods.machines.wall.MachineVoidAir;
9+
import dev.compactmods.machines.wall.SolidWallBlock;
710
import dev.compactmods.machines.machine.CompactMachineItem;
811
import dev.compactmods.machines.room.ItemBlockWall;
912
import dev.compactmods.machines.room.RoomSize;
@@ -124,6 +127,12 @@ public class Registration {
124127
public static final RegistryObject<Item> ITEM_BREAKABLE_WALL = ITEMS.register("wall", () ->
125128
new ItemBlockWall(BLOCK_BREAKABLE_WALL.get(), BASIC_ITEM_PROPS.get()));
126129

130+
// ================================================================================================================
131+
// Machine Void Air
132+
// ================================================================================================================
133+
public static final RegistryObject<Block> BLOCK_MACHINE_VOID_AIR = BLOCKS.register("machine_void_air", () ->
134+
new MachineVoidAir());
135+
127136
// ================================================================================================================
128137
// DIMENSION
129138
// ================================================================================================================

src/main/java/dev/compactmods/machines/upgrade/ChunkloadUpgradeItem.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public class ChunkloadUpgradeItem extends RoomUpgradeItem {
1010
public ChunkloadUpgradeItem(Properties props) {
1111
super(props);
1212
}
13-
1413
@Override
1514
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> stacks) {
1615
final var stack = new ItemStack(MachineRoomUpgrades.CHUNKLOADER.get(), 1);
@@ -19,7 +18,6 @@ public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> stacks)
1918

2019
stacks.add(stack);
2120
}
22-
2321
@Override
2422
public RoomUpgrade getUpgradeType() {
2523
return MachineRoomUpgrades.CHUNKLOAD.get();

src/main/java/dev/compactmods/machines/util/CompactStructureGenerator.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.core.BlockPos;
66
import net.minecraft.core.Direction;
77
import net.minecraft.world.level.LevelAccessor;
8+
import net.minecraft.world.level.block.Blocks;
89
import net.minecraft.world.phys.AABB;
910

1011
import java.util.Arrays;
@@ -75,15 +76,23 @@ public static void generateCompactStructure(LevelAccessor world, RoomSize size,
7576
int s = size.getInternalSize() / 2;
7677

7778
BlockPos floorCenter = center.relative(Direction.DOWN, s);
79+
BlockPos machineTopCenter = center.relative(Direction.UP, s);
80+
7881
AABB floorBlocks = new AABB(floorCenter, floorCenter)
7982
.inflate(s, 0, s);
83+
AABB machineInternal = new AABB(machineTopCenter, floorCenter)
84+
.inflate(s, 0, s);
85+
8086

8187
boolean anyAir = BlockPos.betweenClosedStream(floorBlocks).anyMatch(world::isEmptyBlock);
8288

83-
if (anyAir) {
84-
// Generate the walls
89+
if (anyAir) { // Generate the walls
8590
Arrays.stream(Direction.values())
8691
.forEach(d -> generateCompactWall(world, size, center, d));
92+
93+
BlockPos.betweenClosedStream(machineInternal)
94+
.forEach(p -> world.setBlock(p, Blocks.AIR.defaultBlockState(), 7));
95+
8796
}
8897
}
8998
}

src/main/java/dev/compactmods/machines/util/PlayerUtil.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import dev.compactmods.machines.advancement.AdvancementTriggers;
66
import dev.compactmods.machines.api.core.Messages;
77
import dev.compactmods.machines.core.Capabilities;
8-
import dev.compactmods.machines.location.LevelBlockPosition;
98
import dev.compactmods.machines.core.MissingDimensionException;
109
import dev.compactmods.machines.core.Registration;
1110
import dev.compactmods.machines.i18n.TranslationUtil;
@@ -27,7 +26,6 @@
2726
import net.minecraft.world.level.chunk.LevelChunk;
2827
import net.minecraft.world.phys.Vec3;
2928
import net.minecraftforge.common.util.LazyOptional;
30-
3129
import javax.annotation.Nonnull;
3230
import java.util.Optional;
3331
import java.util.UUID;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package dev.compactmods.machines.wall;
2+
3+
import dev.compactmods.machines.CompactMachines;
4+
import dev.compactmods.machines.config.ServerConfig;
5+
import dev.compactmods.machines.core.Registration;
6+
import dev.compactmods.machines.util.PlayerUtil;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.server.level.ServerLevel;
9+
import net.minecraft.server.level.ServerPlayer;
10+
import net.minecraft.world.damagesource.DamageSource;
11+
import net.minecraft.world.effect.MobEffectInstance;
12+
import net.minecraft.world.effect.MobEffects;
13+
import net.minecraft.world.entity.Entity;
14+
import net.minecraft.world.level.Level;
15+
import net.minecraft.world.level.block.AirBlock;
16+
import net.minecraft.world.level.block.state.BlockBehaviour;
17+
import net.minecraft.world.level.block.state.BlockState;
18+
import net.minecraft.world.level.material.Material;
19+
20+
import static dev.compactmods.machines.CompactMachines.MOD_ID;
21+
22+
23+
public class MachineVoidAir extends AirBlock {
24+
final public static DamageSource DAMAGE_SOURCE = new DamageSource(MOD_ID + "_voidair");
25+
26+
public MachineVoidAir() {
27+
super(BlockBehaviour.Properties.of(Material.AIR).noCollission().noDrops().air());
28+
}
29+
30+
31+
@Override
32+
public void entityInside(BlockState pState, Level pLevel, BlockPos pPos, Entity pEntity) {
33+
if (ServerConfig.isAllowedOutsideOfMachine()) return;
34+
if (pLevel.isClientSide) return;
35+
36+
if (pEntity instanceof ServerPlayer player) {
37+
if (player.isCreative()) return;
38+
39+
if (player.getActiveEffectsMap().containsKey(MobEffects.BLINDNESS))
40+
PlayerUtil.teleportPlayerOutOfMachine((ServerLevel) pLevel, player);
41+
42+
43+
player.addEffect(new MobEffectInstance(MobEffects.POISON, 5 * 20));
44+
player.addEffect(new MobEffectInstance(MobEffects.BLINDNESS, 5 * 20));
45+
player.hurt(DAMAGE_SOURCE, 1);
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)