Skip to content

Commit a590acc

Browse files
committed
made mushrooms bouncy
1 parent 8810e76 commit a590acc

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

src/main/java/com/dtteam/dynamictreesplus/block/mushroom/DynamicCapBlock.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.dtteam.dynamictrees.systems.GrowSignal;
1010
import com.dtteam.dynamictrees.tree.family.Family;
1111
import com.dtteam.dynamictreesplus.systems.mushroomlogic.MushroomCapDisc;
12+
import net.minecraft.world.entity.Entity;
13+
import net.minecraft.world.entity.LivingEntity;
1214
import net.minecraft.world.level.LevelReader;
1315
import net.minecraft.world.phys.Vec3;
1416
import net.minecraft.core.BlockPos;
@@ -229,4 +231,30 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource
229231
}
230232
super.tick(state, level, pos, random);
231233
}
234+
235+
//Same behavior as beds
236+
@Override
237+
public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
238+
super.fallOn(level, state, pos, entity, fallDistance * 0.5F);
239+
}
240+
241+
//Same behavior as beds
242+
@Override
243+
public void updateEntityAfterFallOn(BlockGetter level, Entity entity) {
244+
if (entity.isSuppressingBounce()) {
245+
super.updateEntityAfterFallOn(level, entity);
246+
} else {
247+
this.bounceUp(entity);
248+
}
249+
}
250+
251+
//Same behavior as beds
252+
private void bounceUp(Entity entity) {
253+
Vec3 vec3 = entity.getDeltaMovement();
254+
if (vec3.y < 0.0) {
255+
double d0 = entity instanceof LivingEntity ? 1.0 : 0.8;
256+
entity.setDeltaMovement(vec3.x, -vec3.y * 0.66F * d0, vec3.z);
257+
}
258+
}
259+
232260
}

src/main/java/com/dtteam/dynamictreesplus/block/mushroom/DynamicCapCenterBlock.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import net.minecraft.core.BlockPos;
1919
import net.minecraft.core.Direction;
2020
import net.minecraft.tags.BlockTags;
21+
import net.minecraft.world.entity.Entity;
22+
import net.minecraft.world.entity.LivingEntity;
2123
import net.minecraft.world.entity.player.Player;
2224
import net.minecraft.world.item.ItemStack;
2325
import net.minecraft.world.level.BlockGetter;
@@ -31,6 +33,7 @@
3133
import net.minecraft.world.level.block.state.properties.IntegerProperty;
3234
import net.minecraft.world.level.material.FluidState;
3335
import net.minecraft.world.phys.HitResult;
36+
import net.minecraft.world.phys.Vec3;
3437
import net.minecraft.world.phys.shapes.CollisionContext;
3538
import net.minecraft.world.phys.shapes.VoxelShape;
3639
import org.jetbrains.annotations.Nullable;
@@ -276,6 +279,10 @@ public List<BlockPos> getRing (LevelAccessor level, BlockPos pos, int radius){
276279
return positions;
277280
}
278281

282+
///////////////////////////////////////////
283+
// PROPERTIES
284+
///////////////////////////////////////////
285+
279286
public static boolean canCapReplace(BlockState state){
280287
// Mushroom caps take precedence over leaves
281288
return state.canBeReplaced() || state.is(DTBlockTags.FOLIAGE) || state.is(BlockTags.LEAVES);
@@ -303,6 +310,31 @@ public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos,
303310
return destroyed;
304311
}
305312

313+
//Same behavior as beds
314+
@Override
315+
public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
316+
super.fallOn(level, state, pos, entity, fallDistance * 0.5F);
317+
}
318+
319+
//Same behavior as beds
320+
@Override
321+
public void updateEntityAfterFallOn(BlockGetter level, Entity entity) {
322+
if (entity.isSuppressingBounce()) {
323+
super.updateEntityAfterFallOn(level, entity);
324+
} else {
325+
this.bounceUp(entity);
326+
}
327+
}
328+
329+
//Same behavior as beds
330+
private void bounceUp(Entity entity) {
331+
Vec3 vec3 = entity.getDeltaMovement();
332+
if (vec3.y < 0.0) {
333+
double d0 = entity instanceof LivingEntity ? 1.0 : 0.8;
334+
entity.setDeltaMovement(vec3.x, -vec3.y * 0.66F * d0, vec3.z);
335+
}
336+
}
337+
306338
///////////////////////////////////////////
307339
// SHAPE
308340
///////////////////////////////////////////

0 commit comments

Comments
 (0)