Rebalance Lightning Rod
All checks were successful
EnergonRelics/pipeline/head This commit looks good

This commit is contained in:
TheBrokenRail 2020-07-29 17:24:03 -04:00
parent 08f609e6c4
commit 8ef7f2dc11
5 changed files with 29 additions and 13 deletions

View File

@ -13,7 +13,7 @@ org.gradle.jvmargs = -Xmx1G
# Dependencies # Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_api_version = 0.16.1+build.387-1.16 fabric_api_version = 0.16.2+build.389-1.16
modmenu_version = 1.14.5+build.30 modmenu_version = 1.14.5+build.30
cloth_config_version = 4.7.0-unstable cloth_config_version = 4.7.0-unstable
autoconfig_version = 3.2.0-unstable autoconfig_version = 3.2.0-unstable

View File

@ -14,7 +14,6 @@ import net.minecraft.world.LightType;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Random;
public class LightningRodBaseBlockEntity extends EnergyProviderBlockEntity implements EnergyGenerator { public class LightningRodBaseBlockEntity extends EnergyProviderBlockEntity implements EnergyGenerator {
public LightningRodBaseBlockEntity(BlockEntityType<?> type) { public LightningRodBaseBlockEntity(BlockEntityType<?> type) {
@ -33,8 +32,6 @@ public class LightningRodBaseBlockEntity extends EnergyProviderBlockEntity imple
private int cooldown = 0; private int cooldown = 0;
private long energy = 0; private long energy = 0;
private final Random random = new Random();
@Override @Override
public long getDisplayEnergy() { public long getDisplayEnergy() {
return energy; return energy;
@ -52,25 +49,35 @@ public class LightningRodBaseBlockEntity extends EnergyProviderBlockEntity imple
@Override @Override
public List<EnergyTickable> startTick() { public List<EnergyTickable> startTick() {
assert getWorld() != null;
if (cooldown <= 0) { if (cooldown <= 0) {
energy = 0; if (energy != 0) {
energy = 0;
markDirty();
}
if (getLight() > 0) { if (getLight() > 0) {
if (random.nextDouble() <= HardcodedConfig.LIGHTNING_ROD_CHANCE) { if (getWorld().random.nextDouble() <= HardcodedConfig.LIGHTNING_ROD_CHANCE) {
LightningEntity entity = EntityType.LIGHTNING_BOLT.create(getWorld()); LightningEntity entity = EntityType.LIGHTNING_BOLT.create(getWorld());
assert entity != null; assert entity != null;
entity.updatePosition(getPos().getX() + 0.5d, getPos().getY() + 1d, getPos().getZ() + 0.5d); entity.updatePosition(getPos().getX() + 0.5d, getPos().getY() + 1d + (getWorld().random.nextDouble() * 1.5d), getPos().getZ() + 0.5d);
entity.setCosmetic(true); entity.setCosmetic(true);
Objects.requireNonNull(getWorld()).spawnEntity(entity); Objects.requireNonNull(getWorld()).spawnEntity(entity);
cooldown = HardcodedConfig.LIGHTNING_ROD_COOLDOWN; cooldown = HardcodedConfig.LIGHTNING_ROD_COOLDOWN;
energy = HardcodedConfig.LIGHTNING_ROD_ENERGY_OUTPUT; energy = HardcodedConfig.LIGHTNING_ROD_ENERGY_OUTPUT;
markDirty();
} }
} }
} else { } else {
energy = 0;
cooldown--; cooldown--;
markDirty();
} }
markDirty();
return super.startTick(); return super.startTick();
} }

View File

@ -8,6 +8,7 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.Material; import net.minecraft.block.Material;
import net.minecraft.block.MaterialColor; import net.minecraft.block.MaterialColor;
import net.minecraft.block.ShapeContext; import net.minecraft.block.ShapeContext;
@ -93,6 +94,9 @@ public class LightningRodBaseBlock extends EnergyBlock {
public BlockState getPlacementState(ItemPlacementContext ctx) { public BlockState getPlacementState(ItemPlacementContext ctx) {
BlockPos pos = ctx.getBlockPos(); BlockPos pos = ctx.getBlockPos();
World world = ctx.getWorld(); World world = ctx.getWorld();
return world.getBlockState(pos.up(1)).canReplace(ctx) && world.getBlockState(pos.up(2)).canReplace(ctx) ? super.getPlacementState(ctx) : null;
BlockPos top = pos.up(2);
return top.getY() < world.getHeight() && world.getBlockState(pos.up(1)).canReplace(ctx) && world.getBlockState(top).canReplace(ctx) ? super.getPlacementState(ctx) : null;
} }
} }

View File

@ -116,7 +116,12 @@ public class LightningRodBlock extends SimpleBlock {
if (!world.isClient() && player.isCreative()) { if (!world.isClient() && player.isCreative()) {
int distance = state.get(HALF) == DoubleBlockHalf.LOWER ? 1 : 2; int distance = state.get(HALF) == DoubleBlockHalf.LOWER ? 1 : 2;
BlockPos targetPos = pos.down(distance); BlockPos targetPos = pos.down(distance);
world.breakBlock(targetPos, false, player);
BlockState targetState = world.getBlockState(targetPos);
if (targetState.getBlock() == EnergonRelics.LIGHTNING_ROD_BASE_BLOCK) {
world.breakBlock(targetPos, false, player);
}
} }
super.onBreak(world, pos, state, player); super.onBreak(world, pos, state, player);

View File

@ -24,9 +24,9 @@ public class HardcodedConfig {
public static final int BLOCK_BREAKER_TIME = 48; public static final int BLOCK_BREAKER_TIME = 48;
public static final Item BLOCK_BREAKER_ITEM = Items.IRON_PICKAXE; public static final Item BLOCK_BREAKER_ITEM = Items.IRON_PICKAXE;
public static final long LIGHTNING_ROD_ENERGY_OUTPUT = 40000; public static final long LIGHTNING_ROD_ENERGY_OUTPUT = 200000;
public static final double LIGHTNING_ROD_CHANCE = 0.00005d; public static final double LIGHTNING_ROD_CHANCE = 0.00008d;
public static final int LIGHTNING_ROD_COOLDOWN = 5; public static final int LIGHTNING_ROD_COOLDOWN = 240;
public static final long FIELD_PROJECTOR_ENERGY_REQUIRED = 31; public static final long FIELD_PROJECTOR_ENERGY_REQUIRED = 31;
public static final int FIELD_MAX_SIZE = 12; public static final int FIELD_MAX_SIZE = 12;