-
Notifications
You must be signed in to change notification settings - Fork 1
/
FabricCompatHelper.java
106 lines (87 loc) · 3.69 KB
/
FabricCompatHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.beansgalaxy.backpacks.platform;
import com.beansgalaxy.backpacks.compat.TrinketsRegistry;
import com.beansgalaxy.backpacks.data.BackData;
import com.beansgalaxy.backpacks.platform.services.CompatHelper;
import com.beansgalaxy.backpacks.inventory.CauldronInventory;
import com.beansgalaxy.backpacks.platform.services.ConfigHelper;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.material.Fluid;
import java.awt.*;
public class FabricCompatHelper implements CompatHelper {
@Override
public boolean isModLoaded(String namespace) {
return FabricLoader.getInstance().isModLoaded(namespace);
}
@Override
public void setBackSlotItem(BackData backData, ItemStack stack) {
if (isModLoaded(TRINKETS))
TrinketsRegistry.setBackStack(stack, backData);
}
@Override
public ItemStack getBackSlotItem(BackData backData, ItemStack defaultItem) {
if (isModLoaded(TRINKETS))
return TrinketsRegistry.getBackStack(backData, defaultItem);
return defaultItem;
}
@Override
public boolean backSlotDisabled(Player owner) {
if (isModLoaded(TRINKETS))
return TrinketsRegistry.backSlotDisabled(owner);
return false;
}
@Override
public CauldronInventory.FluidAttributes getFluidTexture(Fluid fluid, TextureAtlas blocksAtlas) {
FluidVariant fluidVariant = FluidVariant.of(fluid);
TextureAtlasSprite sprite = FluidVariantRendering.getSprite(fluidVariant);
int color = FluidVariantRendering.getColor(fluidVariant);
return new CauldronInventory.FluidAttributes(sprite, new Color(color));
}
@Override
public boolean invokeListenersOnDeath(BackData backData) {
Context context = new Context(backData);
OnDeathCallback.EVENT.invoker().onDeath(context);
return context.isCancelled;
}
public interface OnDeathCallback {
Event<OnDeathCallback> EVENT = EventFactory.createArrayBacked(OnDeathCallback.class, listeners -> (context) -> {
for (OnDeathCallback listener : listeners) {
listener.onDeath(context);
}
});
void onDeath(Context context);
}
public class Context {
private final BackData backData;
private boolean isCancelled = false;
public Context(BackData backData) {
this.backData = backData;
}
public Player getPlayer() {
return backData.owner;
}
public Container getBackInventory() {
return backData.backpackInventory;
}
public ItemStack getBackStack() {
return backData.getStack();
}
public void setBackStack(ItemStack backStack) {
backData.set(backStack);
}
public boolean keepBackSlotGamerule() {
return !ConfigHelper.keepBackSlot(getPlayer().level());
}
public void cancel() {
isCancelled = true;
}
}
}