Skip to content

Commit b6f0078

Browse files
committed
Add basic Anshar compat
1 parent 7df9696 commit b6f0078

11 files changed

Lines changed: 337 additions & 76 deletions

File tree

build.gradle

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ repositories {
3535
maven {
3636
url "https://jitpack.io"
3737
}
38+
39+
maven {
40+
name = "Fuzs Mod Resources"
41+
url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/"
42+
}
3843
}
3944

4045
fabricApi {
@@ -77,6 +82,14 @@ dependencies {
7782
modCompileOnly "com.terraformersmc:modmenu:$modmenu_version"
7883
modLocalRuntime "com.terraformersmc:modmenu:$modmenu_version"
7984

85+
modCompileOnly "maven.modrinth:anshar:$anshar_version"
86+
modLocalRuntime "maven.modrinth:anshar:$anshar_version"
87+
modLocalRuntime "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:21.1.3"
88+
modLocalRuntime "org.ladysnake.cardinal-components-api:cardinal-components-base:$cca_version"
89+
modLocalRuntime "org.ladysnake.cardinal-components-api:cardinal-components-block:$cca_version"
90+
modLocalRuntime "org.ladysnake.cardinal-components-api:cardinal-components-level:$cca_version"
91+
modLocalRuntime "org.ladysnake.cardinal-components-api:cardinal-components-entity:$cca_version"
92+
8093
modLocalRuntime "maven.modrinth:betterf3:11.0.3"
8194
modLocalRuntime "maven.modrinth:component-viewer:1.2.0+1.21.1"
8295
modLocalRuntime "com.github.provismet:lilylib:1.3.1-mc1.21" // required by tooltip-scroll

gradle.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ yarn_mappings=1.21.1+build.3
77
loader_version=0.16.10
88
fabric_version=0.115.1+1.21.1
99

10-
mod_version=1.0.0-alpha.24
10+
mod_version=1.0.0-alpha.25
1111
maven_group=falseresync.vivatech
1212
archives_base_name=vivatech
1313

1414
wthit_version=12.4.5
1515
badpackets_version=0.8.1
1616
emi_version=1.1.10+1.21
17-
modmenu_version=11.0.3
17+
modmenu_version=11.0.3
18+
anshar_version=1.0.2
19+
cca_version=6.1.2

src/main/java/falseresync/vivatech/client/hud/FocusPickerHudItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class FocusPickerHudItem implements HudItem {
3737
private static final Comparator<ItemStack> FOCUS_ORDERING = Comparator
3838
.<ItemStack>comparingInt(stack -> ((FocusItem) stack.getItem()).getRawId())
3939
.thenComparingInt(stack -> stack.getOrDefault(VivatechComponents.FOCUS_PLATING, -1))
40-
.thenComparing(stack -> stack.getOrDefault(VivatechComponents.UUID, UUID.randomUUID()));
40+
.thenComparingLong(stack -> stack.getOrDefault(VivatechComponents.UUID, UUID.randomUUID()).getMostSignificantBits());
4141
private final MinecraftClient client;
4242
private final TextRenderer textRenderer;
4343
private final LinkedList<ItemStack> focuses = new LinkedList<>();

src/main/java/falseresync/vivatech/common/Vivatech.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
import falseresync.vivatech.common.item.focus.TransmutationFocusBehavior;
1515
import falseresync.vivatech.common.power.PowerSystem;
1616
import falseresync.vivatech.common.power.wire.WireType;
17+
import falseresync.vivatech.compat.anshar.AnsharCompat;
1718
import falseresync.vivatech.network.VivatechNetworking;
1819
import falseresync.vivatech.network.VivatechServerReceivers;
1920
import me.shedaniel.autoconfig.AutoConfig;
2021
import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer;
2122
import net.fabricmc.api.ModInitializer;
2223
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
24+
import net.fabricmc.loader.api.FabricLoader;
2325
import net.minecraft.registry.Registries;
2426
import net.minecraft.util.Identifier;
2527
import org.slf4j.LoggerFactory;
@@ -78,6 +80,10 @@ public void onInitialize() {
7880
powerSystem = new PowerSystem(server);
7981
});
8082

83+
if (FabricLoader.getInstance().isModLoaded("anshar")) {
84+
VivatechItems.COMET_WARP_FOCUS.registerBehaviorExtension(new AnsharCompat());
85+
}
86+
8187
LOGGER.info("Initialized");
8288
}
8389
}

src/main/java/falseresync/vivatech/common/VivatechUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class VivatechUtil {
3939
}
4040
});
4141

42-
public static final Direction[] HORIZONTAL_DIRECTIONS = new Direction[]{ Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST };
42+
public static final Direction[] HORIZONTAL_DIRECTIONS = new Direction[]{Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST};
4343

4444
private static final Function<World, Integer> memo$findViewDistance = Util.memoize((World world) -> world.isClient()
4545
? MinecraftClient.getInstance().options.getClampedViewDistance()

src/main/java/falseresync/vivatech/common/item/GadgetItem.java

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import falseresync.vivatech.client.VivatechKeybindings;
44
import falseresync.vivatech.common.data.VivatechComponents;
5+
import falseresync.vivatech.common.item.focus.Focus;
56
import falseresync.vivatech.common.item.focus.FocusItem;
67
import net.fabricmc.api.EnvType;
78
import net.fabricmc.api.Environment;
@@ -70,6 +71,12 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand han
7071
var gadgetStack = user.getStackInHand(hand);
7172
var focusStack = getEquipped(gadgetStack);
7273
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
74+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
75+
var result = behaviorExtension.focusUse(gadgetStack, focusStack, world, user, hand);
76+
if (result.getResult() != ActionResult.PASS) {
77+
return result;
78+
}
79+
}
7380
return focusItem.focusUse(gadgetStack, focusStack, world, user, hand);
7481
}
7582

@@ -85,6 +92,12 @@ public ActionResult useOnBlock(ItemUsageContext context) {
8592
var gadgetStack = context.getStack();
8693
var focusStack = getEquipped(gadgetStack);
8794
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
95+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
96+
var result = behaviorExtension.focusUseOnBlock(gadgetStack, focusStack, context);
97+
if (result != ActionResult.PASS) {
98+
return result;
99+
}
100+
}
88101
return focusItem.focusUseOnBlock(gadgetStack, focusStack, context);
89102
}
90103

@@ -96,6 +109,12 @@ public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity
96109
var gadgetStack = user.getStackInHand(hand);
97110
var focusStack = getEquipped(gadgetStack);
98111
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
112+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
113+
var result = behaviorExtension.focusUseOnEntity(gadgetStack, focusStack, user, entity, hand);
114+
if (result != ActionResult.PASS) {
115+
return result;
116+
}
117+
}
99118
return focusItem.focusUseOnEntity(gadgetStack, focusStack, user, entity, hand);
100119
}
101120

@@ -106,6 +125,9 @@ public ActionResult useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity
106125
public void usageTick(World world, LivingEntity user, ItemStack stack, int remainingUseTicks) {
107126
var focusStack = getEquipped(stack);
108127
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
128+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
129+
behaviorExtension.focusUsageTick(world, user, stack, focusStack, remainingUseTicks);
130+
}
109131
focusItem.focusUsageTick(world, user, stack, focusStack, remainingUseTicks);
110132
return;
111133
}
@@ -118,6 +140,12 @@ public void usageTick(World world, LivingEntity user, ItemStack stack, int remai
118140
public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) {
119141
var focusStack = getEquipped(stack);
120142
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
143+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
144+
var newStack = behaviorExtension.focusFinishUsing(stack, focusStack, world, user);
145+
if (!ItemStack.areEqual(newStack, stack)) {
146+
return newStack;
147+
}
148+
}
121149
return focusItem.focusFinishUsing(stack, focusStack, world, user);
122150
}
123151

@@ -129,6 +157,9 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) {
129157
public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) {
130158
var focusStack = getEquipped(stack);
131159
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
160+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
161+
behaviorExtension.focusOnStoppedUsing(stack, focusStack, world, user, remainingUseTicks);
162+
}
132163
focusItem.focusOnStoppedUsing(stack, focusStack, world, user, remainingUseTicks);
133164
}
134165
}
@@ -137,6 +168,9 @@ public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int
137168
public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) {
138169
var focusStack = getEquipped(stack);
139170
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
171+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
172+
behaviorExtension.focusInventoryTick(stack, focusStack, world, entity, slot, selected);
173+
}
140174
focusItem.focusInventoryTick(stack, focusStack, world, entity, slot, selected);
141175
}
142176
// if (entity instanceof ServerPlayerEntity player) {
@@ -151,6 +185,11 @@ public void inventoryTick(ItemStack stack, World world, Entity entity, int slot,
151185
public boolean isUsedOnRelease(ItemStack stack) {
152186
var focusStack = getEquipped(stack);
153187
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
188+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
189+
if (behaviorExtension.focusIsUsedOnRelease(stack, focusStack)) {
190+
return true;
191+
}
192+
}
154193
return focusItem.focusIsUsedOnRelease(stack, focusStack);
155194
}
156195

@@ -166,6 +205,12 @@ public boolean isUsedOnRelease(ItemStack stack) {
166205
public int getMaxUseTime(ItemStack stack, LivingEntity user) {
167206
var focusStack = getEquipped(stack);
168207
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
208+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
209+
var maxUseTime = behaviorExtension.focusGetMaxUseTime(stack, focusStack, user);
210+
if (maxUseTime > 0) {
211+
return maxUseTime;
212+
}
213+
}
169214
return focusItem.focusGetMaxUseTime(stack, focusStack, user);
170215
}
171216

@@ -178,6 +223,12 @@ public float getBonusAttackDamage(Entity target, float baseAttackDamage, DamageS
178223
if (weaponStack != null && weaponStack.getItem() instanceof GadgetItem) {
179224
var focusStack = getEquipped(weaponStack);
180225
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
226+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
227+
var bonusAttackDamage = behaviorExtension.focusGetBonusAttackDamage(weaponStack, focusStack, target, baseAttackDamage, damageSource);
228+
if (bonusAttackDamage > 0) {
229+
return bonusAttackDamage;
230+
}
231+
}
181232
return focusItem.focusGetBonusAttackDamage(weaponStack, focusStack, target, baseAttackDamage, damageSource);
182233
}
183234
}
@@ -191,6 +242,11 @@ public float getBonusAttackDamage(Entity target, float baseAttackDamage, DamageS
191242
public boolean isItemBarVisible(ItemStack stack) {
192243
var focusStack = getEquipped(stack);
193244
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
245+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
246+
if (behaviorExtension.focusIsItemBarVisible(stack, focusStack)) {
247+
return true;
248+
}
249+
}
194250
return focusItem.focusIsItemBarVisible(stack, focusStack);
195251
}
196252

@@ -201,6 +257,12 @@ public boolean isItemBarVisible(ItemStack stack) {
201257
public int getItemBarStep(ItemStack stack) {
202258
var focusStack = getEquipped(stack);
203259
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
260+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
261+
var step = behaviorExtension.focusGetItemBarStep(stack, focusStack);
262+
if (step > 0) {
263+
return step;
264+
}
265+
}
204266
return focusItem.focusGetItemBarStep(stack, focusStack);
205267
}
206268

@@ -211,6 +273,12 @@ public int getItemBarStep(ItemStack stack) {
211273
public int getItemBarColor(ItemStack stack) {
212274
var focusStack = getEquipped(stack);
213275
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
276+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
277+
var step = behaviorExtension.focusGetItemBarStep(stack, focusStack);
278+
if (step > 0) {
279+
return step;
280+
}
281+
}
214282
return focusItem.focusGetItemBarColor(stack, focusStack);
215283
}
216284

@@ -221,6 +289,11 @@ public int getItemBarColor(ItemStack stack) {
221289
public boolean hasGlint(ItemStack stack) {
222290
var focusStack = getEquipped(stack);
223291
if (!focusStack.isEmpty() && focusStack.getItem() instanceof FocusItem focusItem) {
292+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
293+
if (behaviorExtension.focusHasGlint(stack, focusStack)) {
294+
return true;
295+
}
296+
}
224297
return focusItem.focusHasGlint(stack, focusStack);
225298
}
226299

@@ -236,6 +309,9 @@ public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> to
236309
.translatable("tooltip.vivatech.gadget.active_focus", focusStack.getName())
237310
.styled(style -> style.withColor(Formatting.GRAY)));
238311
focusItem.focusAppendTooltip(stack, focusStack, context, tooltip, type);
312+
for (Focus behaviorExtension : focusItem.getBehaviorExtensions()) {
313+
behaviorExtension.focusAppendTooltip(stack, focusStack, context, tooltip, type);
314+
}
239315
}
240316
tooltip.add(Text
241317
.translatable("tooltip.vivatech.gadget.change_focus", KeyBindingHelper.getBoundKeyOf(VivatechKeybindings.TOOL_CONTROL).getLocalizedText())
@@ -260,11 +336,17 @@ public TypedActionResult<ItemStack> exchangeFocuses(ItemStack gadgetStack, ItemS
260336
if (oldFocusStack.getItem() instanceof FocusItem oldFocusItem) {
261337
removeOld = true;
262338
oldFocusItem.focusOnUnequipped(gadgetStack, oldFocusStack, user);
339+
for (Focus behaviorExtension : oldFocusItem.getBehaviorExtensions()) {
340+
behaviorExtension.focusOnUnequipped(gadgetStack, oldFocusStack, user);
341+
}
263342
}
264343

265344
if (newFocusStack.getItem() instanceof FocusItem newFocusItem) {
266345
insertNew = true;
267346
newFocusItem.focusOnEquipped(gadgetStack, newFocusStack, user);
347+
for (Focus behaviorExtension : newFocusItem.getBehaviorExtensions()) {
348+
behaviorExtension.focusOnEquipped(gadgetStack, newFocusStack, user);
349+
}
268350
}
269351

270352
// newFocus != empty, oldFocus == empty -> success oldFocus

src/main/java/falseresync/vivatech/common/item/focus/CometWarpFocusItem.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import net.minecraft.world.World;
2323

2424
import java.util.List;
25+
import java.util.Set;
2526

2627
public class CometWarpFocusItem extends FocusItem {
2728
public static final int DEFAULT_PLACEMENT_COST = 5;
@@ -65,7 +66,7 @@ public TypedActionResult<ItemStack> focusUse(ItemStack gadgetStack, ItemStack fo
6566
var anchor = gadgetStack.get(VivatechComponents.WARP_FOCUS_ANCHOR);
6667
if (anchor == null) {
6768
player.playSoundToPlayer(SoundEvents.BLOCK_LEVER_CLICK, SoundCategory.PLAYERS, 1f, 1f);
68-
player.sendMessage(Text.translatable("hud.vivatech.focus.comet_warp.no_anchor"), false);
69+
player.sendMessage(Text.translatable("hud.vivatech.focus.comet_warp.no_anchor"), true);
6970
return TypedActionResult.fail(gadgetStack);
7071
}
7172

@@ -98,6 +99,11 @@ public boolean focusHasGlint(ItemStack gadgetStack, ItemStack focusStack) {
9899
return hasGlint(gadgetStack);
99100
}
100101

102+
@Override
103+
public boolean focusHasGlintSelf(ItemStack stack) {
104+
return stack.contains(VivatechComponents.WARP_FOCUS_ANCHOR);
105+
}
106+
101107
@Override
102108
public void focusAppendTooltip(ItemStack gadgetStack, ItemStack focusStack, TooltipContext context, List<Text> tooltip, TooltipType type) {
103109
var anchor = gadgetStack.get(VivatechComponents.WARP_FOCUS_ANCHOR);
@@ -114,12 +120,7 @@ public void focusAppendTooltip(ItemStack gadgetStack, ItemStack focusStack, Tool
114120
}
115121

116122
@Override
117-
public boolean hasGlint(ItemStack stack) {
118-
return stack.contains(VivatechComponents.WARP_FOCUS_ANCHOR);
119-
}
120-
121-
@Override
122-
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
123+
public void focusAppendTooltipSelf(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
123124
var anchor = stack.get(VivatechComponents.WARP_FOCUS_ANCHOR);
124125
if (anchor != null) {
125126
tooltip.add(Text.translatable(

0 commit comments

Comments
 (0)