mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2024-11-22 10:36:10 +01:00
Trial adding interactions to entity hitbox
This commit is contained in:
parent
89331998a0
commit
e9412b8159
@ -4,7 +4,10 @@ import java.util.function.Function;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Interaction;
|
||||||
|
|
||||||
|
import net.citizensnpcs.api.CitizensAPI;
|
||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.persistence.Persist;
|
import net.citizensnpcs.api.persistence.Persist;
|
||||||
import net.citizensnpcs.api.trait.Trait;
|
import net.citizensnpcs.api.trait.Trait;
|
||||||
@ -19,6 +22,7 @@ public class BoundingBoxTrait extends Trait implements Supplier<BoundingBox> {
|
|||||||
private Function<EntityDim, BoundingBox> function;
|
private Function<EntityDim, BoundingBox> function;
|
||||||
@Persist
|
@Persist
|
||||||
private float height = -1;
|
private float height = -1;
|
||||||
|
private NPC interaction;
|
||||||
@Persist
|
@Persist
|
||||||
private float scale = -1;
|
private float scale = -1;
|
||||||
@Persist
|
@Persist
|
||||||
@ -53,6 +57,9 @@ public class BoundingBoxTrait extends Trait implements Supplier<BoundingBox> {
|
|||||||
@Override
|
@Override
|
||||||
public void onDespawn() {
|
public void onDespawn() {
|
||||||
npc.data().remove(NPC.Metadata.BOUNDING_BOX_FUNCTION);
|
npc.data().remove(NPC.Metadata.BOUNDING_BOX_FUNCTION);
|
||||||
|
if (interaction != null) {
|
||||||
|
interaction.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -64,6 +71,25 @@ public class BoundingBoxTrait extends Trait implements Supplier<BoundingBox> {
|
|||||||
public void onSpawn() {
|
public void onSpawn() {
|
||||||
base = EntityDim.from(npc.getEntity());
|
base = EntityDim.from(npc.getEntity());
|
||||||
npc.data().set(NPC.Metadata.BOUNDING_BOX_FUNCTION, this);
|
npc.data().set(NPC.Metadata.BOUNDING_BOX_FUNCTION, this);
|
||||||
|
if (!SUPPORTS_INTERACTION)
|
||||||
|
return;
|
||||||
|
interaction = CitizensAPI.getTemporaryNPCRegistry().createNPC(EntityType.INTERACTION, "");
|
||||||
|
interaction.data().set(NPC.Metadata.NAMEPLATE_VISIBLE, false);
|
||||||
|
interaction.addTrait(new ClickRedirectTrait(npc));
|
||||||
|
interaction.spawn(npc.getStoredLocation());
|
||||||
|
if (SUPPORTS_RESPONSIVE) {
|
||||||
|
((Interaction) interaction.getEntity()).setResponsive(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (interaction == null)
|
||||||
|
return;
|
||||||
|
EntityDim dim = getAdjustedBoundingBox();
|
||||||
|
Interaction box = ((Interaction) interaction.getEntity());
|
||||||
|
box.setInteractionWidth(dim.width);
|
||||||
|
box.setInteractionHeight(dim.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBoundingBoxFunction(Function<EntityDim, BoundingBox> func) {
|
public void setBoundingBoxFunction(Function<EntityDim, BoundingBox> func) {
|
||||||
@ -81,4 +107,20 @@ public class BoundingBoxTrait extends Trait implements Supplier<BoundingBox> {
|
|||||||
public void setWidth(float width) {
|
public void setWidth(float width) {
|
||||||
this.width = width;
|
this.width = width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean SUPPORTS_INTERACTION = true;
|
||||||
|
private static boolean SUPPORTS_RESPONSIVE = true;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
Class.forName("org.bukkit.entity.Interaction");
|
||||||
|
try {
|
||||||
|
Interaction.class.getMethod("isResponsive");
|
||||||
|
} catch (NoSuchMethodException | SecurityException e) {
|
||||||
|
SUPPORTS_RESPONSIVE = false;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
SUPPORTS_INTERACTION = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user