Skip to content

Commit c8389e5

Browse files
committed
config logic - allowing for alternative or normal building system
1 parent ff11a23 commit c8389e5

File tree

4 files changed

+38
-9
lines changed

4 files changed

+38
-9
lines changed

src/main/java/ace/actually/pirates/Pirates.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import ace.actually.pirates.entities.pirate_default.PirateEntity;
99
import ace.actually.pirates.entities.pirate_skeleton.SkeletonPirateEntity;
1010
import ace.actually.pirates.sound.ModSounds;
11+
import ace.actually.pirates.util.ConfigUtils;
1112
import ace.actually.pirates.util.PatternProcessor;
1213
import net.fabricmc.api.ModInitializer;
1314
import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory;
@@ -54,14 +55,15 @@ public class Pirates implements ModInitializer {
5455

5556
@Override
5657
public void onInitialize() {
58+
59+
ConfigUtils.checkConfigs();
5760
registerEntityThings();
5861
//entity types do it themselves
5962
registerBlocks();
6063
registerItems();
6164
//block entities do it themselves
6265
//registerDispenserThings();
6366
PatternProcessor.setupBasicPatterns();
64-
//ConfigUtils.checkConfigs();
6567
ModSounds.registerSounds();
6668
LOGGER.info("Let there be motion!");
6769

src/main/java/ace/actually/pirates/blocks/entity/CannonPrimingBlockEntity.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import ace.actually.pirates.Pirates;
44
import ace.actually.pirates.blocks.CannonPrimingBlock;
5+
import ace.actually.pirates.util.ConfigUtils;
56
import net.minecraft.block.*;
67
import net.minecraft.block.entity.BlockEntity;
78
import net.minecraft.state.property.Properties;
@@ -16,6 +17,7 @@ public class CannonPrimingBlockEntity extends BlockEntity {
1617
public int cooldown = 0;
1718
private int lastCooldown = 40;
1819
public final double randomRotation;
20+
private static int cooldownConfig = -5;
1921

2022

2123
public CannonPrimingBlockEntity(BlockPos pos, BlockState state) {
@@ -61,7 +63,11 @@ public void fire(World world, BlockPos pos, BlockState state, int cooldown) {
6163
}
6264

6365
public void fire(World world, BlockPos pos, BlockState state) {
64-
fire(world, pos, state, 40 + (int) (Math.random() * 20));
66+
if(cooldownConfig==-5)
67+
{
68+
cooldownConfig = Integer.parseInt(ConfigUtils.config.getOrDefault("cannon-firing-pause","40"));
69+
}
70+
fire(world, pos, state, cooldownConfig + (int) (Math.random() * 20));
6571
}
6672

6773

src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java

+26-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ace.actually.pirates.blocks.entity;
22

33
import ace.actually.pirates.blocks.MotionInvokingBlock;
4+
import ace.actually.pirates.util.ConfigUtils;
45
import ace.actually.pirates.util.PatternProcessor;
56
import ace.actually.pirates.Pirates;
67
import net.minecraft.block.Block;
@@ -9,13 +10,15 @@
910
import net.minecraft.block.entity.BlockEntity;
1011
import net.minecraft.nbt.NbtCompound;
1112
import net.minecraft.nbt.NbtList;
13+
import net.minecraft.registry.tag.BlockTags;
1214
import net.minecraft.server.world.ServerWorld;
1315
import net.minecraft.util.math.BlockPos;
1416
import net.minecraft.util.math.ChunkPos;
1517
import net.minecraft.world.World;
1618
import org.valkyrienskies.core.api.ships.LoadedServerShip;
1719
import org.valkyrienskies.core.util.datastructures.DenseBlockPosSet;
1820
import org.valkyrienskies.eureka.block.ShipHelmBlock;
21+
import org.valkyrienskies.eureka.util.ShipAssembler;
1922
import org.valkyrienskies.mod.api.SeatedControllingPlayer;
2023
import org.valkyrienskies.mod.common.VSGameUtilsKt;
2124
import org.valkyrienskies.mod.common.ValkyrienSkiesMod;
@@ -31,6 +34,8 @@ public class MotionInvokingBlockEntity extends BlockEntity {
3134
NbtList instructions = new NbtList();
3235
long nextInstruction = 0;
3336

37+
private static int maxShipSizeConfig = -5;
38+
3439
public MotionInvokingBlockEntity(BlockPos pos, BlockState state) {
3540
super(Pirates.MOTION_INVOKING_BLOCK_ENTITY, pos, state);
3641
}
@@ -89,8 +94,19 @@ public static void tick(World world, BlockPos pos, BlockState state, MotionInvok
8994
}
9095

9196
private void buildShipRec(ServerWorld world, BlockPos pos) {
92-
//ShipAssembler.INSTANCE.collectBlocks(world, pos, a -> !a.isAir() && !a.isOf(Blocks.WATER) && !a.isOf(Blocks.KELP) && !a.isOf(Blocks.KELP_PLANT) && !a.isOf(Blocks.SAND) && !a.isIn(BlockTags.ICE) && !a.isOf(Blocks.STONE));
93-
collectBlocks(world,pos);
97+
if(maxShipSizeConfig ==-5)
98+
{
99+
maxShipSizeConfig = Integer.parseInt(ConfigUtils.config.getOrDefault("max-ship-blocks","5000"));
100+
}
101+
if(maxShipSizeConfig ==-1)
102+
{
103+
ShipAssembler.INSTANCE.collectBlocks(world, pos, a -> !a.isAir() && !a.isOf(Blocks.WATER) && !a.isOf(Blocks.KELP) && !a.isOf(Blocks.KELP_PLANT) && !a.isOf(Blocks.SAND) && !a.isIn(BlockTags.ICE) && !a.isOf(Blocks.STONE));
104+
}
105+
else
106+
{
107+
collectBlocks(world,pos);
108+
}
109+
94110
}
95111

96112
@Override
@@ -133,7 +149,7 @@ private void utiliseInternalPattern(SeatedControllingPlayer seatedControllingPla
133149
public void collectBlocks(ServerWorld world, BlockPos center)
134150
{
135151
sortDense(world,center);
136-
if(SET.size()<5000)
152+
if(SET.size()< maxShipSizeConfig)
137153
{
138154
ShipAssemblyKt.createNewShipWithBlocks(center, SET, world);
139155
}
@@ -143,29 +159,32 @@ public void collectBlocks(ServerWorld world, BlockPos center)
143159
}
144160
}
145161

146-
private static final List<Block> a = List.of(Blocks.SAND,Blocks.STONE,Blocks.ICE,Blocks.PACKED_ICE,Blocks.BLUE_ICE,Blocks.KELP,Blocks.KELP_PLANT,Blocks.AIR,Blocks.WATER);
162+
private static final List<Block> a = List.of(Blocks.SAND,Blocks.GRAVEL,Blocks.STONE,Blocks.ICE,Blocks.PACKED_ICE,Blocks.BLUE_ICE,Blocks.KELP,Blocks.KELP_PLANT,Blocks.AIR,Blocks.CAVE_AIR,Blocks.VOID_AIR,Blocks.WATER);
147163
private static final DenseBlockPosSet SET = new DenseBlockPosSet();
148164

149165
public void sortDense(ServerWorld world, BlockPos here)
150166
{
151167
for (int i = -2; i < 3; i++) {
152168
for (int j = -2; j < 3; j++) {
153169
for (int k = -2; k < 3; k++) {
154-
//this means that we could hit 5000 in this loop, this is considered a false-start
155-
if(SET.getSize()<5000)
170+
//this means that we could hit maxShipSize in this loop, this is considered a false-start
171+
if(SET.getSize()< maxShipSizeConfig)
156172
{
157173
BlockPos o = here.add(i,j,k);
158174
if(!SET.contains(o.getX(),o.getY(),o.getZ()))
159175
{
160176
if(!a.contains(world.getBlockState(o).getBlock()))
161177
{
162178
SET.add(o.getX(),o.getY(),o.getZ());
163-
//System.out.println(SET.size());
164179
sortDense(world,o);
165180
}
166181

167182
}
168183
}
184+
else
185+
{
186+
Pirates.LOGGER.info("A ship tried to spawn over {} blocks! Disarming...", maxShipSizeConfig);
187+
}
169188

170189
}
171190
}

src/main/java/ace/actually/pirates/util/ConfigUtils.java

+2
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ private static List<String> makeDefaults()
6363

6464
defaults.add("#general config for Valkyrien Pirates");
6565
defaults.add("cannon-firing-pause=40");
66+
defaults.add("#The max amount of blocks for the new ship builder, set to -1 to use the Eureka/VS version");
67+
defaults.add("max-ship-blocks=5000");
6668

6769
return defaults;
6870
}

0 commit comments

Comments
 (0)