Skip to content

Commit

Permalink
Merge pull request #1 from FirstMegaGame4/master
Browse files Browse the repository at this point in the history
Add Event API to Default Configuration Modification
  • Loading branch information
Patbox authored Jun 27, 2024
2 parents 615e535 + 0d3f4e9 commit 3b16bb1
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 12 deletions.
11 changes: 3 additions & 8 deletions src/main/java/eu/pb4/ouch/DamageDisplayLogic.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package eu.pb4.ouch;

import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import eu.pb4.ouch.api.DefaultDisplayEvents;
import eu.pb4.placeholders.api.ParserContext;
import eu.pb4.placeholders.api.PlaceholderContext;
import eu.pb4.placeholders.api.parsers.NodeParser;
Expand All @@ -20,16 +20,11 @@
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.entry.RegistryEntryList;
import net.minecraft.registry.entry.RegistryEntryListCodec;
import net.minecraft.registry.tag.TagKey;
import net.minecraft.text.Text;
import net.minecraft.util.dynamic.Codecs;
import net.minecraft.util.math.MathHelper;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
Expand Down Expand Up @@ -87,7 +82,7 @@ public static DamageDisplayLogic of(RegistryWrapper.WrapperLookup wrapper, Regis
BuiltinPredicates.alwaysTrue(),
BuiltinPredicates.alwaysTrue(),
1,
WrappedText.from(PARSER, format),
WrappedText.from(PARSER, DefaultDisplayEvents.MODIFY_DISPLAY_LOGIC.invoker().modify(wrapper, List.of(type), format)),
FloatingText.DisplaySettings.GENERAL
);
}
Expand All @@ -97,7 +92,7 @@ public static DamageDisplayLogic of(RegistryWrapper.WrapperLookup wrapper, List<
BuiltinPredicates.alwaysTrue(),
BuiltinPredicates.alwaysTrue(),
1,
WrappedText.from(PARSER, format),
WrappedText.from(PARSER, DefaultDisplayEvents.MODIFY_DISPLAY_LOGIC.invoker().modify(wrapper, type, format)),
FloatingText.DisplaySettings.GENERAL
);
}
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/eu/pb4/ouch/DeathDisplayLogic.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package eu.pb4.ouch;

import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import eu.pb4.placeholders.api.ParserContext;
Expand All @@ -21,11 +20,8 @@
import net.minecraft.registry.entry.RegistryEntryList;
import net.minecraft.registry.tag.TagKey;
import net.minecraft.text.Text;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/eu/pb4/ouch/DefaultDisplay.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package eu.pb4.ouch;

import eu.pb4.ouch.api.DefaultDisplayEvents;
import eu.pb4.predicate.api.BuiltinPredicates;
import net.minecraft.entity.damage.DamageType;
import net.minecraft.entity.damage.DamageTypes;
import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.tag.DamageTypeTags;
import net.minecraft.util.Pair;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -42,6 +46,10 @@ static void createDefault(List<DamageDisplayLogic> damage, List<HealDisplayLogic
damage.add(DamageDisplayLogic.of("<#ff0000>-${value}</>"));

heal.add(HealDisplayLogic.of("<#00FF00>+${value}"));

LogicsImpl logics = new LogicsImpl();
DefaultDisplayEvents.APPEND_DISPLAY_LOGIC.invoker().append(lookup, logics);
logics.getLogics().forEach(pair -> damage.add(DamageDisplayLogic.of(lookup, pair.getLeft(), pair.getRight())));
}

static void createShowcase(List<DamageDisplayLogic> damage, List<HealDisplayLogic> heal, List<DeathDisplayLogic> death,
Expand All @@ -51,4 +59,19 @@ static void createShowcase(List<DamageDisplayLogic> damage, List<HealDisplayLogi
death.add(DeathDisplayLogic.of("<red>${message}"));
damageExtra.add(DamageDisplayLogic.of(0.03f, BuiltinPredicates.alwaysTrue(), "<white>Ouch!"));
}

class LogicsImpl implements DefaultDisplayEvents.AppendDisplayLogic.Logics {

final List<Pair<List<RegistryKey<DamageType>>, String>> logics = new ArrayList<>();

@Override
@SafeVarargs
public final void add(String format, RegistryKey<DamageType>... types) {
this.logics.add(new Pair<>(List.of(types), format));
}

List<Pair<List<RegistryKey<DamageType>>, String>> getLogics() {
return this.logics;
}
}
}
75 changes: 75 additions & 0 deletions src/main/java/eu/pb4/ouch/api/DefaultDisplayEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package eu.pb4.ouch.api;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.entity.damage.DamageType;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryWrapper;
import org.jetbrains.annotations.ApiStatus;

import java.util.List;

public final class DefaultDisplayEvents {

/**
* This event allows to append a format applied on one or more {@link DamageType} for the default configuration.
* Example:
* <pre>
* {@code
* DefaultDisplayEvents.APPEND_DISPLAY_LOGIC.register((lookup, logics) -> {
* logics.add(firstDamageFormat, firstDamageTypes...);
* logics.add(secondDamageFormat, secondDamageTypes...);
* logics.add(thirdDamageFormat, thirdDamageTypes...);
* return logics;
* });
* }
* </pre>
*/
public static final Event<AppendDisplayLogic> APPEND_DISPLAY_LOGIC = EventFactory.createArrayBacked(AppendDisplayLogic.class, callbacks -> (lookup, _logics) -> {
AppendDisplayLogic.Logics logics = _logics;
for (AppendDisplayLogic callback : callbacks) {
logics = callback.append(lookup, logics);
}
return logics;
});

/**
* This event allows to modify a format applied on one or more {@link DamageType} for the default configuration.
* Example:
* <pre>
* {@code
* DefaultDisplayEvents.MODIFY_DISPLAY_LOGIC.register((lookup, types, format) -> {
* if (types.contains(DamageTypes.OUT_OF_WORLD)) {
* return yourModifiedFormat;
* }
* return format;
* });
* }
* </pre>
*/
public static final Event<ModifyDisplayLogic> MODIFY_DISPLAY_LOGIC = EventFactory.createArrayBacked(ModifyDisplayLogic.class, callbacks -> (lookup, types, _format) -> {
String format = _format;
for (ModifyDisplayLogic callback : callbacks) {
format = callback.modify(lookup, types, format);
}
return format;
});

@FunctionalInterface
public interface AppendDisplayLogic {

Logics append(RegistryWrapper.WrapperLookup lookup, Logics logics);

@ApiStatus.NonExtendable
interface Logics {

void add(String format, RegistryKey<DamageType>... types);
}
}

@FunctionalInterface
public interface ModifyDisplayLogic {

String modify(RegistryWrapper.WrapperLookup lookup, List<RegistryKey<DamageType>> types, String format);
}
}

0 comments on commit 3b16bb1

Please sign in to comment.