mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-28 16:06:48 +01:00
Back on Patch, Part III
- Better visibility for low/half amounts of fluids in basins - Fixed Mechanical Press head getting stuck in extended position when off-screened or when its basin changes - Added processingTime support to mixing recipes (defaults to 100) - Fixed Basin recipes with fluid output not starting when targeted output inventory supports items only - Fixed item extraction from create creating stacks of unstackable items when source inventory allows stacking them (Storage Drawers) - Fixed Deployers not having a valid item capability when asked before their first tick - Fixed Mechanical Crafting recipes able to be automated via packing
This commit is contained in:
parent
ebf1a895c9
commit
52eca118ad
11 changed files with 2426 additions and 32 deletions
|
@ -444,6 +444,7 @@ b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
|||
5ae77ed97ee05a7ed98999178677e576c1140007 assets/create/lang/en_ud.json
|
||||
5a7c0c3ea8d5fe01289b4eb2ea4f175bad825672 assets/create/lang/en_us.json
|
||||
c7c1900b9a88af98d3af131dae5f1e2263c86635 assets/create/lang/unfinished/de_de.json
|
||||
bb65514ab38063b4686efe9e7f1d8de78823111f assets/create/lang/unfinished/es_cl.json
|
||||
800b427fc2e4f3b71df9c6295e500d77e8c1d486 assets/create/lang/unfinished/es_es.json
|
||||
5ad47cb60df592b461672e224dfb89167f8861e1 assets/create/lang/unfinished/fr_fr.json
|
||||
216065d27084497ffed7cacddfe86cab542643d9 assets/create/lang/unfinished/it_it.json
|
||||
|
@ -1747,7 +1748,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
|||
a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||
58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json
|
||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
||||
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||
83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json
|
||||
|
|
2348
src/generated/resources/assets/create/lang/unfinished/es_cl.json
Normal file
2348
src/generated/resources/assets/create/lang/unfinished/es_cl.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -28,8 +28,8 @@
|
|||
"trigger": "create:bracket_apply",
|
||||
"conditions": {
|
||||
"accepted_entries": [
|
||||
"create:large_cogwheel",
|
||||
"create:cogwheel"
|
||||
"create:cogwheel",
|
||||
"create:large_cogwheel"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -36,6 +36,7 @@ import com.simibubi.create.compat.jei.category.ProcessingViaFanCategory;
|
|||
import com.simibubi.create.compat.jei.category.SawingCategory;
|
||||
import com.simibubi.create.compat.jei.category.SequencedAssemblyCategory;
|
||||
import com.simibubi.create.compat.jei.category.SpoutCategory;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe;
|
||||
import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
|
@ -166,8 +167,10 @@ public class CreateJEI implements IModPlugin {
|
|||
.build(),
|
||||
|
||||
autoSquare = register("automatic_packing", PackingCategory::autoSquare)
|
||||
.recipes(r -> (r instanceof ICraftingRecipe) && MechanicalPressTileEntity.canCompress(r)
|
||||
&& !AllRecipeTypes.isManualRecipe(r), BasinRecipe::convertShapeless)
|
||||
.recipes(
|
||||
r -> (r instanceof ICraftingRecipe) && !(r instanceof MechanicalCraftingRecipe)
|
||||
&& MechanicalPressTileEntity.canCompress(r) && !AllRecipeTypes.isManualRecipe(r),
|
||||
BasinRecipe::convertShapeless)
|
||||
.catalyst(AllBlocks.MECHANICAL_PRESS::get)
|
||||
.catalyst(AllBlocks.BASIN::get)
|
||||
.enableWhen(c -> c.allowShapedSquareInPress)
|
||||
|
|
|
@ -105,6 +105,12 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
@Override
|
||||
public void initialize() {
|
||||
super.initialize();
|
||||
initHandler();
|
||||
}
|
||||
|
||||
private void initHandler() {
|
||||
if (invHandler != null)
|
||||
return;
|
||||
if (!level.isClientSide) {
|
||||
player = new DeployerFakePlayer((ServerWorld) level);
|
||||
if (deferredInventoryList != null) {
|
||||
|
@ -393,8 +399,11 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||
if (isItemHandlerCap(cap) && invHandler != null)
|
||||
if (isItemHandlerCap(cap)) {
|
||||
if (invHandler == null)
|
||||
initHandler();
|
||||
return invHandler.cast();
|
||||
}
|
||||
return super.getCapability(cap, side);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.simibubi.create.content.contraptions.fluids.FluidFX;
|
|||
import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipeManager;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.ProcessingRecipe;
|
||||
import com.simibubi.create.foundation.advancement.AllTriggers;
|
||||
import com.simibubi.create.foundation.advancement.ITriggerable;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
|
@ -128,7 +129,15 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity {
|
|||
|
||||
if ((!level.isClientSide || isVirtual()) && runningTicks == 20) {
|
||||
if (processingTicks < 0) {
|
||||
processingTicks = MathHelper.clamp((MathHelper.log2((int) (512 / speed))) * 15 + 1, 1, 512);
|
||||
|
||||
float recipeSpeed = 1;
|
||||
if (currentRecipe instanceof ProcessingRecipe) {
|
||||
int t = ((ProcessingRecipe<?>) currentRecipe).getProcessingDuration();
|
||||
if (t != 0)
|
||||
recipeSpeed = t / 100f;
|
||||
}
|
||||
|
||||
processingTicks = MathHelper.clamp((MathHelper.log2((int) (512 / speed))) * MathHelper.ceil(recipeSpeed * 15) + 1, 1, 512);
|
||||
|
||||
Optional<BasinTileEntity> basin = getBasin();
|
||||
if (basin.isPresent()) {
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.simibubi.create.AllBlocks;
|
|||
import com.simibubi.create.AllRecipeTypes;
|
||||
import com.simibubi.create.AllSoundEvents;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.contraptions.components.crafter.MechanicalCraftingRecipe;
|
||||
import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipe;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinOperatingTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
|
@ -362,7 +363,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity {
|
|||
|
||||
@Override
|
||||
protected <C extends IInventory> boolean matchStaticFilters(IRecipe<C> recipe) {
|
||||
return (recipe instanceof ICraftingRecipe && canCompress(recipe) && !AllRecipeTypes.isManualRecipe(recipe))
|
||||
return (recipe instanceof ICraftingRecipe && !(recipe instanceof MechanicalCraftingRecipe)
|
||||
&& canCompress(recipe) && !AllRecipeTypes.isManualRecipe(recipe))
|
||||
|| recipe.getType() == AllRecipeTypes.COMPACTING.getType();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,9 +35,6 @@ public class PressInstance extends ShaftInstance implements IDynamicInstance {
|
|||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
if (!press.running)
|
||||
return;
|
||||
|
||||
transformModels();
|
||||
}
|
||||
|
||||
|
|
|
@ -149,6 +149,8 @@ public class BasinRenderer extends SmartTileEntityRenderer<BasinTileEntity> {
|
|||
return 0;
|
||||
|
||||
float fluidLevel = MathHelper.clamp(totalUnits / 2000, 0, 1);
|
||||
|
||||
fluidLevel = 1 - ((1 - fluidLevel) * (1 - fluidLevel));
|
||||
|
||||
float xMin = 2 / 16f;
|
||||
float xMax = 2 / 16f;
|
||||
|
|
|
@ -479,10 +479,19 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
IFluidHandler targetTank = te == null ? null
|
||||
: te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite())
|
||||
.orElse(null);
|
||||
boolean externalTankNotPresent = targetTank == null;
|
||||
|
||||
if (!outputItems.isEmpty() && targetInv == null)
|
||||
return false;
|
||||
if (!outputFluids.isEmpty() && targetTank == null)
|
||||
return false;
|
||||
if (!outputFluids.isEmpty() && externalTankNotPresent) {
|
||||
// Special case - fluid outputs but output only accepts items
|
||||
targetTank = outputTank.getCapability()
|
||||
.orElse(null);
|
||||
if (targetTank == null)
|
||||
return false;
|
||||
if (!acceptFluidOutputsIntoBasin(outputFluids, simulate, targetTank))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (simulate)
|
||||
return true;
|
||||
|
@ -492,8 +501,9 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
continue;
|
||||
spoutputBuffer.add(itemStack.copy());
|
||||
}
|
||||
for (FluidStack fluidStack : outputFluids)
|
||||
spoutputFluidBuffer.add(fluidStack.copy());
|
||||
if (!externalTankNotPresent)
|
||||
for (FluidStack fluidStack : outputFluids)
|
||||
spoutputFluidBuffer.add(fluidStack.copy());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -503,7 +513,32 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
|
||||
if (targetInv == null && !outputItems.isEmpty())
|
||||
return false;
|
||||
if (!acceptItemOutputsIntoBasin(outputItems, simulate, targetInv))
|
||||
return false;
|
||||
if (outputFluids.isEmpty())
|
||||
return true;
|
||||
if (targetTank == null)
|
||||
return false;
|
||||
if (!acceptFluidOutputsIntoBasin(outputFluids, simulate, targetTank))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean acceptFluidOutputsIntoBasin(List<FluidStack> outputFluids, boolean simulate,
|
||||
IFluidHandler targetTank) {
|
||||
for (FluidStack fluidStack : outputFluids) {
|
||||
FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE;
|
||||
int fill = targetTank instanceof SmartFluidTankBehaviour.InternalFluidHandler
|
||||
? ((SmartFluidTankBehaviour.InternalFluidHandler) targetTank).forceFill(fluidStack.copy(), action)
|
||||
: targetTank.fill(fluidStack.copy(), action);
|
||||
if (fill != fluidStack.getAmount())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean acceptItemOutputsIntoBasin(List<ItemStack> outputItems, boolean simulate, IItemHandler targetInv) {
|
||||
for (ItemStack itemStack : outputItems) {
|
||||
// Catalyst items are never consumed
|
||||
if (itemStack.hasContainerItem() && itemStack.getContainerItem()
|
||||
|
@ -513,21 +548,6 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
.isEmpty())
|
||||
return false;
|
||||
}
|
||||
|
||||
if (outputFluids.isEmpty())
|
||||
return true;
|
||||
if (targetTank == null)
|
||||
return false;
|
||||
|
||||
for (FluidStack fluidStack : outputFluids) {
|
||||
FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE;
|
||||
int fill = targetTank instanceof SmartFluidTankBehaviour.InternalFluidHandler
|
||||
? ((SmartFluidTankBehaviour.InternalFluidHandler) targetTank).forceFill(fluidStack.copy(), action)
|
||||
: targetTank.fill(fluidStack.copy(), action);
|
||||
if (fill != fluidStack.getAmount())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -621,7 +641,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor
|
|||
Vector3d outMotion = directionVec.scale(1 / 16f)
|
||||
.add(0, -1 / 16f, 0);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
visualizedOutputFluids.forEach(ia -> {
|
||||
FluidStack fluidStack = ia.getValue();
|
||||
IParticleData fluidParticle = FluidFX.getFluidParticle(fluidStack);
|
||||
|
|
|
@ -155,7 +155,10 @@ public class ItemHelper {
|
|||
extracting = ItemStack.EMPTY;
|
||||
|
||||
for (int slot = 0; slot < inv.getSlots(); slot++) {
|
||||
ItemStack stack = inv.extractItem(slot, maxExtractionCount - extracting.getCount(), true);
|
||||
int amountToExtractFromThisSlot =
|
||||
Math.min(maxExtractionCount - extracting.getCount(), inv.getStackInSlot(slot)
|
||||
.getMaxStackSize());
|
||||
ItemStack stack = inv.extractItem(slot, amountToExtractFromThisSlot, true);
|
||||
|
||||
if (stack.isEmpty())
|
||||
continue;
|
||||
|
|
Loading…
Reference in a new issue