Skip to content

Commit

Permalink
eventData.isEnabled, several minor cleanups
Browse files Browse the repository at this point in the history
  • Loading branch information
tal5 committed Dec 22, 2023
1 parent 4bf80cb commit 9a21134
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 29 deletions.
Expand Up @@ -18,10 +18,11 @@ public class EntityStartsStopsRenderingScriptEvent extends ScriptEvent {
// <context.entity> returns an EntityTag of the entity being rendered.
// <context.rendering> returns an ElementTag(Boolean) of whether the entity is being rendered.
//
// @Warning This event may fire very rapidly when the client moves the camera around a lot.
// @Warning This event may fire very rapidly when the client's camera moves around a lot.
// -->

public static EntityStartsStopsRenderingScriptEvent instance;

public EntityTag entity;
public boolean rendering;

Expand Down Expand Up @@ -51,6 +52,9 @@ public ObjectTag getContext(String name) {
}

public void handleEntityRendered(Entity entity, boolean rendering) {
if (!eventData.isEnabled) {
return;
}
this.entity = new EntityTag(entity);
this.rendering = rendering;
fire();
Expand Down
Expand Up @@ -68,24 +68,12 @@ public ObjectTag getContext(String name) {
}

public void handleScreenChange(Screen screen, Screen previousScreen, boolean open) {
if (!enabled) {
if (!eventData.isEnabled) {
return;
}
type = ScreenNameMapping.getScreenName(screen.getClass());
previousType = previousScreen != null ? ScreenNameMapping.getScreenName(previousScreen.getClass()) : null;
opened = open;
fire();
}

boolean enabled = false;

@Override
public void init() {
enabled = true;
}

@Override
public void destroy() {
enabled = false;
}
}
Expand Up @@ -6,26 +6,31 @@
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(KeyBinding.class)
public abstract class EventKeyBindingMixin {

private static final IntSet pressedKeys = new IntArraySet();
@Unique
private static final IntSet clientizen$pressedKeys = new IntArraySet();

@Inject(method = "setKeyPressed", at = @At("HEAD"))
private static void clientizen$onKeyPressStateChanged(InputUtil.Key key, boolean pressed, CallbackInfo ci) {
if (!KeyPressReleaseScriptEvent.instance.eventData.isEnabled) {
return;
}
if (key.getCategory() == InputUtil.Type.KEYSYM || key.getCategory() == InputUtil.Type.MOUSE) {
if (!pressed || !pressedKeys.contains(key.getCode())) {
if (!pressed || !clientizen$pressedKeys.contains(key.getCode())) {
KeyPressReleaseScriptEvent.instance.handleKeyPressStateChange(key, pressed);
}
if (pressed) {
pressedKeys.add(key.getCode());
clientizen$pressedKeys.add(key.getCode());
}
else {
pressedKeys.remove(key.getCode());
clientizen$pressedKeys.remove(key.getCode());
}
}
}
Expand Down
17 changes: 6 additions & 11 deletions src/main/java/com/denizenscript/clientizen/objects/EntityTag.java
Expand Up @@ -23,7 +23,9 @@
import net.minecraft.entity.vehicle.VehicleEntity;
import net.minecraft.text.Text;

import java.util.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

public class EntityTag implements ObjectTag, Adjustable {

Expand Down Expand Up @@ -200,23 +202,16 @@ public static void register() {
return new ElementTag(object.getTypeName(), true);
});

tagProcessor.registerTag(ElementTag.class, "health", (attribute, object) -> {
if (object.getEntity() instanceof LivingEntity livingEntity) {
return new ElementTag(livingEntity.getHealth());
}
return null;
});

// <--[tag]
// @attribute <EntityTag.is_rendering>
// @returns ElementTag(Boolean)
// @description
// Returns whether an entity is being rendered by the client's camera.
// Returns whether an entity is being rendered by the client.
// This does not mean the entity will always be visible, but within the camera's viewing frustum.
// -->
tagProcessor.registerTag(ElementTag.class, "is_rendering", ((attribute, object) -> {
tagProcessor.registerTag(ElementTag.class, "is_rendering", (attribute, object) -> {
return new ElementTag(renderedEntities.contains(object.getEntity().getUuid()));
}));
});
}

public static final ObjectTagProcessor<EntityTag> tagProcessor = new ObjectTagProcessor<>();
Expand Down

0 comments on commit 9a21134

Please sign in to comment.