mirror of
https://github.com/xSquishyLiam/mc-GeyserModelEngine-plugin.git
synced 2025-12-19 14:59:19 +00:00
custom damage tint support
This commit is contained in:
@@ -26,6 +26,8 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class GeyserModelEngine extends JavaPlugin {
|
public final class GeyserModelEngine extends JavaPlugin {
|
||||||
@@ -51,6 +53,9 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
@Getter
|
@Getter
|
||||||
private int joinSendDelay;
|
private int joinSendDelay;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private long entityPositionUpdatePeriod;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
|
|
||||||
@@ -62,6 +67,9 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private List<String> enablePartVisibilityModels = new ArrayList<>();
|
private List<String> enablePartVisibilityModels = new ArrayList<>();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
// Plugin startup logic
|
// Plugin startup logic
|
||||||
@@ -72,6 +80,7 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
debug = getConfig().getBoolean("debug", false);
|
debug = getConfig().getBoolean("debug", false);
|
||||||
modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT"));
|
modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT"));
|
||||||
joinSendDelay = getConfig().getInt("join-send-delay", 20);
|
joinSendDelay = getConfig().getInt("join-send-delay", 20);
|
||||||
|
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
|
||||||
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
|
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
|
||||||
if (joinSendDelay > 0) {
|
if (joinSendDelay > 0) {
|
||||||
joinedPlayer = CacheBuilder.newBuilder()
|
joinedPlayer = CacheBuilder.newBuilder()
|
||||||
@@ -98,6 +107,16 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
}, 100);
|
}, 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();
|
BedrockMountControl.startTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public class ModelListener implements Listener {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onModelEntityHurt(EntityDamageEvent event) {
|
public void onModelEntityHurt(EntityDamageEvent event) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
@@ -96,13 +96,14 @@ public class ModelListener implements Listener {
|
|||||||
if (model != null) {
|
if (model != null) {
|
||||||
for (Map.Entry<ActiveModel, ModelEntity> entry : model.entrySet()) {
|
for (Map.Entry<ActiveModel, ModelEntity> entry : model.entrySet()) {
|
||||||
if (!entry.getValue().getEntity().isDead()) {
|
if (!entry.getValue().getEntity().isDead()) {
|
||||||
entry.getValue().getEntity().sendHurtPacket(entry.getValue().getViewers());
|
//entry.getValue().getEntity().sendHurtPacket(entry.getValue().getViewers());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ public class EntityTask {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
model.teleportToModel();
|
|
||||||
Set<Player> viewers = model.getViewers();
|
Set<Player> viewers = model.getViewers();
|
||||||
ActiveModel activeModel = model.getActiveModel();
|
ActiveModel activeModel = model.getActiveModel();
|
||||||
ModeledEntity modeledEntity = model.getModeledEntity();
|
ModeledEntity modeledEntity = model.getModeledEntity();
|
||||||
@@ -108,7 +107,6 @@ public class EntityTask {
|
|||||||
sendHitBoxToAll();
|
sendHitBoxToAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseEntity<?> base = modeledEntity.getBase();
|
|
||||||
// Optional<Player> player = viewers.stream().findAny();
|
// Optional<Player> player = viewers.stream().findAny();
|
||||||
// if (player.isEmpty()) return
|
// if (player.isEmpty()) return
|
||||||
|
|
||||||
@@ -191,6 +189,9 @@ public class EntityTask {
|
|||||||
if (players.isEmpty()) return;
|
if (players.isEmpty()) return;
|
||||||
|
|
||||||
Color color = new Color(model.getActiveModel().getDefaultTint().asARGB());
|
Color color = new Color(model.getActiveModel().getDefaultTint().asARGB());
|
||||||
|
if (model.getActiveModel().isMarkedHurt()) {
|
||||||
|
color = new Color(model.getActiveModel().getDamageTint().asARGB());
|
||||||
|
}
|
||||||
if (firstSend) {
|
if (firstSend) {
|
||||||
if (color.equals(lastColor)) return;
|
if (color.equals(lastColor)) return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class EntityHurtPacket implements WrapperPacket {
|
|||||||
packet.getIntegers().writeSafely(1,0);
|
packet.getIntegers().writeSafely(1,0);
|
||||||
packet.getIntegers().writeSafely(2, 0);
|
packet.getIntegers().writeSafely(2, 0);
|
||||||
packet.getIntegers().writeSafely(3, 0);
|
packet.getIntegers().writeSafely(3, 0);
|
||||||
|
|
||||||
packet.getBooleans().writeSafely(0, false);
|
packet.getBooleans().writeSafely(0, false);
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
data-send-delay: 5
|
data-send-delay: 5
|
||||||
entity-view-distance: 50
|
entity-view-distance: 50
|
||||||
join-send-delay: 20
|
join-send-delay: 20
|
||||||
|
entity-position-update-period: 35
|
||||||
model-entity-type: BAT # must be a living entity
|
model-entity-type: BAT # must be a living entity
|
||||||
enable-part-visibility-models:
|
enable-part-visibility-models:
|
||||||
- example
|
- example
|
||||||
|
|||||||
Reference in New Issue
Block a user