tangled
alpha
login
or
join now
codexarchonic.nekoweb.org
/
ProjectInfinity
0
fork
atom
Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
0
fork
atom
overview
issues
6
pulls
pipelines
Create 6.0 support
cassian.cc
7 months ago
af384530
aaf27f08
+194
-12
8 changed files
expand all
collapse all
unified
split
common
build.gradle
src
main
java
net
lerariemann
infinity
block
custom
RailHelper.java
compat
CreateCompat.java
registry
core
ModBlockEntities.java
ModBlocks.java
util
teleport
PortalCreator.java
gradle.properties
neoforge
src
main
java
net
lerariemann
infinity
neoforge
InfinityModNeoForge.java
+17
-2
common/build.gradle
···
14
14
url = "https://maven.terraformersmc.com/"
15
15
}
16
16
maven { url 'https://jitpack.io' }
17
17
+
exclusiveContent {
18
18
+
forRepository {
19
19
+
maven {
20
20
+
name = "Fabricators of Create"
21
21
+
url = "https://mvn.devos.one/snapshots"
22
22
+
}
23
23
+
}
24
24
+
filter {
25
25
+
includeGroup "io.github.fabricators_of_create"
26
26
+
includeGroup "io.github.fabricators_of_create.Porting-Lib"
27
27
+
includeGroup "com.tterrag.registrate_fabric"
28
28
+
includeGroup "io.github.tropheusj"
29
29
+
includeGroup "com.simibubi.create"
30
30
+
}
31
31
+
}
17
32
}
18
33
19
34
dependencies {
···
39
54
// EMI
40
55
modCompileOnly("dev.emi:emi-xplat-intermediary:$emi_version+$minecraft_version:api")
41
56
42
42
-
// Ponder
57
57
+
// Create
43
58
modCompileOnly("net.createmod.ponder:Ponder-Fabric-${minecraft_version}:${ponder_version}")
44
44
-
59
59
+
modCompileOnly("com.simibubi.create:create-fucked-up-${minecraft_version}:6.0.6+053024d") { transitive = false }
45
60
}
46
61
47
62
loom {
+60
common/src/main/java/net/lerariemann/infinity/block/custom/RailHelper.java
···
1
1
+
package net.lerariemann.infinity.block.custom;
2
2
+
3
3
+
import com.mojang.serialization.MapCodec;
4
4
+
import dev.architectury.platform.Platform;
5
5
+
import net.lerariemann.infinity.compat.CreateCompat;
6
6
+
import net.lerariemann.infinity.registry.core.ModBlockEntities;
7
7
+
import net.minecraft.block.BlockState;
8
8
+
import net.minecraft.block.BlockWithEntity;
9
9
+
import net.minecraft.block.Blocks;
10
10
+
import net.minecraft.block.entity.BlockEntity;
11
11
+
import net.minecraft.server.world.ServerWorld;
12
12
+
import net.minecraft.util.Identifier;
13
13
+
import net.minecraft.util.math.BlockPos;
14
14
+
import net.minecraft.util.math.random.Random;
15
15
+
import net.minecraft.world.World;
16
16
+
import org.jetbrains.annotations.Nullable;
17
17
+
18
18
+
public class RailHelper extends BlockWithEntity {
19
19
+
public RailHelper(Settings settings) {
20
20
+
super(settings);
21
21
+
}
22
22
+
23
23
+
@Override
24
24
+
protected MapCodec<? extends BlockWithEntity> getCodec() {
25
25
+
return null;
26
26
+
}
27
27
+
28
28
+
@Override
29
29
+
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify) {
30
30
+
world.scheduleBlockTick(pos, this, 1);
31
31
+
}
32
32
+
33
33
+
@Override
34
34
+
public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
35
35
+
if (Platform.isModLoaded("create")) {
36
36
+
CreateCompat.reattachRails(world, pos, getBlockEntity(world, pos));
37
37
+
}
38
38
+
else world.setBlockState(pos, Blocks.AIR.getDefaultState());
39
39
+
}
40
40
+
41
41
+
public static RHBEntity getBlockEntity(ServerWorld world, BlockPos pos) {
42
42
+
return ((RHBEntity)world.getBlockEntity(pos));
43
43
+
}
44
44
+
45
45
+
@Override
46
46
+
public @Nullable BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
47
47
+
return new RHBEntity(pos, state);
48
48
+
}
49
49
+
50
50
+
public static class RHBEntity extends BlockEntity {
51
51
+
public Identifier trackBlock;
52
52
+
public String shape;
53
53
+
54
54
+
public RHBEntity(BlockPos pos, BlockState state) {
55
55
+
super(ModBlockEntities.RAIL_HELPER.get(), pos, state);
56
56
+
trackBlock = null;
57
57
+
shape = "xo";
58
58
+
}
59
59
+
}
60
60
+
}
+87
common/src/main/java/net/lerariemann/infinity/compat/CreateCompat.java
···
1
1
+
package net.lerariemann.infinity.compat;
2
2
+
3
3
+
import com.simibubi.create.api.contraption.train.PortalTrackProvider;
4
4
+
import com.simibubi.create.content.trains.track.AllPortalTracks;
5
5
+
import com.simibubi.create.content.trains.track.TrackBlock;
6
6
+
import com.simibubi.create.content.trains.track.TrackShape;
7
7
+
import net.createmod.catnip.math.BlockFace;
8
8
+
import net.lerariemann.infinity.block.custom.RailHelper;
9
9
+
import net.lerariemann.infinity.block.entity.InfinityPortalBlockEntity;
10
10
+
import net.lerariemann.infinity.registry.core.ModBlocks;
11
11
+
import net.minecraft.block.Block;
12
12
+
import net.minecraft.block.BlockState;
13
13
+
import net.minecraft.block.Blocks;
14
14
+
import net.minecraft.registry.Registries;
15
15
+
import net.minecraft.server.MinecraftServer;
16
16
+
import net.minecraft.server.world.ServerWorld;
17
17
+
import net.minecraft.state.property.Properties;
18
18
+
import net.minecraft.util.math.BlockPos;
19
19
+
import net.minecraft.util.math.Direction;
20
20
+
import net.minecraft.world.World;
21
21
+
22
22
+
import java.util.Optional;
23
23
+
import java.util.Set;
24
24
+
25
25
+
public class CreateCompat {
26
26
+
private static PortalTrackProvider.Exit infinityPortalProvider(ServerWorld worldFrom, BlockFace blockFace) {
27
27
+
MinecraftServer server = worldFrom.getServer();
28
28
+
// if (!server.isNetherAllowed()) return null;
29
29
+
BlockPos posFrom = blockFace.getConnectedPos();
30
30
+
if (worldFrom.getBlockEntity(posFrom) instanceof InfinityPortalBlockEntity ipbe
31
31
+
&& ipbe.isConnectedBothSides()) { //we only allow trains through if portals are in sync
32
32
+
ServerWorld worldTo = ipbe.getDimensionAsWorld();
33
33
+
BlockPos posTo = ipbe.getOtherSidePos();
34
34
+
assert posTo != null;
35
35
+
Direction targetDirection = blockFace.getFace();
36
36
+
Direction.Axis axisTo = worldTo.getBlockState(posTo).get(Properties.HORIZONTAL_AXIS);
37
37
+
if (targetDirection.getAxis().equals(axisTo)) {
38
38
+
targetDirection = targetDirection.rotateYClockwise();
39
39
+
}
40
40
+
return new PortalTrackProvider.Exit(worldTo, new BlockFace(posTo.offset(targetDirection), targetDirection.getOpposite()));
41
41
+
}
42
42
+
return null;
43
43
+
}
44
44
+
45
45
+
public static void register() {
46
46
+
AllPortalTracks.tryRegisterIntegration(ModBlocks.PORTAL.get().arch$registryName(), CreateCompat::infinityPortalProvider);
47
47
+
}
48
48
+
49
49
+
public static void tryModifyRails(InfinityPortalBlockEntity ipbe) {
50
50
+
World w = ipbe.getWorld();
51
51
+
if (w instanceof ServerWorld worldFrom) {
52
52
+
BlockPos posFrom = ipbe.getPos();
53
53
+
BlockState state = worldFrom.getBlockState(posFrom);
54
54
+
if (!state.isOf(ModBlocks.PORTAL.get())) return;
55
55
+
Set<Direction> toCheck = state.get(Properties.HORIZONTAL_AXIS).equals(Direction.Axis.X) ?
56
56
+
Set.of(Direction.NORTH, Direction.SOUTH) : Set.of(Direction.EAST, Direction.WEST);
57
57
+
for (Direction dir : toCheck) {
58
58
+
BlockPos posTrack = posFrom.offset(dir);
59
59
+
BlockState bs = worldFrom.getBlockState(posTrack);
60
60
+
if (bs.getBlock() instanceof TrackBlock)
61
61
+
modifyRails(ipbe, worldFrom, posTrack, bs);
62
62
+
}
63
63
+
}
64
64
+
}
65
65
+
66
66
+
public static void modifyRails(InfinityPortalBlockEntity ipbe, ServerWorld worldFrom,
67
67
+
BlockPos posTrack, BlockState bs) {
68
68
+
if (ipbe.isConnectedBothSides()) {
69
69
+
if (!bs.contains(TrackBlock.SHAPE)) return;
70
70
+
worldFrom.setBlockState(posTrack, ModBlocks.RAIL_HELPER.get().getDefaultState());
71
71
+
RailHelper.RHBEntity e = RailHelper.getBlockEntity(worldFrom, posTrack);
72
72
+
e.trackBlock = Registries.BLOCK.getId(bs.getBlock());
73
73
+
e.shape = switch (bs.get(TrackBlock.SHAPE)) {
74
74
+
case TN, TS -> "zo";
75
75
+
default -> "xo";
76
76
+
};
77
77
+
}
78
78
+
worldFrom.setBlockState(posTrack, Blocks.AIR.getDefaultState());
79
79
+
}
80
80
+
public static void reattachRails(ServerWorld world, BlockPos pos, RailHelper.RHBEntity e) {
81
81
+
BlockState bs;
82
82
+
Optional<Block> b = Registries.BLOCK.getOrEmpty(e.trackBlock);
83
83
+
if (b.isEmpty() || !(b.get() instanceof TrackBlock)) bs = Blocks.AIR.getDefaultState();
84
84
+
else bs = b.get().getDefaultState().with(TrackBlock.SHAPE, e.shape.equals("zo") ? TrackShape.ZO : TrackShape.XO);
85
85
+
world.setBlockState(pos, bs);
86
86
+
}
87
87
+
}
+5
common/src/main/java/net/lerariemann/infinity/registry/core/ModBlockEntities.java
···
6
6
import dev.architectury.registry.registries.DeferredRegister;
7
7
import dev.architectury.registry.registries.RegistrySupplier;
8
8
import net.lerariemann.infinity.InfinityMod;
9
9
+
import net.lerariemann.infinity.block.custom.RailHelper;
9
10
import net.lerariemann.infinity.block.entity.*;
10
11
import net.minecraft.block.entity.BlockEntityType;
11
12
import net.minecraft.datafixer.TypeReferences;
···
37
38
BlockEntityType.Builder.create(ChromaticBlockEntity::new,
38
39
ModBlocks.CHROMATIC_WOOL.get(),
39
40
ModBlocks.CHROMATIC_CARPET.get()).build(type("chromatic")));
41
41
+
public static final RegistrySupplier<BlockEntityType<RailHelper.RHBEntity>> RAIL_HELPER =
42
42
+
BLOCK_ENTITY_TYPES.register("rail_helper_block_entity", () ->
43
43
+
BlockEntityType.Builder.create(RailHelper.RHBEntity::new,
44
44
+
ModBlocks.RAIL_HELPER.get()).build(type("rail_helper_block_entity")));
40
45
41
46
42
47
public static void registerBlockEntities() {
+3
common/src/main/java/net/lerariemann/infinity/registry/core/ModBlocks.java
···
6
6
import net.lerariemann.infinity.util.PlatformMethods;
7
7
import net.lerariemann.infinity.block.custom.*;
8
8
import net.minecraft.block.*;
9
9
+
import net.minecraft.block.piston.PistonBehavior;
9
10
import net.minecraft.registry.RegistryKeys;
10
11
import net.minecraft.sound.BlockSoundGroup;
11
12
···
52
53
new NotesBlock(AbstractBlock.Settings.copy(Blocks.NOTE_BLOCK).ticksRandomly()));
53
54
public static final RegistrySupplier<Block> HAUNTED_AIR = BLOCKS.register("haunted_air", () ->
54
55
new HauntedBlock(Blocks.AIR));
56
56
+
public static final RegistrySupplier<RailHelper> RAIL_HELPER = BLOCKS.register("rail_helper", () ->
57
57
+
new RailHelper(AbstractBlock.Settings.create().strength(-1.0F, 3600000.8F).mapColor(MapColor.CLEAR).dropsNothing().nonOpaque().allowsSpawning(Blocks::never).noBlockBreakParticles().pistonBehavior(PistonBehavior.BLOCK)));
55
58
56
59
public static void registerModBlocks() {
57
60
InfinityMod.LOGGER.debug("Registering blocks for " + MOD_ID);
+10
-7
common/src/main/java/net/lerariemann/infinity/util/teleport/PortalCreator.java
···
4
4
import net.lerariemann.infinity.InfinityMod;
5
5
import net.lerariemann.infinity.access.MinecraftServerAccess;
6
6
import net.lerariemann.infinity.block.custom.Boopable;
7
7
+
import net.lerariemann.infinity.compat.CreateCompat;
7
8
import net.lerariemann.infinity.compat.DimLibCompat;
8
9
import net.lerariemann.infinity.registry.core.ModBlocks;
9
10
import net.lerariemann.infinity.block.custom.InfinityPortalBlock;
···
227
228
228
229
static PortalModifierUnion forInitialSetupping(ServerWorld world, BlockPos pos, Identifier id, boolean open) {
229
230
PortalColorApplier applier = PortalColorApplier.of(id, world.getServer());
230
230
-
return new PortalModifierUnion()
231
231
+
PortalModifierUnion union = new PortalModifierUnion()
231
232
.addSetupper(infPortalSetupper(world, pos))
232
232
-
.addModifier(npbe -> {
233
233
-
npbe.setDimension(id);
234
234
-
npbe.setColor(applier.apply(npbe.getPos()));
235
235
-
npbe.setOpen(open);
236
236
-
npbe.markDirty();
237
237
-
});
233
233
+
.addModifier(nbpe -> nbpe.setDimension(id))
234
234
+
.addModifier(npbe -> npbe.setColor(applier.apply(npbe.getPos())))
235
235
+
.addModifier(npbe -> npbe.setOpen(open))
236
236
+
.addModifier(BlockEntity::markDirty);
237
237
+
if (Platform.isModLoaded("create")) {
238
238
+
union.addModifier(CreateCompat::tryModifyRails);
239
239
+
}
240
240
+
return union;
238
241
}
239
242
240
243
/**
+8
-3
gradle.properties
···
3
3
org.gradle.parallel=true
4
4
5
5
# Mod properties
6
6
-
mod_version = 2.5.0
6
6
+
mod_version = 2.5.1
7
7
maven_group = net.lerariemann
8
8
archives_name = infinity
9
9
enabled_platforms = fabric,neoforge
10
10
-
tbversion = 0
10
10
+
tbversion = 1
11
11
12
12
# Minecraft properties
13
13
minecraft_version = 1.21.1
···
41
41
cct_version = 1.115.0
42
42
emi_version = 1.1.18
43
43
dimlib_version = v1.1.0-mc1.21.1
44
44
-
ponder_version = 1.0.52
44
44
+
45
45
+
# Create - NeoForge
46
46
+
create_forge_version = 6.0.6-98
47
47
+
ponder_version = 1.0.59
48
48
+
flywheel_forge_version = 1.0.4
49
49
+
registrate_forge_version = MC1.21-1.3.0+62
+4
neoforge/src/main/java/net/lerariemann/infinity/neoforge/InfinityModNeoForge.java
···
1
1
package net.lerariemann.infinity.neoforge;
2
2
3
3
+
import dev.architectury.platform.Platform;
3
4
import net.lerariemann.infinity.InfinityMod;
5
5
+
import net.lerariemann.infinity.compat.CreateCompat;
4
6
import net.lerariemann.infinity.util.neoforge.NeoItems;
5
7
import net.lerariemann.infinity.registry.core.ModBlocks;
6
8
import net.lerariemann.infinity.registry.core.ModEntities;
···
57
59
ModStats.load();
58
60
ModBlocks.registerFlammableBlocks();
59
61
ModItemFunctions.registerDispenserBehaviour();
62
62
+
if (Platform.isModLoaded("create"))
63
63
+
CreateCompat.register();
60
64
}
61
65
62
66
public static MinecraftClient client() {