Estoy trabajando en un datapack de armas que se parece mucho al mod Spartan Weaponry de Forge. Actualmente estoy creando una daga y quiero deshabilitar la habilidad de filo de barrido de 1.9 sin dejar de tener el combate de 1.9 (enfriamiento de ataque, escudos, etcétera). He investigado un poco y no encuentro muchos recursos sobre el tema que sean recientes. ¿Alguien tiene una idea de cómo lograr esto o una alternativa?
Respuesta
¿Demasiados anuncios?Dudo mucho que esto sea posible con los comandos. Pero bueno, podría estar equivocado.
Contador de carga
Así que ahora, hay un "medidor de carga" que determina si un ataque de barrido se producirá o no.
Según la Fandom Minecraft Wiki :
Si el medidor de recarga de ataque es 84,8% o superior y el jugador está en el suelo de pie o se mueve a una velocidad inferior a la del sprint en línea recta Cuando el jugador se acerca a un enemigo, la espada realiza un ataque de barrido indicado por una partícula de vendaval que alcanza a los enemigos cercanos durante 1 Corazón medio y los hace retroceder; la cantidad de retroceso es un 80% de la del retroceso basal y no se beneficia del encantamiento de retroceso. Como resultado, el jugador puede realizar un ataque de barrido mientras esprinta en diagonal, pero es imposible realizar un ataque de barrido al mismo tiempo que un golpe crítico o mientras se monta alguna entidad .
Así que algunas ideas rápidas de entrada:
- Encuentra un modpack que tenga una entidad invisible debajo de ti pero que no afecte a tu altura, saltos, etc.
- Que la velocidad de sprint sea la misma que la velocidad de sprint en línea recta.
¿Detección?
Para continuar, alguien tuvo la idea de intentando detectar un ataque de barrido en spigotmc :
Podrías intentar detectar el ataque de barrido. El siguiente ejemplo se utiliza para detectarlo, necesita obtener el tick (por ejemplo, una tarea de tick contando, o intenta utilizar attacker.getTicksLived, que podría ser tan bueno en este caso, aunque sólo lo he probado con una tarea de tick) manteniendo algunos datos (tick + hash de ubicación), no es perfecto / confinado al máximo, pero parece funcionar bastante bien.
// 1.9: sweep attack.
final int locHashCode = LocUtil.hashCode(loc); // ATTACKER
if (originalDamage == 1.0) {
// Might be a sweep attack.
if (tick == data.sweepTick && locHashCode == data.sweepLocationHashCode) {
return cancelled;
}
}
else {
data.sweepTick = tick;
data.sweepLocationHashCode = locHashCode;
}
(Idea siendo que 1.0 daño original (!) parece ser lo que hace el ataque de barrido, también será el mismo tick. Confinar por localización del attackr, actualizar localización+ tick con otro daño que no sea 1.0 original).