mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 09:59:20 +00:00
@@ -1,15 +1,18 @@
|
||||
package net.momirealms.craftengine.bukkit.block.behavior;
|
||||
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||
import net.momirealms.craftengine.bukkit.util.LocationUtils;
|
||||
import net.momirealms.craftengine.core.block.BlockBehavior;
|
||||
import net.momirealms.craftengine.core.block.CustomBlock;
|
||||
import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory;
|
||||
import net.momirealms.craftengine.core.block.behavior.special.TriggerOnceBlockBehavior;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import net.momirealms.craftengine.core.world.Vec3d;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
@@ -31,9 +34,9 @@ public class BouncingBlockBehavior extends BukkitBlockBehavior implements Trigge
|
||||
public void fallOn(Object thisBlock, Object[] args, Callable<Object> superMethod) {
|
||||
if (this.fallDamageMultiplier <= 0.0) return;
|
||||
Object entity = args[3];
|
||||
Object finalFallDistance = VersionHelper.isOrAbove1_21_5() ? (double) args[4] * this.fallDamageMultiplier : (float) args[4] * this.fallDamageMultiplier;
|
||||
Number fallDistance = (Number) args[4];
|
||||
FastNMS.INSTANCE.method$Entity$causeFallDamage(
|
||||
entity, finalFallDistance, 1.0F,
|
||||
entity, fallDistance.doubleValue() * this.fallDamageMultiplier, 1.0F,
|
||||
FastNMS.INSTANCE.method$DamageSources$fall(FastNMS.INSTANCE.method$Entity$damageSources(entity))
|
||||
);
|
||||
}
|
||||
@@ -55,9 +58,21 @@ public class BouncingBlockBehavior extends BukkitBlockBehavior implements Trigge
|
||||
double y = -deltaMovement.y * this.bounceHeight * d;
|
||||
FastNMS.INSTANCE.method$Entity$setDeltaMovement(entity, deltaMovement.x, y, deltaMovement.z);
|
||||
if (CoreReflections.clazz$Player.isInstance(entity) && this.syncPlayerPosition
|
||||
&& /* 防抖 -> */ y > 0.032 /* <- 防抖 */
|
||||
&& /* 防抖 -> */ y > 0.035 /* <- 防抖 */
|
||||
) {
|
||||
FastNMS.INSTANCE.field$Entity$hurtMarked(entity, true);
|
||||
// 这里一定要延迟 1t 不然就会出问题
|
||||
if (VersionHelper.isFolia()) {
|
||||
Entity bukkitEntity = FastNMS.INSTANCE.method$Entity$getBukkitEntity(entity);
|
||||
bukkitEntity.getScheduler().runDelayed(BukkitCraftEngine.instance().javaPlugin(),
|
||||
r -> FastNMS.INSTANCE.field$Entity$hurtMarked(entity, true),
|
||||
null, 1L
|
||||
);
|
||||
} else {
|
||||
CraftEngine.instance().scheduler().sync().runLater(
|
||||
() -> FastNMS.INSTANCE.field$Entity$hurtMarked(entity, true),
|
||||
1L
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,6 +337,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
|
||||
plugin.scheduler().sync().runDelayed(() -> tryLeavingSeat(player, entity), player.getWorld(), location.getBlockX() >> 4, location.getBlockZ() >> 4);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
protected void tryLeavingSeat(@NotNull Player player, @NotNull Entity vehicle) {
|
||||
Integer baseFurniture = vehicle.getPersistentDataContainer().get(FURNITURE_SEAT_BASE_ENTITY_KEY, PersistentDataType.INTEGER);
|
||||
if (baseFurniture == null) return;
|
||||
@@ -375,6 +376,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
|
||||
return (entity instanceof ArmorStand || entity instanceof ItemDisplay);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
private boolean isSafeLocation(Location location) {
|
||||
World world = location.getWorld();
|
||||
if (world == null) return false;
|
||||
@@ -386,6 +388,7 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
|
||||
return world.getBlockAt(x, y + 1, z).isPassable();
|
||||
}
|
||||
|
||||
@SuppressWarnings("DuplicatedCode")
|
||||
@Nullable
|
||||
private Location findSafeLocationNearby(Location center) {
|
||||
World world = center.getWorld();
|
||||
|
||||
@@ -28,8 +28,8 @@ lang:
|
||||
block_name:default:copper_coil: Copper Coil
|
||||
block_name:default:chessboard_block: Chessboard Block
|
||||
block_name:default:safe_block: Safe Block
|
||||
block_name:default:sleeper_sofa: Sofa
|
||||
block_name:default:sofa: Sofa
|
||||
block_name:default:connectable_sofa: Sofa
|
||||
zh_cn:
|
||||
block_name:default:chinese_lantern: 灯笼
|
||||
block_name:default:netherite_anvil: 下界合金砧
|
||||
@@ -56,5 +56,5 @@ lang:
|
||||
block_name:default:copper_coil: 铜线圈
|
||||
block_name:default:chessboard_block: 棋盘方块
|
||||
block_name:default:safe_block: 保险柜
|
||||
block_name:default:sofa: 沙发
|
||||
block_name:default:connectable_sofa: 沙发
|
||||
block_name:default:sleeper_sofa: 沙发
|
||||
block_name:default:sofa: 沙发
|
||||
@@ -69,7 +69,6 @@ items#misc:
|
||||
overrides:
|
||||
tags:
|
||||
- minecraft:mineable/pickaxe
|
||||
- minecraft:anvil
|
||||
sounds:
|
||||
break: minecraft:block.anvil.break
|
||||
step: minecraft:block.anvil.step
|
||||
@@ -587,10 +586,10 @@ items#misc:
|
||||
step: minecraft:block.wood.step
|
||||
tags:
|
||||
- minecraft:mineable/axe
|
||||
behavior:
|
||||
type: bouncing_block
|
||||
bounce-height: 0.66
|
||||
sync-player-position: false
|
||||
behaviors:
|
||||
- type: bouncing_block
|
||||
bounce-height: 0.66
|
||||
sync-player-position: false
|
||||
state:
|
||||
id: 0
|
||||
state: white_bed[facing=west,occupied=false,part=foot]
|
||||
@@ -739,6 +738,116 @@ items#misc:
|
||||
facing=west,shape=straight:
|
||||
appearance: facing=west,shape=straight
|
||||
id: 11
|
||||
default:table_lamp:
|
||||
material: nether_brick
|
||||
custom-model-data: 3011
|
||||
data:
|
||||
item-name: <!i><i18n:item.table_lamp>
|
||||
model:
|
||||
type: minecraft:model
|
||||
path: minecraft:item/custom/table_lamp
|
||||
behavior:
|
||||
type: block_item
|
||||
block:
|
||||
loot:
|
||||
template: default:loot_table/self
|
||||
settings:
|
||||
template:
|
||||
- default:sound/metal
|
||||
overrides:
|
||||
hardness: 1
|
||||
resistance: 1
|
||||
replaceable: false
|
||||
is-redstone-conductor: false
|
||||
is-suffocating: false
|
||||
behaviors:
|
||||
- type: toggleable_lamp_block
|
||||
can-open-with-hand: true
|
||||
- type: sturdy_base_block
|
||||
direction: down
|
||||
support-types:
|
||||
- full
|
||||
- center
|
||||
states:
|
||||
properties:
|
||||
lit:
|
||||
type: boolean
|
||||
default: false
|
||||
facing:
|
||||
type: 4-direction
|
||||
default: north
|
||||
appearances:
|
||||
east_off:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
north_off:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: -90
|
||||
south_off:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: 90
|
||||
west_off:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: 180
|
||||
east_on:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
north_on:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: -90
|
||||
south_on:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: 90
|
||||
west_on:
|
||||
state: barrier
|
||||
entity-renderer:
|
||||
item: default:table_lamp
|
||||
yaw: 180
|
||||
variants:
|
||||
facing=east,lit=false:
|
||||
appearance: east_off
|
||||
id: 12
|
||||
facing=north,lit=false:
|
||||
appearance: north_off
|
||||
id: 13
|
||||
facing=south,lit=false:
|
||||
appearance: south_off
|
||||
id: 14
|
||||
facing=west,lit=false:
|
||||
appearance: west_off
|
||||
id: 15
|
||||
facing=east,lit=true:
|
||||
appearance: east_on
|
||||
id: 16
|
||||
settings:
|
||||
luminance: 15
|
||||
facing=north,lit=true:
|
||||
appearance: north_on
|
||||
id: 17
|
||||
settings:
|
||||
luminance: 15
|
||||
facing=south,lit=true:
|
||||
appearance: south_on
|
||||
id: 18
|
||||
settings:
|
||||
luminance: 15
|
||||
facing=west,lit=true:
|
||||
appearance: west_on
|
||||
id: 19
|
||||
settings:
|
||||
luminance: 15
|
||||
recipes#misc:
|
||||
default:chinese_lantern:
|
||||
type: shaped
|
||||
|
||||
@@ -52,10 +52,9 @@ categories:
|
||||
default:furniture:
|
||||
name: <!i><#FFD700><i18n:category.furniture></#FFD700>
|
||||
hidden: true
|
||||
icon: default:table_lamp
|
||||
icon: default:flower_basket
|
||||
list:
|
||||
- default:bench
|
||||
- default:table_lamp
|
||||
- default:wooden_chair
|
||||
- default:flower_basket
|
||||
default:misc:
|
||||
@@ -83,4 +82,5 @@ categories:
|
||||
- default:sleeper_sofa
|
||||
- minecraft:air
|
||||
- minecraft:air
|
||||
- default:sofa
|
||||
- default:sofa
|
||||
- default:table_lamp
|
||||
@@ -42,57 +42,6 @@ items:
|
||||
template: default:loot_table/furniture
|
||||
arguments:
|
||||
item: default:bench
|
||||
default:table_lamp:
|
||||
material: nether_brick
|
||||
custom-model-data: 2001
|
||||
data:
|
||||
item-name: <!i><i18n:item.table_lamp>
|
||||
model:
|
||||
type: minecraft:model
|
||||
path: minecraft:item/custom/table_lamp
|
||||
behavior:
|
||||
type: furniture_item
|
||||
furniture:
|
||||
settings:
|
||||
item: default:table_lamp
|
||||
sounds:
|
||||
break: minecraft:block.lantern.break
|
||||
place: minecraft:block.lantern.place
|
||||
placement:
|
||||
ground:
|
||||
loot-spawn-offset: 0,0.2,0
|
||||
rules:
|
||||
rotation: ANY
|
||||
alignment: QUARTER
|
||||
elements:
|
||||
- item: default:table_lamp
|
||||
display-transform: NONE
|
||||
billboard: FIXED
|
||||
translation: 0,0.5,0
|
||||
rotation: 90
|
||||
hitboxes:
|
||||
- position: 0,0,0
|
||||
type: interaction
|
||||
blocks-building: true
|
||||
width: 0.7
|
||||
height: 0.1
|
||||
interactive: true
|
||||
- position: 0,0.1,-0.1
|
||||
type: interaction
|
||||
blocks-building: true
|
||||
width: 0.1
|
||||
height: 0.6
|
||||
interactive: true
|
||||
- position: 0,0.6,0.15
|
||||
type: interaction
|
||||
blocks-building: true
|
||||
width: 0.4
|
||||
height: 0.4
|
||||
interactive: true
|
||||
loot:
|
||||
template: default:loot_table/furniture
|
||||
arguments:
|
||||
item: default:table_lamp
|
||||
default:wooden_chair:
|
||||
material: nether_brick
|
||||
custom-model-data: 2002
|
||||
|
||||
@@ -18,4 +18,9 @@ public interface EntityBlockBehavior {
|
||||
default <T extends BlockEntity> BlockEntityTicker<T> createBlockEntityTicker(CEWorld level, ImmutableBlockState state, BlockEntityType<T> blockEntityType) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
static <E extends BlockEntity> BlockEntityTicker<E> createTickerHelper(BlockEntityTicker<? super E> ticker) {
|
||||
return (BlockEntityTicker<E>) ticker;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,4 +7,5 @@ public final class BlockEntityTypeKeys {
|
||||
|
||||
public static final Key UNSAFE_COMPOSITE = Key.of("craftengine:unsafe_composite");
|
||||
public static final Key SIMPLE_STORAGE = Key.of("craftengine:simple_storage");
|
||||
public static final Key SEAT = Key.of("craftengine:seat");
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ byte_buddy_version=1.17.5
|
||||
ahocorasick_version=0.6.3
|
||||
snake_yaml_version=2.5
|
||||
anti_grief_version=0.20
|
||||
nms_helper_version=1.0.82
|
||||
nms_helper_version=1.0.83
|
||||
evalex_version=3.5.0
|
||||
reactive_streams_version=1.0.4
|
||||
amazon_awssdk_version=2.33.1
|
||||
|
||||
Reference in New Issue
Block a user