mirror of
https://github.com/Artillex-Studios/AxMinions.git
synced 2024-12-02 13:13:30 +01:00
Implement tickrates
This commit is contained in:
parent
21d5023aca
commit
0269a101bb
@ -5,7 +5,7 @@ import com.artillexstudios.axminions.minions.actions.effects.Effect;
|
|||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class EffectDispatchEvent extends MinionEvent {
|
public final class EffectDispatchEvent extends MinionEvent {
|
||||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
private final Effect<?, ?> effect;
|
private final Effect<?, ?> effect;
|
||||||
private final Object argument;
|
private final Object argument;
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package com.artillexstudios.axminions.api.events;
|
||||||
|
|
||||||
|
public class MinionPlaceEvent {
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.artillexstudios.axminions.api.events;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public final class PreMinionPlaceEvent extends Event implements Cancellable {
|
||||||
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
|
private final Player player;
|
||||||
|
private final Location location;
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
public PreMinionPlaceEvent(Player player, Location location) {
|
||||||
|
this.player = player;
|
||||||
|
this.location = location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Location location() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player player() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.cancelled = cancelled;
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,7 @@ public final class Config {
|
|||||||
public static int DATABASE_KEEPALIVE_TIME = 0;
|
public static int DATABASE_KEEPALIVE_TIME = 0;
|
||||||
public static int DATABASE_CONNECTION_TIMEOUT = 5000;
|
public static int DATABASE_CONNECTION_TIMEOUT = 5000;
|
||||||
public static DatabaseType DATABASE_TYPE = DatabaseType.H2;
|
public static DatabaseType DATABASE_TYPE = DatabaseType.H2;
|
||||||
|
public static int TICK_FREQUENCY = 1;
|
||||||
public static boolean SHOW_HAND_ANIMATION = true;
|
public static boolean SHOW_HAND_ANIMATION = true;
|
||||||
public static boolean ASYNC_HAND_ANIMATION = false;
|
public static boolean ASYNC_HAND_ANIMATION = false;
|
||||||
public static int ASYNC_PROCESSOR_POOL_SIZE = 3;
|
public static int ASYNC_PROCESSOR_POOL_SIZE = 3;
|
||||||
@ -76,6 +77,7 @@ public final class Config {
|
|||||||
DATABASE_MAXIMUM_LIFETIME = config.getInt("database.pool.maximum-lifetime", DATABASE_MAXIMUM_LIFETIME);
|
DATABASE_MAXIMUM_LIFETIME = config.getInt("database.pool.maximum-lifetime", DATABASE_MAXIMUM_LIFETIME);
|
||||||
DATABASE_KEEPALIVE_TIME = config.getInt("database.pool.keepalive-time", DATABASE_KEEPALIVE_TIME);
|
DATABASE_KEEPALIVE_TIME = config.getInt("database.pool.keepalive-time", DATABASE_KEEPALIVE_TIME);
|
||||||
DATABASE_CONNECTION_TIMEOUT = config.getInt("database.pool.connection-timeout", DATABASE_CONNECTION_TIMEOUT);
|
DATABASE_CONNECTION_TIMEOUT = config.getInt("database.pool.connection-timeout", DATABASE_CONNECTION_TIMEOUT);
|
||||||
|
TICK_FREQUENCY = config.getInt("tick-frequency", TICK_FREQUENCY);
|
||||||
SHOW_HAND_ANIMATION = config.getBoolean("show-hand-animation", SHOW_HAND_ANIMATION);
|
SHOW_HAND_ANIMATION = config.getBoolean("show-hand-animation", SHOW_HAND_ANIMATION);
|
||||||
ASYNC_HAND_ANIMATION = config.getBoolean("async-hand-animation", ASYNC_HAND_ANIMATION);
|
ASYNC_HAND_ANIMATION = config.getBoolean("async-hand-animation", ASYNC_HAND_ANIMATION);
|
||||||
ASYNC_PROCESSOR_POOL_SIZE = config.getInt("async-processor-pool-size", ASYNC_PROCESSOR_POOL_SIZE);
|
ASYNC_PROCESSOR_POOL_SIZE = config.getInt("async-processor-pool-size", ASYNC_PROCESSOR_POOL_SIZE);
|
||||||
|
@ -3,9 +3,7 @@ package com.artillexstudios.axminions.listeners;
|
|||||||
import com.artillexstudios.axapi.items.WrappedItemStack;
|
import com.artillexstudios.axapi.items.WrappedItemStack;
|
||||||
import com.artillexstudios.axapi.items.component.DataComponents;
|
import com.artillexstudios.axapi.items.component.DataComponents;
|
||||||
import com.artillexstudios.axapi.items.nbt.CompoundTag;
|
import com.artillexstudios.axapi.items.nbt.CompoundTag;
|
||||||
import com.artillexstudios.axminions.config.Minions;
|
|
||||||
import com.artillexstudios.axminions.database.DataHandler;
|
import com.artillexstudios.axminions.database.DataHandler;
|
||||||
import com.artillexstudios.axminions.minions.Level;
|
|
||||||
import com.artillexstudios.axminions.minions.Minion;
|
import com.artillexstudios.axminions.minions.Minion;
|
||||||
import com.artillexstudios.axminions.minions.MinionArea;
|
import com.artillexstudios.axminions.minions.MinionArea;
|
||||||
import com.artillexstudios.axminions.minions.MinionData;
|
import com.artillexstudios.axminions.minions.MinionData;
|
||||||
@ -16,7 +14,6 @@ import com.artillexstudios.axminions.utils.Direction;
|
|||||||
import com.artillexstudios.axminions.utils.LocationUtils;
|
import com.artillexstudios.axminions.utils.LocationUtils;
|
||||||
import com.artillexstudios.axminions.utils.LogUtils;
|
import com.artillexstudios.axminions.utils.LogUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -62,6 +59,7 @@ public final class MinionPlaceListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
String typeName = compoundTag.getString("axminions_minion_type");
|
String typeName = compoundTag.getString("axminions_minion_type");
|
||||||
if (typeName == null || typeName.isBlank()) {
|
if (typeName == null || typeName.isBlank()) {
|
||||||
LogUtils.warn("ItemStack in {}'s hand is an invalid minion; the miniontype is empty!", event.getPlayer().getName());
|
LogUtils.warn("ItemStack in {}'s hand is an invalid minion; the miniontype is empty!", event.getPlayer().getName());
|
||||||
@ -77,14 +75,26 @@ public final class MinionPlaceListener implements Listener {
|
|||||||
// TODO: level
|
// TODO: level
|
||||||
itemStack.setAmount(itemStack.getAmount() - 1);
|
itemStack.setAmount(itemStack.getAmount() - 1);
|
||||||
Location location = LocationUtils.toBlockCenter(clickedBlock.getRelative(event.getBlockFace()).getLocation());
|
Location location = LocationUtils.toBlockCenter(clickedBlock.getRelative(event.getBlockFace()).getLocation());
|
||||||
|
|
||||||
|
MinionArea area = MinionWorldCache.getArea(location.getWorld());
|
||||||
|
if (area == null) {
|
||||||
|
LogUtils.warn("{} attempted to place minion, but area is null!", event.getPlayer().getName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Minion atLocation = area.getMinionAt(location);
|
||||||
|
if (atLocation != null) {
|
||||||
|
// TODO: Send message
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Database queries, etc..
|
// TODO: Database queries, etc..
|
||||||
// TODO: ownerId
|
// TODO: ownerId
|
||||||
MinionData data = new MinionData(0, minionType, Direction.NORTH, null, minionType.level(1), 0, null, null, new HashMap<>());
|
MinionData data = new MinionData(0, minionType, Direction.NORTH, null, minionType.level(1), 0, null, null, new HashMap<>());
|
||||||
Minion minion = new Minion(location, data);
|
Minion minion = new Minion(location, data);
|
||||||
MinionArea area = MinionWorldCache.getArea(location.getWorld());
|
|
||||||
MinionWorldCache.add(minion);
|
MinionWorldCache.add(minion);
|
||||||
DataHandler.insertMinion(minion).thenRun(() -> {
|
DataHandler.insertMinion(minion).thenRun(() -> {
|
||||||
LogUtils.debug("Inserted minion!");
|
LogUtils.debug("Inserted minion!");
|
||||||
});
|
});
|
||||||
minion.spawn();
|
minion.spawn();
|
||||||
area.startTicking(location.getChunk());
|
area.startTicking(location.getChunk());
|
||||||
|
@ -42,14 +42,14 @@ public final class Minion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void tick() {
|
public void tick() {
|
||||||
this.tick++;
|
this.tick += Config.TICK_FREQUENCY;
|
||||||
if (this.tick < this.minionData.level().actionTicks()) {
|
if (this.tick < this.minionData.level().actionTicks()) {
|
||||||
if (Config.SHOW_HAND_ANIMATION) {
|
if (Config.SHOW_HAND_ANIMATION) {
|
||||||
AsyncUtils.run(() -> {
|
AsyncUtils.run(() -> {
|
||||||
if (this.armTick >= 20) return;
|
if (this.armTick >= 20) return;
|
||||||
ArmorStandMeta meta = (ArmorStandMeta) this.entity.meta();
|
ArmorStandMeta meta = (ArmorStandMeta) this.entity.meta();
|
||||||
meta.metadata().set(Accessors.RIGHT_ARM_ROTATION, new EulerAngle((-2 + ((double) this.armTick / 10)), 0, 0));
|
meta.metadata().set(Accessors.RIGHT_ARM_ROTATION, new EulerAngle((-2 + ((double) this.armTick / 10)), 0, 0));
|
||||||
this.armTick += 2;
|
this.armTick += (2 * Config.TICK_FREQUENCY);
|
||||||
}, Config.ASYNC_HAND_ANIMATION);
|
}, Config.ASYNC_HAND_ANIMATION);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -12,6 +12,11 @@ database:
|
|||||||
keepalive-time: 0
|
keepalive-time: 0
|
||||||
connection-timeout: 5000
|
connection-timeout: 5000
|
||||||
|
|
||||||
|
# How often should we tick minions?
|
||||||
|
# Increasing this might improve performance a bit.
|
||||||
|
# If this is increased, minion animations might look a bit choppy.
|
||||||
|
tick-frequency: 1
|
||||||
|
|
||||||
# If the minions should show a hand animation
|
# If the minions should show a hand animation
|
||||||
# This has a minimal impact on performance
|
# This has a minimal impact on performance
|
||||||
show-hand-animation: true
|
show-hand-animation: true
|
||||||
|
Loading…
Reference in New Issue
Block a user