12
1

Add Bow Damge and Fire #261

Manuell gemergt
Lixfel hat 14 Commits von record_extension nach master 2021-04-23 19:52:27 +02:00 zusammengeführt
3 geänderte Dateien mit 53 neuen und 11 gelöschten Zeilen
Nur Änderungen aus Commit d2799bfb87 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -347,7 +347,7 @@ public class Config {
EventTeamRedID = 0;
BothTeamsPublic = true;
MaximumTeamMembers = Integer.MAX_VALUE;
SpectateSystem = true;
SpectateSystem = false;
}
String blueLeader = System.getProperty("blueLeader", null);
@ -384,6 +384,6 @@ public class Config {
return ArenaMode.Test.contains(mode);
}
public static boolean recording(){
return true;//mode == ArenaMode.EVENT;
return mode == ArenaMode.EVENT;
}
}

Datei anzeigen

@ -19,6 +19,12 @@
package de.steamwar.fightsystem.listener;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.EnumWrappers;
import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.fight.Fight;
@ -28,6 +34,7 @@ import de.steamwar.fightsystem.record.RecordSystem;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependent;
import de.steamwar.fightsystem.states.StateDependentListener;
import net.minecraft.server.v1_15_R1.PacketPlayInBlockDig;
import org.bukkit.*;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
@ -35,6 +42,7 @@ import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.entity.*;
import org.bukkit.event.inventory.InventoryClickEvent;
@ -68,6 +76,35 @@ public class Recording implements Listener {
despawnTNT();
}
}.register();
//Bow Listener
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.BLOCK_PLACE) {
@Override
public void onPacketReceiving(PacketEvent event) {
PacketContainer packet = event.getPacket();
EnumWrappers.Hand hand = packet.getHands().read(0);
Player p = event.getPlayer();
if(!((hand == EnumWrappers.Hand.MAIN_HAND && p.getInventory().getItemInMainHand().getType() == Material.BOW) ||
(hand == EnumWrappers.Hand.OFF_HAND && p.getInventory().getItemInOffHand().getType() == Material.BOW)))
return;
RecordSystem.bowSpan(p, true, hand == EnumWrappers.Hand.MAIN_HAND?1:0);
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.BLOCK_DIG) {
@Override
public void onPacketReceiving(PacketEvent e) {
if(e.getPlayer() != event.getPlayer())
return;
PacketContainer packetDig = e.getPacket();
if(packetDig.getPlayerDigTypes().read(0) == EnumWrappers.PlayerDigType.RELEASE_USE_ITEM) {
RecordSystem.bowSpan(e.getPlayer(), false, hand == EnumWrappers.Hand.MAIN_HAND?0:1);
ProtocolLibrary.getProtocolManager().removePacketListener(this);
}
}
});
}
});
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -110,6 +147,9 @@ public class Recording implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent e) {
if(e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || e.getCause() == EntityDamageEvent.DamageCause.FIRE ||e.getEntity().getFireTicks() > 0)
RecordSystem.setOnFire(e.getEntity(), false);
if(e.getEntityType() != EntityType.PLAYER)
return;
@ -118,9 +158,6 @@ public class Recording implements Listener {
return;
RecordSystem.damageAnimation(p);
if(e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK)
RecordSystem.setOnFire(p);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)

Datei anzeigen

@ -64,9 +64,9 @@ public class RecordSystem {
* PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot
* ArrowSpawnPacket (0x08) + int EntityId
* FireballSpawnPacket (0x09) + int EntityId
* BowSpanPacket (0x0A) + int EntityId + boolean hand
* BowSpanPacket (0x0A) + int EntityId + boolean start + int hand
* PlayerDamagePacket (0x0B) + int EntityId
* SetOnFire (0x0C) + int EntityId
* SetOnFire (0x0C) + int EntityId + boolean perma
Lixfel markierte diese Unterhaltung als gelöst
Review

Dieses Packet kommt mir nicht ganz richtig vor, FireTick ist doch eine sache, welche zufällig weggeht, somit ist es nicht deterministisch, also weiß ich nicht, ob das abspielen dieser nicht dann mal länger und mal kürzer ist, was nicht im Sinne des Packets sein dürfte.

Dieses Packet kommt mir nicht ganz richtig vor, FireTick ist doch eine sache, welche zufällig weggeht, somit ist es nicht deterministisch, also weiß ich nicht, ob das abspielen dieser nicht dann mal länger und mal kürzer ist, was nicht im Sinne des Packets sein dürfte.
Review

Deshalb wird der FireTick auch, wenn die perma flag auf false ist, nur für 21 Ticks abgespielt, somit ist relativ genau, kann aber noch max. 1 Sekunde off sein.

Deshalb wird der FireTick auch, wenn die perma flag auf false ist, nur für 21 Ticks abgespielt, somit ist relativ genau, kann aber noch max. 1 Sekunde off sein.
*
*
* BlockPacket (0x30) + pos int, byte, int + int BlockState
@ -166,6 +166,8 @@ public class RecordSystem {
public static synchronized void arrowSpawn(Entity e){
Recorder.rByte(0x08);
spawnEntity(e);
if(e.getFireTicks() > 0)
setOnFire(e, true);
}
public static synchronized void fireballSpawn(Entity e){
@ -173,9 +175,11 @@ public class RecordSystem {
spawnEntity(e);
}
public static synchronized void bowSpan(Player p) {
public static synchronized void bowSpan(Entity e, boolean start, int hand) {
Chaoscaot markierte diese Unterhaltung als gelöst
Review

Bögen kann man nur in der MainHand spannen? (Meines wissens nach?)

Bögen kann man nur in der MainHand spannen? (Meines wissens nach?)
Recorder.rByte(0x0A);
Recorder.rInt(p.getEntityId());
Recorder.rInt(e.getEntityId());
Recorder.rBoolean(start);
Recorder.rInt(hand);
Recorder.flush();
}
@ -185,9 +189,10 @@ public class RecordSystem {
Recorder.flush();
}
public static synchronized void setOnFire(Player p) {
public static synchronized void setOnFire(Entity e, boolean perma) {
Chaoscaot markierte diese Unterhaltung als gelöst
Review

Gibt es überhaupt permafeuer, wenn ja, wo?

Gibt es überhaupt permafeuer, wenn ja, wo?
Recorder.rByte(0x0C);
Recorder.rInt(p.getEntityId());
Recorder.rInt(e.getEntityId());
Recorder.rBoolean(perma);
Recorder.flush();
}