Skip to content

Commit

Permalink
Levita rail rework
Browse files Browse the repository at this point in the history
  • Loading branch information
MBatt1 committed Nov 19, 2024
1 parent 2bdd43d commit e0cf1d7
Show file tree
Hide file tree
Showing 12 changed files with 123 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,37 @@
import net.id.paradiselost.component.ParadiseLostComponents;
import net.id.paradiselost.entities.ParadiseLostEntityExtensions;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.PoweredRailBlock;
import net.minecraft.block.enums.RailShape;
import net.minecraft.entity.Entity;
import net.minecraft.entity.vehicle.AbstractMinecartEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.BooleanProperty;
import net.minecraft.state.property.Properties;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.World;

import java.util.List;
import java.util.function.Predicate;

public class LevitaRailBlock extends PoweredRailBlock {

public static final BooleanProperty TRIGGERED = Properties.TRIGGERED;

public LevitaRailBlock(AbstractBlock.Settings settings) {
super(settings);
this.setDefaultState(
this.stateManager.getDefaultState()
.with(SHAPE, RailShape.NORTH_SOUTH)
.with(POWERED, Boolean.valueOf(false))
.with(WATERLOGGED, Boolean.valueOf(false))
.with(TRIGGERED, Boolean.valueOf(false))
);
}

@Override
Expand All @@ -27,7 +43,11 @@ protected void onEntityCollision(BlockState state, World world, BlockPos pos, En
for (AbstractMinecartEntity cart : list) {
var floatingComponent = ParadiseLostComponents.FLOATING_KEY.get(cart);
if (state.get(POWERED)) {
floatingComponent.startFloating();
if (!state.get(TRIGGERED)) {
floatingComponent.addFloating();
world.setBlockState(pos, state.with(TRIGGERED, true), 3);
world.scheduleBlockTick(pos, this, 80);
}
} else {
floatingComponent.stopFloating();
}
Expand All @@ -36,6 +56,10 @@ protected void onEntityCollision(BlockState state, World world, BlockPos pos, En
}
}

protected void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
world.setBlockState(pos, state.with(TRIGGERED, false), 3);
}

private <T extends AbstractMinecartEntity> List<T> getCarts(World world, BlockPos pos, Class<T> entityClass, Predicate<Entity> entityPredicate) {
return world.getEntitiesByClass(entityClass, this.getCartDetectionBox(pos), entityPredicate);
}
Expand All @@ -51,4 +75,9 @@ private Box getCartDetectionBox(BlockPos pos) {
pos.getZ() + 1 - radius
);
}

@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(SHAPE, POWERED, WATERLOGGED, TRIGGERED);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ public int getFloatTime() {
return floatTime;
}

public void startFloating() {
public void addFloating() {
floating = true;
floatTime = 20 * FLOAT_SECONDS;
floatTime += 20 * FLOAT_SECONDS;
}

public void stopFloating() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ protected void moveOffRail(CallbackInfo ci) {
if (!this.isOnGround() && floatingComponent.getFloating() && floatingComponent.getFloatTime() > 0) {
double d = this.getMaxSpeed();
Vec3d vec3d = this.getVelocity();
System.out.println(vec3d);
this.setVelocity(MathHelper.clamp(vec3d.x, -d, d), 0, MathHelper.clamp(vec3d.z, -d, d));
this.move(MovementType.SELF, this.getVelocity());
// decrement
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,88 @@
{
"variants": {
"powered=false,shape=ascending_east": {
"powered=false,triggered=false,shape=ascending_east": {
"model": "paradise_lost:block/levita_rail_raised_ne",
"y": 90
},
"powered=false,shape=ascending_north": {
"powered=false,triggered=false,shape=ascending_north": {
"model": "paradise_lost:block/levita_rail_raised_ne"
},
"powered=false,shape=ascending_south": {
"powered=false,triggered=false,shape=ascending_south": {
"model": "paradise_lost:block/levita_rail_raised_sw"
},
"powered=false,shape=ascending_west": {
"powered=false,triggered=false,shape=ascending_west": {
"model": "paradise_lost:block/levita_rail_raised_sw",
"y": 90
},
"powered=false,shape=east_west": {
"powered=false,triggered=false,shape=east_west": {
"model": "paradise_lost:block/levita_rail",
"y": 90
},
"powered=false,shape=north_south": {
"powered=false,triggered=false,shape=north_south": {
"model": "paradise_lost:block/levita_rail"
},
"powered=true,shape=ascending_east": {
"powered=true,triggered=false,shape=ascending_east": {
"model": "paradise_lost:block/levita_rail_on_raised_ne",
"y": 90
},
"powered=true,shape=ascending_north": {
"powered=true,triggered=false,shape=ascending_north": {
"model": "paradise_lost:block/levita_rail_on_raised_ne"
},
"powered=true,shape=ascending_south": {
"powered=true,triggered=false,shape=ascending_south": {
"model": "paradise_lost:block/levita_rail_on_raised_sw"
},
"powered=true,shape=ascending_west": {
"powered=true,triggered=false,shape=ascending_west": {
"model": "paradise_lost:block/levita_rail_on_raised_sw",
"y": 90
},
"powered=true,shape=east_west": {
"powered=true,triggered=false,shape=east_west": {
"model": "paradise_lost:block/levita_rail_on",
"y": 90
},
"powered=true,shape=north_south": {
"powered=true,triggered=false,shape=north_south": {
"model": "paradise_lost:block/levita_rail_on"
},
"powered=false,triggered=true,shape=ascending_east": {
"model": "paradise_lost:block/levita_rail_triggered_raised_ne",
"y": 90
},
"powered=false,triggered=true,shape=ascending_north": {
"model": "paradise_lost:block/levita_rail_triggered_raised_ne"
},
"powered=false,triggered=true,shape=ascending_south": {
"model": "paradise_lost:block/levita_rail_triggered_raised_sw"
},
"powered=false,triggered=true,shape=ascending_west": {
"model": "paradise_lost:block/levita_rail_triggered_raised_sw",
"y": 90
},
"powered=false,triggered=true,shape=east_west": {
"model": "paradise_lost:block/levita_rail",
"y": 90
},
"powered=false,triggered=true,shape=north_south": {
"model": "paradise_lost:block/levita_rail"
},
"powered=true,triggered=true,shape=ascending_east": {
"model": "paradise_lost:block/levita_rail_triggered_on_raised_ne",
"y": 90
},
"powered=true,triggered=true,shape=ascending_north": {
"model": "paradise_lost:block/levita_rail_triggered_on_raised_ne"
},
"powered=true,triggered=true,shape=ascending_south": {
"model": "paradise_lost:block/levita_rail_triggered_on_raised_sw"
},
"powered=true,triggered=true,shape=ascending_west": {
"model": "paradise_lost:block/levita_rail_triggered_on_raised_sw",
"y": 90
},
"powered=true,triggered=true,shape=east_west": {
"model": "paradise_lost:block/levita_rail_triggered_on",
"y": 90
},
"powered=true,triggered=true,shape=north_south": {
"model": "paradise_lost:block/levita_rail_triggered_on"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/rail_flat",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/rail_flat",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered_on"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/template_rail_raised_ne",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered_on"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/template_rail_raised_sw",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered_on"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/template_rail_raised_ne",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/template_rail_raised_sw",
"textures": {
"rail": "paradise_lost:block/levita_rail_triggered"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit e0cf1d7

Please sign in to comment.