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

Add Curios support #30

Draft
wants to merge 6 commits into
base: master-1.16
Choose a base branch
from
Draft
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ repo/*
*.ipr
*.iws
out/*
run*.launch

# Ignore mac-specific file(s)
.DS_Store
Expand Down
9 changes: 8 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
url = "https://maven.minecraftforge.net/"
}
}
dependencies {
Expand All @@ -20,6 +20,7 @@ plugins {

apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'maven'

loadProperties()
Expand Down Expand Up @@ -84,6 +85,10 @@ repositories {
name "Raoulvdberge Repo"
url "https://repo.refinedmods.com/"
}
maven {
name "theillusivec4"
url = "https://maven.theillusivec4.top/"
}
maven {
name = "CurseForge"
url = "https://minecraft.curseforge.com/api/maven/"
Expand Down Expand Up @@ -119,6 +124,8 @@ dependencies {
compileOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-1.16:${config.theoneprobe_version}") // https://maven.tterrag.com/mcjty/theoneprobe/
//compile fg.deobf("hwyla:Hwyla-forge-${config.waila_version}") // https://www.curseforge.com/minecraft/mc-mods/hwyla/files/ https://github.com/TehNut/HWYLA and https://github.com/TehNut/temporary-maven-thing/tree/master/maven/mcp/mobius/waila/Hwyla
compile fg.deobf("com.refinedmods:refinedstorage:${config.refinedstorage_version}") // https://repo.refinedmods.com/com/raoulvdberge/refinedstorage/
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${config.curios_version}") // https://maven.theillusivec4.top/top/theillusivec4/curios/curios-forge
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${config.curios_version}:api") // "
}

minecraft {
Expand Down
5 changes: 3 additions & 2 deletions build.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod_version=1.0.0
minecraft_version=1.16.5
forge_version=36.0.14
forge_version=36.2.34
mcp_mappings_channel=snapshot
mcp_mappings_version=20201028-1.16.3
cyclopscore_version=1.11.6-64
Expand All @@ -18,9 +18,10 @@ tconstruct_version=1.12-2.7.4.37
forestry_version=1.12:5.4.3.129
charset_version=0.4.0-pre10
IC2_version=2.8.7-ex112
theoneprobe_version=1.16-3.0.0-beta-3
theoneprobe_version=1.16-3.1.4-22
refinedstorage_version=1.9.9+133
ie_version=0.12-90-521
crafttweakerapi_version=4.1.6.457
crafttweakermain_version=1.12-4.1.6.457
signals_version=1.12.2:1.1.0-2
curios_version=1.16.5-4.0.8.2
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.cyclops.integrateddynamicscompat.modcompat.capabilities.WorkerDryingBasinTileCompat;
import org.cyclops.integrateddynamicscompat.modcompat.capabilities.WorkerMechanicalMachineTileCompat;
import org.cyclops.integrateddynamicscompat.modcompat.capabilities.WorkerSqueezerTileCompat;
import org.cyclops.integrateddynamicscompat.modcompat.curios.CuriosModCompat;
import org.cyclops.integrateddynamicscompat.modcompat.refinedstorage.RefinedStorageModCompat;
import org.cyclops.integrateddynamicscompat.modcompat.top.TopModCompat;
import org.cyclops.integrateddynamicscompat.proxy.ClientProxy;
Expand All @@ -42,6 +43,7 @@ protected void loadModCompats(ModCompatLoader modCompatLoader) {
super.loadModCompats(modCompatLoader);
modCompatLoader.addModCompat(new TopModCompat());
modCompatLoader.addModCompat(new RefinedStorageModCompat());
modCompatLoader.addModCompat(new CuriosModCompat());
// TODO: temporarily disable some mod compats
// Mod compats
// modCompatLoader.addModCompat(new CharsetPipesModCompat());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ public class Reference {
public static final String MOD_TOP = "theoneprobe";
public static final String MOD_WAILA = "waila";
public static final String MOD_REFINEDSTORAGE = "refinedstorage";
public static final String MOD_CURIOS = "curios";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios;

import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.cyclops.cyclopscore.modcompat.ICompatInitializer;
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
import org.cyclops.integrateddynamicscompat.modcompat.curios.operator.CuriosOperators;
import org.cyclops.integrateddynamicscompat.modcompat.curios.variable.CuriosValueTypeListProxyFactories;

/**
* @author met4000
*/
public class CuriosInitializer implements ICompatInitializer {

@Override
public void initialize() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
}

protected void setup(FMLCommonSetupEvent event) {
CuriosValueTypeListProxyFactories.load();

Operators.REGISTRY.register(CuriosOperators.OBJECT_ENTITY_CURIOSINVENTORY);
Operators.REGISTRY.register(CuriosOperators.OBJECT_ENTITY_CURIOSSLOTTYPES);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios;

import org.cyclops.cyclopscore.modcompat.ICompatInitializer;
import org.cyclops.cyclopscore.modcompat.IModCompat;
import org.cyclops.integrateddynamicscompat.Reference;

/**
* Mod compat for the Curios API.
* @author met4000
*
*/
public class CuriosModCompat implements IModCompat {

@Override
public String getId() {
return Reference.MOD_CURIOS;
}

@Override
public boolean isEnabledDefault() {
return true;
}

@Override
public String getComment() {
return "Curios operators and aspects.";
}

@Override
public ICompatInitializer createInitializer() {
return new CuriosInitializer();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios.helper;

import org.cyclops.integrateddynamics.api.APIReference;
import org.cyclops.integrateddynamicscompat.Reference;

/**
* L10N entries for curios modcompat.
* @author met4000
*/
public class L10NValues {

public static final String LOCAL_NS = Reference.MOD_CURIOS;
public static final String GLOBAL_NS = APIReference.API_OWNER;

public static final String ERROR_NS = "valuetype." + GLOBAL_NS + ".error." + LOCAL_NS;
public static final String VALUETYPE_ERROR_BADPROXYSTACKSHANDLER = ERROR_NS + ".bad_proxy_stackshandler";
public static final String VALUETYPE_ERROR_BADPROXYSLOTINDEX = ERROR_NS + ".bad_proxy_slotindex";
public static final String VALUETYPE_ERROR_BADPROXYVALUE = ERROR_NS + ".bad_proxy_value";

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios.operator;

import java.util.Collections;
import java.util.Optional;
import java.util.function.BiFunction;

import org.cyclops.integrateddynamics.api.evaluate.operator.IOperator;
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueType;
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeListProxy;
import org.cyclops.integrateddynamics.core.evaluate.OperatorBuilders;
import org.cyclops.integrateddynamics.core.evaluate.operator.OperatorBase.IFunction;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueObjectTypeEntity;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeList;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;
import org.cyclops.integrateddynamicscompat.modcompat.curios.variable.ValueTypeListProxyEntityCuriosInventory;
import org.cyclops.integrateddynamicscompat.modcompat.curios.variable.ValueTypeListProxyEntityCuriosSlotTypes;

import net.minecraft.entity.Entity;
import net.minecraft.world.World;

/**
* @author met4000
*/
public class CuriosOperators {

protected static <T extends IValueType<V>, V extends IValue> IFunction entityListFunctionFactory(T valueType, BiFunction<World, Entity, IValueTypeListProxy<T, V>> proxyFactory) {
return variables -> {
ValueObjectTypeEntity.ValueEntity valueEntity = variables.getValue(0, ValueTypes.OBJECT_ENTITY);
Optional<Entity> a = valueEntity.getRawValue();
if (a.isPresent()) {
Entity entity = a.get();
return ValueTypeList.ValueList.ofFactory(proxyFactory.apply(entity.world, entity));
} else {
return ValueTypeList.ValueList.ofList(valueType, Collections.<V>emptyList());
}
};
}

/**
* The list of curios itemstacks from an entity
*/
public static final IOperator OBJECT_ENTITY_CURIOSINVENTORY = OperatorBuilders.ENTITY_1_SUFFIX_LONG
.output(ValueTypes.LIST).symbol("curios_inventory").operatorName("curiosinventory")
.function(entityListFunctionFactory(ValueTypes.OBJECT_ITEMSTACK, ValueTypeListProxyEntityCuriosInventory::new)).build();

/**
* The list of strings of curios slot types from an entity
*/
public static final IOperator OBJECT_ENTITY_CURIOSSLOTTYPES = OperatorBuilders.ENTITY_1_SUFFIX_LONG
.output(ValueTypes.LIST).symbol("curios_slot_types").operatorName("curiosslottypes")
.function(entityListFunctionFactory(ValueTypes.STRING, ValueTypeListProxyEntityCuriosSlotTypes::new)).build();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios.slot;

import javax.annotation.Nonnull;

import org.cyclops.integrateddynamicscompat.proxy.ISlotProxy;

import net.minecraft.item.ItemStack;
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
import top.theillusivec4.curios.api.type.inventory.IDynamicStackHandler;

/**
* @author met4000
*/
public class CuriosSlotProxy implements ISlotProxy {

protected ICurioStacksHandler curiosStackHandler;
protected int slot;

public CuriosSlotProxy(@Nonnull ICurioStacksHandler curiosStackHandler, int slot) {
this.curiosStackHandler = curiosStackHandler;
this.slot = slot;
}

public String getIdentifier() {
return curiosStackHandler.getIdentifier();
}

protected IDynamicStackHandler getDynamicStackHandler() {
return curiosStackHandler.getStacks();
}

@Override
public ItemStack getStack() {
return getDynamicStackHandler().getStackInSlot(slot);
}

@Override
public void setStack(ItemStack stack) {
getDynamicStackHandler().setStackInSlot(slot, stack);
}

@Override
public ItemStack insertItem(ItemStack stack, boolean simulate) {
return getDynamicStackHandler().insertItem(slot, stack, simulate);
}

@Override
public ItemStack extractItem(int amount, boolean simulate) {
return getDynamicStackHandler().extractItem(slot, amount, simulate);
}

@Override
public int getSlotLimit() {
return getDynamicStackHandler().getSlotLimit(slot);
}

@Override
public boolean isItemValid(ItemStack stack) {
return getDynamicStackHandler().isItemValid(slot, stack);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios.variable;

import org.cyclops.integrateddynamics.Reference;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueObjectTypeItemStack;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeListProxyFactories;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeListProxyNBTFactory;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeString;

import net.minecraft.util.ResourceLocation;

public class CuriosValueTypeListProxyFactories {
public static ValueTypeListProxyNBTFactory<ValueObjectTypeItemStack, ValueObjectTypeItemStack.ValueItemStack, ValueTypeListProxyEntityCuriosInventory> ENTITY_CURIOSINVENTORY;
public static ValueTypeListProxyNBTFactory<ValueTypeString, ValueTypeString.ValueString, ValueTypeListProxyEntityCuriosSlotTypes> ENTITY_CURIOSSLOTTYPES;;

public static void load() {
if (ENTITY_CURIOSINVENTORY == null) {
ENTITY_CURIOSINVENTORY = ValueTypeListProxyFactories.REGISTRY.register(new ValueTypeListProxyNBTFactory<>(new ResourceLocation(Reference.MOD_ID, "entity_curios_inventory"), ValueTypeListProxyEntityCuriosInventory.class));
ENTITY_CURIOSSLOTTYPES = ValueTypeListProxyFactories.REGISTRY.register(new ValueTypeListProxyNBTFactory<>(new ResourceLocation(Reference.MOD_ID, "entity_curios_slot_types"), ValueTypeListProxyEntityCuriosSlotTypes.class));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.cyclops.integrateddynamicscompat.modcompat.curios.variable;

import net.minecraft.entity.Entity;
import net.minecraft.world.World;

import org.cyclops.cyclopscore.persist.nbt.INBTProvider;
import org.cyclops.integrateddynamics.api.evaluate.EvaluationException;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueObjectTypeItemStack;
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;

/**
* A list proxy for the curios inventory of an entity.
* @author met4000
*/
public class ValueTypeListProxyEntityCuriosInventory extends ValueTypeListProxyEntityCuriosSlotBase<ValueObjectTypeItemStack, ValueObjectTypeItemStack.ValueItemStack> implements INBTProvider {

public ValueTypeListProxyEntityCuriosInventory(World world, Entity entity) {
super(CuriosValueTypeListProxyFactories.ENTITY_CURIOSINVENTORY.getName(), ValueTypes.OBJECT_ITEMSTACK, world, entity);
}

public ValueTypeListProxyEntityCuriosInventory() {
this(null, null);
}

@Override
public ValueObjectTypeItemStack.ValueItemStack get(int index) throws EvaluationException {
return ValueObjectTypeItemStack.ValueItemStack.of(getCuriosSlotProxy(index).getStack());
}

}
Loading