Clean repo for open source release

Remove build artifacts, dev tool configs, unused dependencies,
and third-party source dumps. Add proper README, update .gitignore,
clean up Makefile.
This commit is contained in:
NotEvil
2026-04-12 00:51:22 +02:00
parent 2e7a1d403b
commit f6466360b6
1947 changed files with 238025 additions and 1 deletions

View File

@@ -0,0 +1,120 @@
package com.tiedup.remake.v2.bondage.items;
import com.tiedup.remake.items.base.IHasResistance;
import com.tiedup.remake.items.base.ILockable;
import com.tiedup.remake.v2.BodyRegionV2;
import com.tiedup.remake.v2.bondage.IV2BondageItem;
import com.tiedup.remake.v2.bondage.V2EquipResult;
import com.tiedup.remake.v2.bondage.capability.V2EquipmentHelper;
import java.util.List;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.Nullable;
/**
* Base class for V2 bondage items.
*
* Provides:
* - Self-equip via right-click in air (use())
* - Equip on target via right-click on entity (interactLivingEntity())
* - Lock-aware canUnequip() bridging IV2BondageItem and ILockable
* - Lock/resistance tooltips
*
* Subclasses implement: getOccupiedRegions(), getModelLocation(), getPosePriority(),
* getResistanceId(), notifyStruggle().
*/
public abstract class AbstractV2BondageItem extends Item
implements IV2BondageItem, ILockable, IHasResistance {
protected AbstractV2BondageItem(Properties properties) {
super(properties);
}
// ===== EQUIP: SELF (left-click hold with tying duration) =====
// Self-equip is handled by SelfBondageInputHandler (left-click hold) which sends
// PacketSelfBondage, routed to handleV2SelfBondage() with tying progress bar.
// Right-click in air does nothing for self-equip — consistent with V1 behavior.
@Override
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
return InteractionResultHolder.pass(player.getItemInHand(hand));
}
// ===== EQUIP: ON TARGET (right-click on entity) =====
@Override
public InteractionResult interactLivingEntity(
ItemStack stack, Player player, LivingEntity target, InteractionHand hand
) {
// Client returns SUCCESS for arm swing animation. Server may reject —
// minor visual desync is accepted Forge pattern (same as vanilla food/bow).
if (player.level().isClientSide) {
return InteractionResult.SUCCESS;
}
// Cannot equip if player's arms are restrained
if (V2EquipmentHelper.isRegionOccupied(player, BodyRegionV2.ARMS)) {
return InteractionResult.PASS;
}
// Distance + line-of-sight validation
if (player.distanceTo(target) > 4.0 || !player.hasLineOfSight(target)) {
return InteractionResult.PASS;
}
V2EquipResult result = V2EquipmentHelper.equipItem(target, stack);
if (result.isSuccess()) {
// Drop displaced items at target's feet
for (ItemStack displaced : result.displaced()) {
target.spawnAtLocation(displaced);
}
stack.shrink(1);
return InteractionResult.SUCCESS;
}
return InteractionResult.PASS;
}
// ===== LOCK-AWARE CANUNEQUIP =====
@Override
public boolean canUnequip(ItemStack stack, LivingEntity entity) {
return !isLocked(stack);
}
// ===== TOOLTIPS =====
@Override
public void appendHoverText(
ItemStack stack, @Nullable Level level, List<Component> tooltip, TooltipFlag flag
) {
super.appendHoverText(stack, level, tooltip, flag);
// Lock status from ILockable
appendLockTooltip(stack, tooltip);
// Escape difficulty
int difficulty = getEscapeDifficulty(stack);
if (difficulty > 0) {
tooltip.add(Component.translatable("item.tiedup.tooltip.escape_difficulty", difficulty)
.withStyle(ChatFormatting.GRAY));
}
}
// ===== IV2BondageItem DEFAULTS =====
@Override
public int getEscapeDifficulty() { return 0; }
@Override
public boolean supportsColor() { return false; }
@Override
public boolean supportsSlimModel() { return false; }
}

View File

@@ -0,0 +1,54 @@
package com.tiedup.remake.v2.bondage.items;
import com.tiedup.remake.core.TiedUpMod;
import com.tiedup.remake.v2.BodyRegionV2;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Set;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.LivingEntity;
/**
* V2 Handcuffs — first V2 bondage item.
*
* Occupies ARMS only. Mittens (HANDS) can coexist on top.
* Uses existing cuffs_prototype.glb for 3D rendering.
*/
public class V2Handcuffs extends AbstractV2BondageItem {
private static final Set<BodyRegionV2> REGIONS =
Collections.unmodifiableSet(EnumSet.of(BodyRegionV2.ARMS));
private static final ResourceLocation MODEL = new ResourceLocation(
TiedUpMod.MOD_ID, "models/gltf/v2/handcuffs/cuffs_prototype.glb"
);
public V2Handcuffs() {
super(new Properties().stacksTo(1));
}
@Override
public Set<BodyRegionV2> getOccupiedRegions() { return REGIONS; }
@Override
public ResourceLocation getModelLocation() { return MODEL; }
@Override
public int getPosePriority() { return 30; }
@Override
public int getEscapeDifficulty() { return 100; }
@Override
public String getResistanceId() { return "handcuffs"; }
@Override
public void notifyStruggle(LivingEntity entity) {
entity.level().playSound(
null, entity.getX(), entity.getY(), entity.getZ(),
net.minecraft.sounds.SoundEvents.CHAIN_STEP,
net.minecraft.sounds.SoundSource.PLAYERS,
0.4f, 1.0f
);
}
}