From e0cf1d7c222512b5ec97170b5ef5ff210afe81c6 Mon Sep 17 00:00:00 2001 From: Maxx <53229958+MBatt1@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:31:51 -0600 Subject: [PATCH] Levita rail rework --- .../blocks/mechanical/LevitaRailBlock.java | 31 +++++++- .../component/FloatingComponent.java | 4 +- .../entity/AbstractMinecartEntityMixin.java | 1 + .../blockstates/levita_rail.json | 66 ++++++++++++++---- .../models/block/levita_rail_triggered.json | 6 ++ .../block/levita_rail_triggered_on.json | 6 ++ .../levita_rail_triggered_on_raised_ne.json | 6 ++ .../levita_rail_triggered_on_raised_sw.json | 6 ++ .../levita_rail_triggered_raised_ne.json | 6 ++ .../levita_rail_triggered_raised_sw.json | 6 ++ .../textures/block/levita_rail_triggered.png | Bin 0 -> 548 bytes .../block/levita_rail_triggered_on.png | Bin 0 -> 553 bytes 12 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered.json create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on.json create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_ne.json create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_sw.json create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_ne.json create mode 100644 src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_sw.json create mode 100644 src/main/resources/assets/paradise_lost/textures/block/levita_rail_triggered.png create mode 100644 src/main/resources/assets/paradise_lost/textures/block/levita_rail_triggered_on.png diff --git a/src/main/java/net/id/paradiselost/blocks/mechanical/LevitaRailBlock.java b/src/main/java/net/id/paradiselost/blocks/mechanical/LevitaRailBlock.java index a311f0874..f8bbbbf93 100644 --- a/src/main/java/net/id/paradiselost/blocks/mechanical/LevitaRailBlock.java +++ b/src/main/java/net/id/paradiselost/blocks/mechanical/LevitaRailBlock.java @@ -3,12 +3,19 @@ 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; @@ -16,8 +23,17 @@ 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 @@ -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(); } @@ -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 List getCarts(World world, BlockPos pos, Class entityClass, Predicate entityPredicate) { return world.getEntitiesByClass(entityClass, this.getCartDetectionBox(pos), entityPredicate); } @@ -51,4 +75,9 @@ private Box getCartDetectionBox(BlockPos pos) { pos.getZ() + 1 - radius ); } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(SHAPE, POWERED, WATERLOGGED, TRIGGERED); + } } diff --git a/src/main/java/net/id/paradiselost/component/FloatingComponent.java b/src/main/java/net/id/paradiselost/component/FloatingComponent.java index 88c72d8fc..3eba5d774 100644 --- a/src/main/java/net/id/paradiselost/component/FloatingComponent.java +++ b/src/main/java/net/id/paradiselost/component/FloatingComponent.java @@ -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() { diff --git a/src/main/java/net/id/paradiselost/mixin/entity/AbstractMinecartEntityMixin.java b/src/main/java/net/id/paradiselost/mixin/entity/AbstractMinecartEntityMixin.java index 3fa5a54f9..5707cd7df 100644 --- a/src/main/java/net/id/paradiselost/mixin/entity/AbstractMinecartEntityMixin.java +++ b/src/main/java/net/id/paradiselost/mixin/entity/AbstractMinecartEntityMixin.java @@ -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 diff --git a/src/main/resources/assets/paradise_lost/blockstates/levita_rail.json b/src/main/resources/assets/paradise_lost/blockstates/levita_rail.json index 34a15b07c..4cc862d4b 100644 --- a/src/main/resources/assets/paradise_lost/blockstates/levita_rail.json +++ b/src/main/resources/assets/paradise_lost/blockstates/levita_rail.json @@ -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" } } } \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered.json new file mode 100644 index 000000000..d0e29c5ab --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on.json new file mode 100644 index 000000000..c9e47f866 --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/rail_flat", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered_on" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_ne.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_ne.json new file mode 100644 index 000000000..cdfdb44d3 --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered_on" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_sw.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_sw.json new file mode 100644 index 000000000..8e3a22c0d --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_on_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered_on" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_ne.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_ne.json new file mode 100644 index 000000000..46b3fd846 --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_ne.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_ne", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_sw.json b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_sw.json new file mode 100644 index 000000000..b62ce8014 --- /dev/null +++ b/src/main/resources/assets/paradise_lost/models/block/levita_rail_triggered_raised_sw.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_rail_raised_sw", + "textures": { + "rail": "paradise_lost:block/levita_rail_triggered" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/paradise_lost/textures/block/levita_rail_triggered.png b/src/main/resources/assets/paradise_lost/textures/block/levita_rail_triggered.png new file mode 100644 index 0000000000000000000000000000000000000000..4450c5df2dbf3dc210559e36c82a9c81865dc043 GIT binary patch literal 548 zcmV+<0^9wGP)Px$-bqA3R5*=&l0RruQ51*2^KQwIB@K%CQ&e;kLyLhzKwK(h31$_+?R9yRflf}D zoGrHC^bp*nOA3bI)*;TO@MsZIlp-{*r6G0+7`V9($$fp*q-Q$!oZr2i^W7gz!}opT zd7iQ7ic-dP9OF8UDMD2DJkR*PADtb5x?740b+=?HN|~%NGz&GFg&H}fD1xcGC6i1i zh~HTN2)cciD=BQAHHL5HT|Shne7OO~`|A|9R|vX&GKmqX#S}ree>p*;eIx+Mbb?0v zNJ0^wyr|-S+~ED|m;CzvgSal9JGOA~`@*L5wC3xl&zzr~0&sG&7xnB4*E0C`()rmb zp~y^K#Nf_j7!F4KobI-IxJA}X^q~kntqHn)?qw#^{>LD-n2L7mfV8xhP=wBSOiOF& zfLzO9R`j$cr_`0&a4?$BAel~3cT1)S69YMu_bW;n>w~!rmZy!N+b5?K&4;g|U$}WI z!&0z0@j>BIcZGo+FTSUZ($jTvO3`Q^iTy^aTd<&H{SB5T;+KGAllnPoaqCb{}Ca(y~0kR#t!i8;2og|gDHcVK8Q1DX)T@c mn5AHo)x#}95n5W$^ub@ASq4Pww3tT#0000Px$<4Ht8R5*=&lCf)3Q51*2dtb?rB@KvyfQn`@G>Y2;acMxOc1#f!gt%l70+}*p z63moVp-vB>PGW`#cD6(O1B4e7;U$U)g_b^ImkfdTjze-^Up48O&OP^cFXw#c2lH?o zM=F(ym~-1w(ofwITTF`X_ReA zrW3^9XaLvqNv)Rp(Or~LGMY+$#)Lq42!JkY`j!S#HuXJ+00$G|}Bbcd=Qph|(Lffn|4 zNGT9i4^S5}SQI0K9O_(cGM+AHkW43Nlx=BRNKa|m2xtGdEhWYWOBvjnU$~ynBW5Nt zTex&NL#@A!>-l8X&UEJ(nD*jxny`z{$f4+Thsvzc=vIsi5b@B$%h$Il7OH#zKKEWR&=N6N=z}