Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Impliments interaction bullets #9

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,23 @@ group = "org.example"
version = providers.environmentVariable("VERSION").getOrElse("1.0.0")

labyMod {
defaultPackageName = "org.example" //change this to your main package name (used by all modules)
defaultPackageName = "com.rappytv.betterfriends"

minecraft {
registerVersion(versions.toTypedArray()) {
runs {
getByName("client") {
// When the property is set to true, you can log in with a Minecraft account
// devLogin = true
devLogin = true
}
}
}
}

addonInfo {
namespace = "example"
displayName = "ExampleAddon"
author = "Example Author"
description = "Example Description"
namespace = "betterfriends"
displayName = "BetterFriends"
author = "RappyTV, JarDateien"
description = "We'll figure that out later"
minecraftVersion = "*"
version = rootProject.version.toString()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.rappytv.betterfriends;

import com.rappytv.betterfriends.config.BetterFriendsConfig;
import com.rappytv.betterfriends.interactions.FriendNoteEditorBullet;
import com.rappytv.betterfriends.interactions.FriendTogglePinBullet;
import com.rappytv.betterfriends.nametags.FriendNoteNameTag;
import net.labymod.api.addon.LabyAddon;
import net.labymod.api.client.entity.player.tag.PositionType;
import net.labymod.api.models.addon.annotation.AddonMain;

@AddonMain
public class BetterFriendsAddon extends LabyAddon<BetterFriendsConfig> {

@Override
protected void enable() {
this.registerSettingCategory();

this.labyAPI().interactionMenuRegistry().register(new FriendNoteEditorBullet(this));
this.labyAPI().interactionMenuRegistry().register(new FriendTogglePinBullet(this));

for (PositionType position : PositionType.values()) {
this.labyAPI().tagRegistry().register(
"betterfriends_friendnote",
position,
new FriendNoteNameTag(this, position)
);
}
}

@Override
protected Class<? extends BetterFriendsConfig> configurationClass() {
return BetterFriendsConfig.class;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.rappytv.betterfriends.config;

import com.rappytv.betterfriends.config.subconfig.FriendNoteTagConfig;
import net.labymod.api.addon.AddonConfig;
import net.labymod.api.client.gui.screen.widget.widgets.input.SwitchWidget.SwitchSetting;
import net.labymod.api.configuration.loader.property.ConfigProperty;
import net.labymod.api.configuration.settings.annotation.SettingSection;

public class BetterFriendsConfig extends AddonConfig {

@SwitchSetting
private final ConfigProperty<Boolean> enabled = new ConfigProperty<>(true);
private final FriendNoteTagConfig friendNoteTagConfig = new FriendNoteTagConfig();

@SettingSection("interactions")
@SwitchSetting
private final ConfigProperty<Boolean> noteEditorBullet = new ConfigProperty<>(true);
@SwitchSetting
private final ConfigProperty<Boolean> togglePinBullet = new ConfigProperty<>(true);

@Override
public ConfigProperty<Boolean> enabled() {
return this.enabled;
}

public FriendNoteTagConfig friendNoteTagConfig() {
return this.friendNoteTagConfig;
}

public ConfigProperty<Boolean> noteEditorBullet() {
return this.noteEditorBullet;
}

public ConfigProperty<Boolean> togglePinBullet() {
return this.togglePinBullet;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.rappytv.betterfriends.config.subconfig;

import net.labymod.api.client.entity.player.tag.PositionType;
import net.labymod.api.client.gui.screen.widget.widgets.input.SliderWidget.SliderSetting;
import net.labymod.api.client.gui.screen.widget.widgets.input.SwitchWidget.SwitchSetting;
import net.labymod.api.client.gui.screen.widget.widgets.input.TextFieldWidget.TextFieldSetting;
import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownSetting;
import net.labymod.api.configuration.loader.Config;
import net.labymod.api.configuration.loader.annotation.ShowSettingInParent;
import net.labymod.api.configuration.loader.property.ConfigProperty;

public class FriendNoteTagConfig extends Config {

@ShowSettingInParent
@SwitchSetting
private final ConfigProperty<Boolean> enabled = new ConfigProperty<>(true);
@SliderSetting(min = 5, max = 10)
private final ConfigProperty<Integer> size = new ConfigProperty<>(10);
@SwitchSetting
private final ConfigProperty<Boolean> hideBackground = new ConfigProperty<>(false);
@DropdownSetting
private final ConfigProperty<PositionType> position = new ConfigProperty<>(
PositionType.BELOW_NAME);
@TextFieldSetting
private final ConfigProperty<String> defaultTag = new ConfigProperty<>("");

public ConfigProperty<Boolean> enabled() {
return this.enabled;
}

public ConfigProperty<Integer> size() {
return this.size;
}

public ConfigProperty<Boolean> hideBackground() {
return this.hideBackground;
}

public ConfigProperty<PositionType> position() {
return this.position;
}

public ConfigProperty<String> defaultTag() {
return this.defaultTag;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.rappytv.betterfriends.interactions;

import com.rappytv.betterfriends.BetterFriendsAddon;
import net.labymod.api.Laby;
import net.labymod.api.client.component.Component;
import net.labymod.api.client.entity.player.Player;
import net.labymod.api.client.entity.player.interaction.BulletPoint;
import net.labymod.api.client.gui.icon.Icon;
import net.labymod.api.labyconnect.LabyConnectSession;
import net.labymod.api.labyconnect.protocol.model.friend.Friend;
import net.labymod.api.util.concurrent.task.Task;

import java.util.concurrent.TimeUnit;

public class FriendNoteEditorBullet implements BulletPoint {

private final BetterFriendsAddon addon;
private Friend friend = null;

public FriendNoteEditorBullet(BetterFriendsAddon addon) {
this.addon = addon;
}

@Override
public Component getTitle() {
return Component.translatable("betterfriends.interactions.editNote.title");
}

@Override
public Icon getIcon() {
return null;
}

@Override
public void execute(Player player) {
// TODO: Fix this
Task.builder(this.friend::openNoteEditor).delay(5, TimeUnit.SECONDS).build().execute();
}

@Override
public boolean isVisible(Player player) {
if (!this.addon.configuration().noteEditorBullet().get()) return false;

LabyConnectSession session = Laby.references().labyConnect().getSession();
if (session == null || !session.isAuthenticated()) return false;

Friend friend = session.getFriend(player.getUniqueId());
if (friend == null) return false;

this.friend = friend;
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.rappytv.betterfriends.interactions;

import com.rappytv.betterfriends.BetterFriendsAddon;
import net.labymod.api.Laby;
import net.labymod.api.client.component.Component;
import net.labymod.api.client.entity.player.Player;
import net.labymod.api.client.entity.player.interaction.BulletPoint;
import net.labymod.api.client.gui.icon.Icon;
import net.labymod.api.labyconnect.LabyConnectSession;
import net.labymod.api.labyconnect.protocol.model.friend.Friend;

public class FriendTogglePinBullet implements BulletPoint {

private final BetterFriendsAddon addon;
private Friend friend;

public FriendTogglePinBullet(BetterFriendsAddon addon) {
this.addon = addon;
}

@Override
public Component getTitle() {
return Component.translatable("betterfriends.interactions.togglePin." + (this.friend.isPinned() ? "un" : "") + "pin.title");
}

@Override
public Icon getIcon() {
return null;
}

@Override
public void execute(Player player) {
if (this.friend.isPinned()) {
this.friend.unpin();
} else {
this.friend.pin();
}
}

@Override
public boolean isVisible(Player player) {
if (!this.addon.configuration().togglePinBullet().get()) return false;

LabyConnectSession session = Laby.references().labyConnect().getSession();
if (session == null || !session.isAuthenticated()) return false;

Friend friend = session.getFriend(player.getUniqueId());
if (friend == null) return false;

this.friend = friend;
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.rappytv.betterfriends.nametags;

import com.rappytv.betterfriends.BetterFriendsAddon;
import com.rappytv.betterfriends.config.BetterFriendsConfig;
import java.awt.*;
import net.labymod.api.Laby;
import net.labymod.api.client.component.serializer.legacy.LegacyComponentSerializer;
import net.labymod.api.client.entity.player.Player;
import net.labymod.api.client.entity.player.tag.PositionType;
import net.labymod.api.client.entity.player.tag.tags.NameTag;
import net.labymod.api.client.entity.player.tag.tags.NameTagBackground;
import net.labymod.api.client.render.font.RenderableComponent;
import net.labymod.api.labyconnect.LabyConnectSession;
import net.labymod.api.labyconnect.protocol.model.friend.Friend;
import org.jetbrains.annotations.Nullable;

public class FriendNoteNameTag extends NameTag {

private static final LegacyComponentSerializer serializer = LegacyComponentSerializer.legacyAmpersand();
private static final int gray = new Color(0, 0, 0, 70).getRGB();
private final BetterFriendsConfig config;
private final PositionType position;

public FriendNoteNameTag(BetterFriendsAddon addon, PositionType position) {
this.config = addon.configuration();
this.position = position;
}

@Override
protected @Nullable RenderableComponent getRenderableComponent() {
if (this.entity == null || !(this.entity instanceof Player)) {
return null;
}

LabyConnectSession session = Laby.references().labyConnect().getSession();
if (session == null || !session.isAuthenticated()) {
return null;
}

Friend friend = session.getFriend(this.entity.getUniqueId());
if (friend == null) {
return null;
}

String note = friend.getNote();
if (note != null && !note.isBlank()) {
return RenderableComponent.of(serializer.deserialize(note));
} else {
String defaultTag = this.config.friendNoteTagConfig().defaultTag().get();
if (defaultTag.isBlank()) {
return null;
}
return RenderableComponent.of(serializer.deserialize(defaultTag));
}
}

@Override
public float getScale() {
return (float) this.config.friendNoteTagConfig().size().get() / 10;
}

@Override
protected NameTagBackground getCustomBackground() {
boolean enabled = !this.config.friendNoteTagConfig().hideBackground().get();
NameTagBackground background = super.getCustomBackground();

if (background == null) {
background = NameTagBackground.custom(enabled, gray);
}

background.setEnabled(enabled);
return background;
}

@Override
public boolean isVisible() {
return this.config.enabled().get()
&& this.config.friendNoteTagConfig().enabled().get()
&& this.config.friendNoteTagConfig().position().get() == this.position
&& !this.entity.isCrouching()
&& super.isVisible();
}
}
25 changes: 0 additions & 25 deletions core/src/main/java/org/example/core/ExampleAddon.java

This file was deleted.

18 changes: 0 additions & 18 deletions core/src/main/java/org/example/core/ExampleConfiguration.java

This file was deleted.

Loading