custom damage tint support

This commit is contained in:
zimzaza4
2024-09-28 00:20:56 +08:00
parent 767b86c780
commit e554c7c572
5 changed files with 27 additions and 4 deletions

View File

@@ -26,6 +26,8 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public final class GeyserModelEngine extends JavaPlugin {
@@ -51,6 +53,9 @@ public final class GeyserModelEngine extends JavaPlugin {
@Getter
private int joinSendDelay;
@Getter
private long entityPositionUpdatePeriod;
@Getter
private boolean debug;
@@ -62,6 +67,9 @@ public final class GeyserModelEngine extends JavaPlugin {
@Getter
private List<String> enablePartVisibilityModels = new ArrayList<>();
@Getter
private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
@Override
public void onEnable() {
// Plugin startup logic
@@ -72,6 +80,7 @@ public final class GeyserModelEngine extends JavaPlugin {
debug = getConfig().getBoolean("debug", false);
modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT"));
joinSendDelay = getConfig().getInt("join-send-delay", 20);
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
if (joinSendDelay > 0) {
joinedPlayer = CacheBuilder.newBuilder()
@@ -98,6 +107,16 @@ public final class GeyserModelEngine extends JavaPlugin {
initialized = true;
}, 100);
scheduler.scheduleAtFixedRate(() -> {
try {
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
models.values().forEach(ModelEntity::teleportToModel);
}
} catch (Throwable t) {
t.printStackTrace();
}
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
BedrockMountControl.startTask();
}

View File

@@ -85,7 +85,7 @@ public class ModelListener implements Listener {
/*
@EventHandler(priority = EventPriority.MONITOR)
public void onModelEntityHurt(EntityDamageEvent event) {
if (event.isCancelled()) {
@@ -96,13 +96,14 @@ public class ModelListener implements Listener {
if (model != null) {
for (Map.Entry<ActiveModel, ModelEntity> entry : model.entrySet()) {
if (!entry.getValue().getEntity().isDead()) {
entry.getValue().getEntity().sendHurtPacket(entry.getValue().getViewers());
//entry.getValue().getEntity().sendHurtPacket(entry.getValue().getViewers());
}
}
}
}
*/
/*
@EventHandler

View File

@@ -66,7 +66,6 @@ public class EntityTask {
return;
}
model.teleportToModel();
Set<Player> viewers = model.getViewers();
ActiveModel activeModel = model.getActiveModel();
ModeledEntity modeledEntity = model.getModeledEntity();
@@ -108,7 +107,6 @@ public class EntityTask {
sendHitBoxToAll();
}
BaseEntity<?> base = modeledEntity.getBase();
// Optional<Player> player = viewers.stream().findAny();
// if (player.isEmpty()) return
@@ -191,6 +189,9 @@ public class EntityTask {
if (players.isEmpty()) return;
Color color = new Color(model.getActiveModel().getDefaultTint().asARGB());
if (model.getActiveModel().isMarkedHurt()) {
color = new Color(model.getActiveModel().getDamageTint().asARGB());
}
if (firstSend) {
if (color.equals(lastColor)) return;
}

View File

@@ -18,6 +18,7 @@ public class EntityHurtPacket implements WrapperPacket {
packet.getIntegers().writeSafely(1,0);
packet.getIntegers().writeSafely(2, 0);
packet.getIntegers().writeSafely(3, 0);
packet.getBooleans().writeSafely(0, false);
return packet;
}

View File

@@ -1,6 +1,7 @@
data-send-delay: 5
entity-view-distance: 50
join-send-delay: 20
entity-position-update-period: 35
model-entity-type: BAT # must be a living entity
enable-part-visibility-models:
- example