mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 18:09:27 +00:00
修正三叉戟
This commit is contained in:
@@ -2,7 +2,6 @@ package net.momirealms.craftengine.bukkit.entity.projectile;
|
||||
|
||||
import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent;
|
||||
import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent;
|
||||
import com.destroystokyo.paper.event.player.PlayerReadyArrowEvent;
|
||||
import io.papermc.paper.event.player.PlayerStopUsingItemEvent;
|
||||
import net.momirealms.craftengine.bukkit.item.BukkitItemManager;
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
@@ -10,14 +9,15 @@ import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections;
|
||||
import net.momirealms.craftengine.bukkit.plugin.scheduler.impl.FoliaTask;
|
||||
import net.momirealms.craftengine.bukkit.util.ParticleUtils;
|
||||
import net.momirealms.craftengine.core.entity.projectile.CustomProjectile;
|
||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileManager;
|
||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta;
|
||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileType;
|
||||
import net.momirealms.craftengine.core.item.CustomItem;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@@ -26,6 +26,7 @@ import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityPortalEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
import org.bukkit.event.world.EntitiesLoadEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -123,10 +124,9 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteract(PlayerItemConsumeEvent event) {
|
||||
String type = getType(event.getItem());
|
||||
if (type == null) return;
|
||||
if (type.equals("bow") || type.equals("trident")) {
|
||||
public void onPlayerConsume(PlayerItemConsumeEvent event) {
|
||||
ProjectileType type = getCustomProjectileType(event.getItem());
|
||||
if (type == ProjectileType.TRIDENT) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -134,23 +134,21 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
|
||||
@EventHandler
|
||||
public void onPlayerStopUsingItem(PlayerStopUsingItemEvent event) {
|
||||
ItemStack item = event.getItem();
|
||||
String type = getType(item);
|
||||
ProjectileType type = getCustomProjectileType(item);
|
||||
if (type == null) return;
|
||||
int ticksHeldFor = event.getTicksHeldFor();
|
||||
Player player = event.getPlayer();
|
||||
if (type.equals("trident")) {
|
||||
if (type == ProjectileType.TRIDENT) {
|
||||
if (ticksHeldFor < 10) return;
|
||||
Object nmsItemStack = FastNMS.INSTANCE.field$CraftItemStack$handle(item);
|
||||
Object nmsServerLevel = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(player.getWorld());
|
||||
Object nmsEntity = FastNMS.INSTANCE.method$CraftEntity$getHandle(player);
|
||||
TridentRelease.releaseUsing(nmsItemStack, nmsServerLevel, nmsEntity);
|
||||
} else if (type.equals("bow")) {
|
||||
if (ticksHeldFor < 3) return;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getType(ItemStack item) {
|
||||
private ProjectileType getCustomProjectileType(ItemStack item) {
|
||||
Item<ItemStack> wrapped = BukkitItemManager.instance().wrap(item);
|
||||
Optional<CustomItem<ItemStack>> optionalCustomItem = wrapped.getCustomItem();
|
||||
if (optionalCustomItem.isEmpty()) return null;
|
||||
|
||||
@@ -192,6 +192,8 @@ items#topaz_gears:
|
||||
data:
|
||||
item-name: <!i><#FF8C00><i18n:item.topaz_trident>
|
||||
tooltip-style: minecraft:topaz
|
||||
components:
|
||||
minecraft:max_damage: 300
|
||||
model:
|
||||
type: minecraft:select
|
||||
property: minecraft:display_context
|
||||
@@ -222,50 +224,15 @@ items#topaz_gears:
|
||||
- path: minecraft:item/custom/topaz_trident_throwing
|
||||
predicate:
|
||||
throwing: 1
|
||||
$$1.21.2~1.21.3#topaz_trident:
|
||||
default:topaz_trident:
|
||||
material: honey_bottle
|
||||
custom-model-data: 1000
|
||||
settings:
|
||||
projectile:
|
||||
item: default:topaz_trident
|
||||
translation: 0,0,0
|
||||
rotation: 1,1,1,1
|
||||
display-transform: NONE
|
||||
scale: 0.5
|
||||
type: trident
|
||||
throwing-item-in-hand: default:topaz_trident_throwing_in_hand
|
||||
tags:
|
||||
- default:topaz_tools
|
||||
data:
|
||||
item-name: <!i><#FF8C00><i18n:item.topaz_trident>
|
||||
tooltip-style: minecraft:topaz
|
||||
components:
|
||||
minecraft:max_stack_size: 1
|
||||
minecraft:consumable:
|
||||
animation: spear
|
||||
has_consume_particles: false
|
||||
consume_seconds: 128000
|
||||
minecraft:food:
|
||||
nutrition: 0
|
||||
saturation: 0.0
|
||||
can_always_eat: true
|
||||
model:
|
||||
type: minecraft:model
|
||||
path: minecraft:item/custom/topaz_trident_in_hand
|
||||
default:topaz_trident_throwing_in_hand:
|
||||
material: honey_bottle
|
||||
custom-model-data: 1001
|
||||
model:
|
||||
type: minecraft:model
|
||||
path: minecraft:item/custom/topaz_trident_throwing
|
||||
$$1.20.1~1.21.1#topaz_trident:
|
||||
$$1.20.1~1.21.3#topaz_trident:
|
||||
default:topaz_trident:
|
||||
material: trident
|
||||
client-bound-material: bow
|
||||
custom-model-data: 1001
|
||||
data:
|
||||
item-name: <!i><#FF8C00><i18n:item.topaz_trident>
|
||||
components:
|
||||
minecraft:max_damage: 300
|
||||
settings:
|
||||
projectile:
|
||||
item: default:topaz_trident
|
||||
|
||||
@@ -2,8 +2,15 @@ package net.momirealms.craftengine.core.entity.projectile;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.ItemDisplayContext;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public record ProjectileMeta(Key item, ItemDisplayContext displayType, Vector3f scale, Vector3f translation, Quaternionf rotation, double range, String type) {
|
||||
public record ProjectileMeta(Key item,
|
||||
ItemDisplayContext displayType,
|
||||
Vector3f scale,
|
||||
Vector3f translation,
|
||||
Quaternionf rotation,
|
||||
double range,
|
||||
@Nullable ProjectileType type) {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package net.momirealms.craftengine.core.entity.projectile;
|
||||
|
||||
public enum ProjectileType {
|
||||
TRIDENT
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package net.momirealms.craftengine.core.item;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.ItemDisplayContext;
|
||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta;
|
||||
import net.momirealms.craftengine.core.entity.projectile.ProjectileType;
|
||||
import net.momirealms.craftengine.core.item.modifier.EquippableModifier;
|
||||
import net.momirealms.craftengine.core.item.modifier.FoodModifier;
|
||||
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||
@@ -326,7 +327,7 @@ public class ItemSettings {
|
||||
Vector3f translation = MiscUtils.getAsVector3f(args.getOrDefault("translation", "0"), "translation");
|
||||
Vector3f scale = MiscUtils.getAsVector3f(args.getOrDefault("scale", "1"), "scale");
|
||||
Quaternionf rotation = MiscUtils.getAsQuaternionf(ResourceConfigUtils.get(args, "rotation-left", "rotation"), "rotation-left");
|
||||
String type = args.getOrDefault("type", "none").toString();
|
||||
ProjectileType type = Optional.ofNullable(args.get("type")).map(String::valueOf).map(it -> ProjectileType.valueOf(it.toUpperCase(Locale.ENGLISH))).orElse(null);
|
||||
double range = ResourceConfigUtils.getAsDouble(args.getOrDefault("range", 1), "range");
|
||||
return settings -> settings.projectileMeta(new ProjectileMeta(customTridentItemId, displayType, scale, translation, rotation, range, type));
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user